#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<time.h>
#define row 3
#define col 3
void printf_chess(char arr[row][col]) //打印每次操作后的状态
{
int i = 0, j = 0;
for (i = 0; i<row; i++)
{
for (j = 0; j<col; j++)
{
printf("%c ", arr[i][j]);//打印操作后的棋盘
}
printf("\n");
}
}
void menu()//打印菜单
{
printf("##############1.开始游戏##############\n");
printf("##############0.退出游戏##############\n");
}
int check(char arr[row][col])//检查游戏结果
{
int j = 0;
int i = 0;
int count = 0;
for (i = 0; i < 3; i++)
{
if ((((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][1] == 'o')) ||
(((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[1][i] == 'o')) ||
(((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] == 'o')) ||
(((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] == 'o')))
{
printf("电脑赢\n");
}
if ((((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][1] == 'x')) ||
(((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[1][i] == 'x')) ||
(((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] == 'x')) ||
(((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] == 'x')))
{
printf(" 玩家赢\n");
}
for (j = 0; j < 3; j++)
{
if (arr[i][j] != '_')
{
count++;
}
}
}
if (count == 9)
{
printf("和棋!");
}
}
void fill(char arr[row][col])//填充,对棋盘进行符号操作
{
int x = 0, y = 0;
int ran1 = 0, ran2 = 0;
srand((unsigned)time(NULL));//随机数发生器
while (1)
{
x = 0, y = 0; //玩家玩,初始坐标为0 0
printf("请输入你的坐标:");
scanf("%d%d", &x, &y);
if (x>row || x<1 || y>col || y<1)
{
printf("坐标有误,请重新输入!\n");
continue;
}
if (arr[x - 1][y - 1] == '_')
{
arr[x - 1][y - 1] = 'x';
check(arr, row, col); //检查是否获胜
}
else
{
printf("已被填充,请重新填充!\n");
continue;
}
while ((arr[ran1 - 1][ran2 - 1] != '_'))
{
ran1 = rand() % 3 + 1;
ran2 = rand() % 3 + 1;
}
arr[ran1 - 1][ran2 - 1] = 'o'; //电脑走
check(arr,row,col);//检查是否获胜
printf_chess(arr, row, col); //双方操作完一次后打印出结果
}
}
void init(char arr[row][col])//棋盘建立
{
int i = 0, j = 0;
char line[row][col] = { "___", "___", "___" }; //创建一个数组
for (i = 0; i<row; i++)
{
for (j = 0; j<col; j++)
{
arr[i][j] = line[i][j];
printf("%c ", arr[i][j]);//棋盘初形建立
}
printf("\n");
}
}
void game(char arr[row][col])
{
init(arr, row, col);//建立棋盘
fill(arr, row, col);//填充棋盘
}
int main()
{
char arr[row][col] = { "___", "___", "___" };
int input = 1;
while (input)
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game(arr,row,col);
break;
case 0:
return 0;
break;
default:
printf("输入错误\n");
break;
}
}
return 0;
}