🌈前言
三子棋小游戏:
1、收获快乐
:
- 学习的过程是枯燥无味的,如果在学习中寻找到乐趣,让自己爱上学习,那么你会轻而易举的收获满满,并且你会因此感到高兴与快乐,甚至你会很幸福且沉迷于学习的乐趣中去。
2、收获知识
:
- 学会如何
组织大型代码
,学习分文件编写。 - 复习数组、函数、循环…等知识。
为了让逻辑
看起来更加清晰,我们这次创建了3个文件
来编写。
- 头文件
game.h
用于存放需要用到的函数的头文件
、自定义函数的声明
和预处理信息
。 game.c
文件用于编写在game.h中自定义函数的具体定义
。test.c
文件用于测试游戏的逻辑。
游戏实现:
🏆三子棋游戏规则
在控制台上输入下棋的坐标,玩家输出“*
”在棋盘上,电脑输出“#
”在棋盘上,只要在棋盘上的列或横或对角线
上连成3个
字符组成的一条线,系统就判断为胜方
。
🎢制作步骤
【1】、编写test.c文件
1、编写main函数
- 因为我们至少要进入一次游戏,所以用
do... ...while
循环来搭建游戏框架 - 用switch语句来完成游戏选项功能,选择
1
,则调用game函数进入游戏;选择0
,则退出游戏。
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
system("cls");
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏!\n");
break;
default:
printf("输入非法,请重新选择!\n");
break;
}
} while (input);
return 0;
}
2、编写game函数
- game函数是
实现游戏运行
的函数。 - 首先调用InitBoard函数(初始化棋盘)
- 再调用DisplayBoard函数(打印棋盘)
- 之后进入while循环,分别调用PlayerMove函数(玩家下棋),ComputerMove函数(电脑下棋),Iswin函数(判断胜负)。
void game()
{
int ret = 0;
char board[ROW][COL] = {
0 };
InitBoard(board, ROW, COL);
DisplayBoard(board, ROW, COL);
while (1)
{
PlayerMove(board,ROW,COL);
system("cls");
DisplayBoard(board, ROW, COL);
ret = Iswin(board, ROW, COL);
if (ret != 'C')
{
break;
}
ComputerMove(board, ROW, COL);
system("cls");
DisplayBoard(board, ROW, COL);
ret = Iswin(board, ROW, COL);
if (ret != 'C')
{
break;
}
}
if (ret == '*')
{
system("cls");
printf("恭喜,玩家赢了!\n");
}
else if (ret == '#')
{
system("cls");
printf("很遗憾,电脑赢了!\n");
}
else if (ret == 'Q')
{
system("cls");
printf("平局!\n");
}
DisplayBoard(board, ROW, COL);
}
【2】、编写game.c文件
1、打印菜单
在进入游戏前,我们需要让玩家通过菜单来选择开始游戏或退出游戏。
菜单设置包括:
- 1.开始游戏
- 0.退出游戏
- 其他数字返回提示输入错误
void menu()
{
printf("*******************************\n");
printf("* 趣味三子棋 V1.0 *\n");
printf("*******************************\n");
printf("* >1、play *\n");
printf("* >0、exit *\n");
printf("*******************************\n");
}
2、初始化棋盘
在开始游戏前,我们需要将棋盘中的元素都设置为空格。
void InitBoard(char board[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
board[i][j] = ' ';
}
}
}
3、打印棋盘
完成棋盘初始化后,我们需要将初始化后的棋盘打印到控制台上。
棋盘的整体布局:
空格
:用空格来显示可以下棋的位置。- 分隔符
|
和- - - +
:用来对棋盘进行分割。 - 用数字标明行和列的坐标。
void DisplayBoard(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
//打印第一行的坐标
printf(" ");//打印空格是为了对齐
for (i = 1; i <= row; i++)
{
printf("%3d ", i);//一个数据行的格子占3个位置
}
printf("\n");
for (i = 0; i < row; i++)
{
printf("%2d", i + 1);//打印第一列的坐标
printf(" ");
for (