目录
项目的创建:
(1)菜单的实现:
(2)game函数的实现:
1.棋盘的打印:
2.玩家下棋:
3.电脑下棋
4.判断胜负:
项目的创建:
test.c:用于代码的测试;
game.h:用于宏定义,头文件,和函数声明;
game.c:用于函数功能的实现;
(1)菜单的实现:
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
printf("***************************************n");
printf("*********1.PLAY 0.EXIT *********n");
printf("***************************************n");
printf("***************************************n");
}
int main()
{
int input = 0;
do
{
menu();
srand((unsigned int)time(NULL));
printf("请选择:>");
scanf_s("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("游戏退出!");
break;
default:
printf("输入错误,请重新输入!");
break;
}
} while (input);
return 0;
}
使用do - while 和 switch语句实现一个简单的菜单显示;
效果如下:
(2)game函数的实现:
1.棋盘的打印:
代码:
//打印棋盘
void display(char arr[ROW][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf(" %c ", arr[i][j]);
if (j < col - 1)
printf("|");
}
printf("n");
if (i < row - 1)
{
for (int j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
printf("|");
}
printf("n");
}
}
}
运行效果:
2.玩家下棋:
代码:
首先判定x y的合法性,和坐标是否有被落子,如果均符合要求 ,玩家就落子,否则重新输入坐标。
//玩家下棋
void player(char arr[ROW][COL])
{
int x = 0, y = 0;
while (1)
{
printf("输入坐标:>");
scanf_s("%d %d", &x, &y);
if (x <= ROW && y <= COL && x > 0 && y > 0 && arr[x - 1][y - 1] == ' ')
{
arr[x - 1][y - 1] = '*';
break;
}
else
{
printf("输入错误,请重新输入:n");
}
}
}
运行效果:
3.电脑下棋
代码:
使用随机数生成函数生成电脑的即将要落子的坐标;
//电脑下棋
void computer(char arr[ROW][COL])
{
while (1)
{
int x = rand() % 3;
int y = rand() % 3;
if (arr[x][y] == ' ' && arr[x][y] != '*')
{
arr[x][y] = '#';
break;
}
}
}
运行效果:
4.判断胜负:
代码:
其中要对每一行,每一列,斜线进行判断,是玩家赢还是电脑赢,如果棋子落满都没有分出胜负就判断为平局;
//判断输赢
int dgame(char arr[ROW][COL])//和局
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}
int judge(char arr[ROW][COL])
{
//判断行
for (int i = 0; i < ROW; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] == '*')
{
printf("玩家赢!n");
return 1;
break;
}
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] == '#')
{
printf("电脑赢!n");
return 1;
break;
}
}
//判断列
for (int i = 0; i < COL; i++)
{
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] == '*')
{
printf("玩家赢!n");
return 1;
break;
}
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] == '#')
{
printf("电脑赢!n");
return 1;
break;
}
}
//判断斜线
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])
{
if (arr[1][1] == '#')
{
printf("电脑赢!n");
return 1;
}
else if (arr[1][1] == '*')
{
printf("玩家赢!n");
return 1;
}
}
else if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0])
{
if (arr[1][1] == '#')
{
printf("电脑赢!n");
return 1;
}
else if (arr[1][1] == '*')
{
printf("玩家赢!n");
return 1;
}
}
else if (1 == dgame(arr))
{
printf("和局 n");
return 1;
}
return 0;
}
运行效果:
电脑赢:
玩家赢:
以上就是三子棋的基本实现了,如果帮到你请你带那个赞吧



