三子棋游戏规则:
玩家使用x,电脑使用o,在九宫格上面看谁先能连成一条线(一行/一列/对角线),若是棋盘下满并没有分出胜负,那就是和棋。
游戏开始界面:
游戏界面:
游戏结束界面:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//使用宏定义可以减少后期更改代码的时间
#define MAX_ROW 3
#define MAX_COL 3
//创建棋盘
char chess[MAX_ROW][MAX_COL];
void Init()
{
//对棋盘进行初始化,使用' '来占满棋盘
for (int row = 0; row < MAX_ROW; row++)
{
for (int col = 0; col < MAX_COL; col++)
{
chess[row][col] = ' ';
}
}
//设置随机种子
srand((unsigned int)time(0));
}
void Print()
{
//为了美观进行美化打印
for (int row = 0; row < MAX_ROW; ++row)
{
printf("| %c | %c | %c |\n",chess[row][0],chess[row][1],chess[row][2]);
if (row != MAX_ROW)
{
printf("|---|---|---|\n");
}
}
//为了调试临时加的注释
//system("pause");
}
void Player()
{
printf("玩家落子!\n");
while (1)
{
printf("请输入落子坐标(行,列):");
int row = 0;
int col = 0;
scanf("%d %d", &row, &col);
//检查输入是否合法
if (row<0 || row>MAX_ROW || col<0 || col>MAX_COL)
{
printf("输入不合理!请重新输入:\n");
continue;
}
//判断落子的地方是否已经有落子了
if (chess[row][col] != ' ')
{
printf("你落子地点已经有了落子!\n");
continue;
}
//玩家使用x来进行标记落子
chess[row][col] = 'x';
break;
}
printf("玩家落子完毕!\n");
}
char CheckWinner()
{
//检查所有行/列/斜线是否连成一条线
for (int row = 0; row < MAX_ROW; ++row)
{
if (chess[row][0] == chess[row][1]
&& chess[row][0] == chess[row][2])
{
//使用返回值表示胜利者
//x玩家赢o电脑赢
//' '表示未分出胜负
//'h'表示和棋
return chess[row][0];
}
}
for (int col = 0; col < MAX_COL; ++col)
{
if (chess[0][col] == chess[1][col]
&& chess[0][col] == chess[2][col])
{
return chess[0][col];
}
}
if (chess[0][0] == chess[1][1]
&& chess[1][1] == chess[2][2])
{
return chess[0][0];
}
if (chess[0][2] == chess[1][1]
&& chess[2][0] == chess[0][2])
{
return chess[0][2];
}
//检查所有地点是否落满为分出胜负
if (isFull())
{
return 'h';
}
//如果还未分出胜负就继续落子
return ' ';
}
//判断期盼是否被占满
int isFull()
{
for (int row = 0; row < MAX_ROW; ++row)
{
for (int col = 0; col < MAX_COL; ++col)
{
if (chess[row][col] == ' ')
{
//未满
return 0;
}
}
}
return 1;
}
void Computer()
{
printf("电脑落子!\n");
while (1)
{
//电脑随机产生坐标,来进行落子
int row = rand() % 3;
int col = rand() % 3;
//判断电脑落子是否合法
if (chess[row][col] != ' ')
{
continue;
}
//电脑使用o来占据空格
chess[row][col] = 'o';
break;
}
printf("电脑落子结束!\n");
}
void game()
{
//创建char型来接收CheckWinner的返回值,判断胜利者
char winner;
//1、初始化棋盘
Init();
while (1)
{
//2、打印棋盘
Print();
//3、玩家落子
Player();
//4、判断胜负
winner=CheckWinner();
if (winner != ' ')
{
//胜负已分
break;
}
//5、电脑落子
Computer();
//6、判断胜负
winner = CheckWinner();
if (winner != ' ')
{
//胜负已分
break;
}
}
Print();
if (winner == 'x')
{
printf("您赢了!!!!\n");
}
else if (winner == 'h')
{
printf("您和电脑和棋了!!!\n");
}
else if (winner == 'o')
{
printf("电脑赢了!!!\n");
}
}
int Menu()
{
printf("************************\n");
printf("1、开始游戏\n");
printf("2、退出游戏\n");
printf("************************\n");
int x = 0;
printf("请输入你的选择:");
scanf("%d", &x);
return x;
}
int main()
{
while (1)
{
int choice = Menu();
if (choice == 1)
{
game();
}
else if (choice == 2)
{
printf("欢迎下次再来!\n");
break;
}
else
{
printf("你的输入有误!\n");
}
}
system("pause");
return 0;
}