自拟三子棋小游戏

来源:互联网 发布:淘宝买的袖剑能杀人吗 编辑:程序博客网 时间:2024/06/06 08:58

头文件部分:

#ifndef _SANZIQI_H__#define _SANZIQI_H__#include<stdio.h>#include<stdlib.h>#include<time.h>#define ROW 3#define LINE 3void init_board(char arr[ROW][LINE]);       //初始化棋盘int check_full(char arr[ROW][LINE]);        //检查某个位置是否为空void display_board(char arr[ROW][LINE]);    //打印棋盘void player_move(char arr[ROW][LINE]);      //玩家玩void computer_move(char arr[ROW][LINE]);    //电脑玩char check_win(char arr[ROW][LINE]);        //判断输赢#endif //_SANZIQI_H__

主函数部分:

#define _CRT_SECURE_NO_WARNINGS 1#include"sanziqi.h"void menu(){   printf("**********1.玩游戏**********\n");   printf("**********0.退出游戏********\n");}void game(){char ret = 0;char arr[ROW][LINE] = {0};    init_board(arr);do    {    display_board(arr);player_move(arr);ret=check_win(arr);if( ret != ' ')break;if(check_full(arr)==1)//棋盘已满{ret='q';break;}computer_move(arr);ret=check_win(arr);if( ret != ' ')break;if(check_full(arr)==1)//棋盘已满{ret='q';break;}}while(ret == ' ');display_board(arr);if(ret == 'A'){printf("玩家赢得游戏\n");}else if(ret == 'B'){printf("电脑赢得游戏\n");}else if(ret == 'q'){printf("平局\n");}}int main(){int input = 1;while(input)    {    menu();printf("请输入你的选择:");scanf("%d",&input);switch(input){case 1:  game();      break;case 0:break;default:printf("选择错误\n");break;}}system("pause");return 0;}

代码实现部分:

#define _CRT_SECURE_NO_WARNINGS 1#include"sanziqi.h"void init_board(char arr[ROW][LINE]){   int i = 0;   int j = 0;   for(i = 0; i<ROW; i++)   {      for(j = 0; j<LINE; j++)  {     arr[i][j]=' ';  }   }}int check_full(char arr[ROW][LINE]){   int i = 0;   int j = 0;   for(i = 0; i<ROW; i++)   {      for(j = 0; j<LINE; j++)  {     if(arr[i][j]==' ')//棋盘未满 return -1;  }   }   return 1;//棋盘已满}void display_board(char arr[ROW][LINE]){   int i = 0;   for(i = 0; i<ROW; i++)   {       printf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]);   if(i != 2)   {      printf("---|---|---\n");   }   }}void player_move(char arr[ROW][LINE]){int x = 0;int y = 0;while(1){   printf("请输入坐标(注意行和列的范围1到3):");   scanf("%d%d",&x,&y);   x--;   y--;   if(x>=0 && x<ROW && y>=0 && y<ROW)   {   if(arr[x][y] == ' ')   {arr[x][y] = 'A';break;   }   else   {  printf("输入的坐标已被占用,请重新输入\n");  player_move(arr);   }}}}void computer_move(char arr[ROW][LINE]){    int x = 0;int y = 0;srand((unsigned int)time(NULL));while(1){   x = rand() % ROW;   y = rand() % ROW;   if(arr[x][y] == ' ')   {arr[x][y] = 'B';break;   }   else   {      if(check_full(arr)==1)       break;   else   continue;   }}}char check_win(char arr[ROW][LINE])/*游戏中判断输赢,返回一个char类型的值*/{    int i = 0;    for(i = 0; i<ROW; i++)//行相同    {    if((arr[i][0]==arr[i][1]) && (arr[i][1]==arr[i][2]) && arr[i][0]!=' ')    return arr[i][0];    }    for(i = 0; i<LINE; i++)//列相同    {    if((arr[0][i]==arr[1][i]) && (arr[1][i]==arr[2][i]) && arr[0][i]!=' ')    return arr[0][i];    }    if((arr[0][0]==arr[1][1]) && (arr[1][1]==arr[2][2]) && arr[0][0]!=' ')//主对角线相同    {    return arr[0][0];    }    if((arr[0][2]==arr[1][1]) && (arr[1][1]==arr[2][0]) && arr[0][2]!=' ' )//副对角线相同    {    return arr[0][2];    }return ' ';//没赢}

运行结果:







要细心,要细心,要细心!!!

1 0
原创粉丝点击