打印菜单
void meau()
{
printf("************************\n");
printf("******1.开始游戏********\n");
printf("******0.退出游戏********\n");
printf("************************\n");
}
打印棋盘:
void PrintBoard(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (j < col - 1)
printf(" %c|", board[i][j]);
else
printf("%c", board[i][j]);
}
printf("\n");
if (i < row-1)
{
printf("--|--|--\n");
}
}
}
玩家走:
void PlayerMove(char board[ROW][COL], int row, int col)
{
int a = 0;
int b = 0;
printf("玩家走\n");
while (1)
{
scanf("%d%d", &a, &b);
if (board[a - 1][b - 1] == ' '&&a>0&&a<4&&b>0&&b<4)
{
board[a - 1][b - 1] = 'X';
PrintBoard(board, ROW, COL);
break;
}
else
printf("输入坐标有误\n");
}
}
电脑走:
void CompuertMove(char board[ROW][COL], int row, int col)
{
int a = 0;
int b = 0;
srand((unsigned)time(NULL));
printf("电脑走\n");
while (1)
{
a = rand() % 3;
b = rand() % 3;
if (board[a][b] == ' ')
{
board[a][b] = 'O';
PrintBoard(board, row, col);
break;
}
}
}
输赢判断:
char IsWin(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
int count = 0;
for (i = 0; i < row; i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2])
return board[i][1];
}
for (j = 0; j < col; j++)
{
if (board[0][j] == board[1][j] && board[1][j] == board[2][j])
return board[1][j];
}
if (board[0][0] == board[1][1] && board[1][1]==board[2][2])
{
return board[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0])
{
return board[1][1];
}
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (board[i][j] != ' ')
count++;
}
}
if (count == 9)
{
return 'P';
}
return '1';
}
game函数调用:
void game()
{
int i = 0;
int j = 0;
char ret = 0;
char board[ROW][COL] = { 0 };
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
board[i][j] = ' ';
}
}
//打印棋盘
PrintBoard(board, ROW, COL);
//比拼
while (1)
{
PlayerMove(board, ROW, COL);
ret = IsWin(board, ROW, COL);
if (ret == 'X')
{
printf("玩家赢!\n");
break;
}
else if (ret == 'O')
{
printf("电脑赢\n");
break;
}
else if (ret == 'P')
{
printf("平局\n");
break;
}
CompuertMove(board, ROW, COL);
ret = IsWin(board, ROW, COL);
if (ret == 'X')
{
printf("玩家赢!\n");
break;
}
else if (ret == 'O')
{
printf("电脑赢\n");
break;
}
else if (ret == 'P')
{
printf("平局\n");
break;
}
}
}
当 输赢判断 函数返回值为‘X’时 ,结果为玩家赢,返回值为‘O’时,结果为电脑赢,返回值为‘P’时,结果为平局。
主函数调用:
int main()
{
int n = 1;
while (n)
{
n = 0;
meau();
printf("请选择-> \n");
scanf("%d", &n);
switch (n)
{
case 0:
printf("退出成功\n");
break;
case 1:
game();
break;
default:
printf("输入错误 请重新输入:\n");
break;
}
}
system("pause");
return 0;
}
通过玩家选择 开始或退出游戏
玩家通过选择坐标进行游戏