1. 前言
三字棋是我们小学初中经常玩的一种小游戏,现在提起三子棋,它代表的不仅仅只是一种游戏,代表的也是我,我们回不去的无忧无虑的美好时光。让自己情窦初开女孩,还记得她的面庞吗?还记得自己当年青涩的模样吗?
今天我们通过C语言来实现一个能够勾起我们美好回忆的小游戏。具体规则如下图所示。
2. 具体分析
由于三子棋的实现对于初学者来说也是一个不小的挑战,相对于平时的训练来说,的确工作量不小,因此为了程序的简洁明了。在这里我们将采用模块化编程的方式来实现三子棋。在主程序的test.c的基础上增加一个game.c 和 game.h文件。
game.c的主要作用是游戏功能的具体实现。
game.h的主要作用是声明函数
3. 代码实现
3.1 主函数的实现
当我们进行游戏时应当先跳出游戏菜单,因此我们需要制作一个简易的游戏菜单。
void menu()
{
printf("**************************\n");
printf("******** 1.Play ********\n");
printf("******** 0.exit ********\n");
printf("**************************\n");
}
我们主要用do while来实现主函数的循环,并用switch函数来选择是需要进行游戏还是退出游戏实现如下所示。
int main()
{
int input = 0;
do
{
menu();
printf("请输入->");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("输入数据非法请重新输入");
break;
}
} while (input);
return 0;
}
3.2 游戏函数的实现
我们三子棋游戏的实现重要分为几个重要部分1. 打印棋盘。2. 玩家下棋。3.电脑下棋。4.判断是否游戏结束。
3.2.1 打印棋盘函数
我们棋盘是一个3*3的棋盘,因此我们考虑用一个三行三列的二维数组来充当棋盘。
char Board[ROW][COL]
在game.h中定义ROW 和 COL
#define ROW 3
#define COL 3
创建好数组后进行棋盘的初始化。在game.c中编写初始化程序并在game.h中声明。
函数声明
void InitBoard(char Board[ROW][COL], int row, int col);
函数实现
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.2.2 打印棋盘
我们期望中的棋盘是长成这样子。观察棋盘我们初步的思路就是通过两个 for循环来进行打印,先打印出行,再打印列。
我们可以这样考虑拿第一行的棋盘举例就是第一行先打印 _*_ 其中_代表空格,然后紧接着输出一个 | 然后输出三个这样的第一行,之后换行先打印---然后再打印 |。如下图所示
这样打印我们会发现棋盘第一行会多出现两个空格。我们可以通过一个if语句来取消掉这个多出来的 |,这样就可以完成每一行的打印了。具体实现如下所示。
void DispalyBoard(char Board[ROW][COL], int ro