#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int Menu(int choice)
{
printf("==============================\n");
printf("1 开始游戏\n");
printf("0 退出游戏\n");
printf("==============================\n");
printf("请输入您的选择:\n");
scanf("%d", &choice);
return choice;
}
#define ROW 3
#define COL 3
char g_chess_board[ROW][COL];
void Init()
{
for (int row = 0; row < ROW; ++row)
{
for (int col = 0; col < COL; ++col)
{
g_chess_board[row][col] = ' ';
}
}
}
void Print()
{
for (int row = 0; row < ROW; ++row)
{
printf("| %c | %c | %c |\n", g_chess_board[row][0],g_chess_board[row][1],g_chess_board[row][2]);
printf("------------\n");
}
printf("\n");
}
void PlayerMove()
{
//玩家落子,检查玩家落子是否合理,如果不合理,重新输入,如果合理,检查当前位置是否已经有子,
//如果有子,请重新输入,如果没有子,就将该位置改为x
int row = 0;
int col = 0;
while (1)
{
printf("请玩家落子:(row col)\n");
scanf("%d %d", &row, &col);
if (row < 0 || row >= ROW || col < 0 || col >= COL)
{
printf("您的输入不合理,请重新输入:\n");
continue;
}
else if (g_chess_board[row][col] != ' ')
{
printf("当前位置已经有子,请重新输入\n");
continue;
}
else
{
g_chess_board[row][col] = 'x';
break;
}
}
}
void ComputerMove()
{
printf("请电脑落子:\n");
int row = 0;
int col = 0;
while (1)
{
row = rand() % ROW;
col = rand() % COL;
if (g_chess_board[row][col] == ' ')
{
g_chess_board[row][col] = 'o';
break;
}
}
}
int Isfull()
{
for (int row = 0; row < ROW; ++row)
{
for (int col = 0; col < COL; ++col)
{
if (g_chess_board[row][col] == ' ')
{
return 0;
}
}
}
return 1;
}
char CheckWinner()
{
//检查行是否一样
//检查列是否一样
//检查对角线
//检查是否下满
for (int col = 0; col < COL; ++col)
{
if (g_chess_board[0][col] == g_chess_board[1][col]
&& g_chess_board[0][col] == g_chess_board[2][col]
&& g_chess_board[0][col] != ' ')
{
return g_chess_board[0][col];
}
}
for (int row = 0; row < ROW; ++row)
{
if (g_chess_board[row][0] == g_chess_board[row][1] &&
g_chess_board[row][0] == g_chess_board[row][2] &&
g_chess_board[row][0] != ' ')
{
return g_chess_board[row][0];
}
}
if (g_chess_board[0][0] == g_chess_board[1][1] &&
g_chess_board[0][0] == g_chess_board[2][2] &&
g_chess_board[0][0] != ' ')
{
return g_chess_board[0][0];
}
if (g_chess_board[0][2] == g_chess_board[1][1] &&
g_chess_board[0][2] == g_chess_board[2][0] &&
g_chess_board[0][2] != ' ')
{
return g_chess_board[0][2];
}
if (Isfull())
{
return 'p';
}
return ' ';
}
void Game()
{
char winner = ' ';
Init();//初始化数组,用空格填充,
Print();
while (1)
{
PlayerMove();//玩家落子,
Print();
winner = CheckWinner();
if (winner != ' ')
{
break;
}
ComputerMove();
Print();
winner = CheckWinner();
if (winner != ' ')
{
break;
}
}
if (winner == 'x')
{
printf("玩家胜利\n");
}
else if (winner == 'o')
{
printf("电脑获胜\n");
}
else if (winner == 'p')
{
printf("平局\n");
}
}
int main()
{
srand((unsigned int)time(0));
int choice = 0;
while (1)
{
choice = Menu(choice);
if (choice == 1)
{
Game();
}
else if (choice == 0)
{
printf("拜拜\n");
break;
}
else
{
printf("您的输入有误,请重新输入:\n");
continue;
}
}
system("pause");
return 0;
}
简易版三子棋小游戏:
猜你喜欢
转载自blog.csdn.net/weixin_43870213/article/details/84985801
今日推荐
周排行