#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define Row 3
#define Col 3
void menu()//显示菜单
{
printf("************************\n");
printf("******1.开始游戏********\n");
printf("******0.退出程序********\n");
printf("************************\n");
printf("请选择:>");
}
void Initboard(char crr[Row][Col], int row, int col)//初始化棋盘
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
crr[i][j] = ' ';
}
}
}
void Displayboard(char crr[Row][Col], int row, int col)
{
printf("-------------------\n");
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf(" %c ",crr[i][j]);
if (j <= 1)
{
printf("|");
}
}
printf("\n");
if (i <= 1)
{
printf("---|---|---\n");
}
}
}
void player(char board[Row][Col], int row, int col)
{
unsigned int x = 0;
unsigned int y = 0;
printf("请输入落子坐标:>");
scanf("%d %d", &x, &y);
if ((x-1) < row && (y-1) < col)
{
board[x - 1][y - 1] = '#';
}
else
{
printf("输入坐标不合法,请重新输入!\n");
player(board, row, col);
}
}
int IsFull(char crr[Row][Col], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (crr[i][j] == ' ')
{
return 0;
}
}
}
return 1;
}
int IsWin(char crr[Row][Col], int row, int col)
{
//1.玩家赢了
//2.电脑赢了
// 行
for (int i = 0; i < row; i++)
{
if (crr[i][0] == '#' && crr[i][1] == '#' && crr[i][2] == '#')
{
printf("玩家赢了!\n");
return 1;
}
if (crr[i][0] == '*' && crr[i][1] == '*' && crr[i][2] == '*')
{
printf("电脑赢了!\n");
return 2;
}
}
// 列
for (int j = 0; j < col; j++)
{
if (crr[0][j] == '#' && crr[1][j] == '#' && crr[2][j] == '#')
{
printf("玩家赢了!\n");
return 1;
}
if (crr[0][j] == '*' && crr[1][j] == '*' && crr[2][j] == '*')
{
printf("电脑赢了!\n");
return 2;
}
}
// 斜着
if ((crr[0][0] == crr[1][1] && crr[1][1] == crr[2][2])||
(crr[2][0]==crr[1][1]&&crr[1][1]==crr[0][2]))
{
if (crr[1][1] == '#')
{
printf("玩家赢了!\n");
return 1;
}
if (crr[1][1] == '*')
{
printf("电脑赢了!\n");
return 2;
}
}
//3.平局
if (IsFull(crr, Row, Col) == 1)
{
return 3;
}
//4.继续游戏
return 4;
}
void computer(char crr[Row][Col], int row, int col)
{
int x = 0;
int y = 0;
while (1)
{
x = rand() % row;
y = rand() % col;
if (crr[x][y] == ' ')
{
crr[x][y] = '*';
break;
}
}
}
int game(char board[Row][Col], int row, int col)
{
int ret = 0;
Initboard(board, Row, Col);
Displayboard(board, Row, Col);
printf("游戏规则:左上方为1 1,x轴向右,y轴向下,请输入落子格式:x y\n");
while (1)
{
//玩家下棋 #
player(board, Row, Col);
Displayboard(board, Row, Col);
ret=IsWin(board, Row, Col);//判断输赢
if (ret != 4)
{
break;
}
//电脑下棋 *
computer(board, Row, Col);
Displayboard(board, Row, Col);
ret = IsWin(board, Row, Col);//判断输赢
if (ret != 4)
{
break;
}
}
return ret;
}
int main()
{
srand((unsigned int)time(NULL));
int input=0;
int output = 0;
char board[Row][Col] = { 0 };//定义棋盘
do
{
menu();//显示菜单
scanf("%d", &input);
if (input == 1)
{
output=game(board, Row, Col);
if (output == 1)
{
printf("恭喜玩家赢了!\n");
}
else if (output == 2)
{
printf("很遗憾电脑赢了!\n");
}
else if (output == 3)
{
printf("平局!\n");
}
}
} while (input);
return 0;
}