提示:在前面章节,小编引领大家完成了扫雷游戏,接下来和大家在一起玩成一个三子棋游戏加深理解
前言
在三子棋游戏中大概有两百多行代码,如果大家都放在一个文件中肯定显得很复杂要是游戏中出现bug我们还得逐行去寻找,因此我们需要创建三个文件来分模块实现不同的作用功能,方便后续修改bug直接去他要实现的功能中直接去查找和修改:
文件 | 功能 |
---|---|
main.c | 测试游戏的逻辑 |
game.c | 游戏代码的实现 |
game.h | 游戏代码的声明 (函数声明,符号定义) |
提示:以下是本篇文章正文内容,下面案例可供参考
一、创建菜单,实现游戏逻辑运行
一个好的游戏,菜单肯定少不了。菜单才是供玩家们选择是否要玩的路径
在这里我们创建一个菜单函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void menu()
{
printf("********************\n");
printf("***** 1,play *****\n");
printf("***** 0,exit *****\n");
printf("********************\n");
}
int main()
{
menu();
return 0;
}
俗话说:要想骡子跑,首先得喂草。要想游戏跑,循环少不了。要实现完整的游戏实现,我们得让游戏跑起来,输入1我们得进入游戏,输入0我们得退出游戏,输入其他的不是菜单上的数我们得提示玩家输入错误,输入错误我们是不是得重新打印菜单出来,来供玩家选择正确的,这就是一个完整的循环实现,但是我们在选择的时候首先需要一份菜单,所以采用do while语句先打印菜单。而我们选择选项时则需要选择语句来执行,switch就是一个不错的选择。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void menu()
{
printf("********************\n");
printf("***** 1,play *****\n");
printf("***** 0,exit *****\n");
printf("********************\n");
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d",&input);
switch (input)
{
case 1:
printf("开始游戏\n");
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("你输入的选择有误,请重新输入\n");
break;
}
} while (input);
return 0;
}
提示在这里运行以下代码实现以下循环的功能,做游戏不就是做一点检查一点,不能等到后面bug越来越多,这样你也没有写下去的欲望,改起来也很麻烦
二、创建棋盘
选择1开始游戏后我们是不是需要在选择1的地方创建一个game函数来实现游戏逻辑。在这里小编打开之前的游戏代码运行起来给大家看一下:
分析 |
在这里玩家下棋和电脑下棋,都在棋盘上显示着,而且不会随着下一次下棋而失去,所以玩家下棋我们要有一个棋盘将他保存下来,看到图中这里有九个空格每次都在空格内下棋,在这里我们就需要定义一个9*9的棋盘来装棋子。棋子里面填入啥呢,既然有空格字符,我们肯定就定义一个字符数组。
void game()
{
//定义一个9 9棋盘
char board[3][3] = {0};
}
在这里我们就需要讲解一个好东西,假如我们下棋的时候感觉棋盘太小或者太大我们是不是得一直修改,而我们之前前言就讲述了我们创建三个文件来实现三子棋游戏的不同功能,这里改一下那里改一下是不是很麻烦。这样我们可以简单定义一个define定义的标识符常量表示棋盘的长和宽,那标识符常量放在game头文件中,前言也说了game头文件用于文件声明和符号定义。
而我们想在其他文件中使用得加上相应的头文件才行
在这里我们后面觉得棋盘不够大的时候只需要到game头文件中进行修改就可以修改所有文件中棋盘的行和列了!!!
三,初始化棋盘
接下来我们再看,当我们不下棋的时候,我们总不能什么都不放,不放就相当于棋盘少了一点空间显示出来(如下图),想象以下我们在日常下棋的时候我们在不下棋的地方那地方不给他显示,只有你下到了那个地方才会显现,这样肯定不行的,所以不用下棋的地方我们直接给他空格让玩家可以看到那块地方.
分析 |
在这里显然可以看到这里没有下棋的地方我们什么都没有给他填入进去,导致那部分缺进去什么都没显示,导致棋盘都扭曲了。所以在这里我们得初始化棋盘给他不下的棋盘都用空格显示出来,我们刚进入游戏自然是什么都不显示,所以都用空格显示,我们在这里定义一个初始化棋盘函数Initboard(),实现在game游戏里的功能我们在game源文件中定义,在game头文件声明。既然是初始化棋盘我们得把棋盘传进去,把列和行传进去然后初始化每行每列。以下是不同文件中的代码。
四,打印棋盘
对棋盘初始化之后我们得打印出来给玩家看让玩家看看在哪下棋对吧,让我们看看网上的棋盘
在我们这里我们可以看到棋盘行与列之间我们都有分割线,列与列之间也有分割线。再回到我们实现自己游戏中的棋盘,如下图:
分析 |
在我们实现的棋盘中,我们用三个下划线分割行于列,列与列之间用直线分割。也就是第一行我们打印空格,字符空格,空格,一条直线,最后一列不显示直线。然后第二行我们打印分割线三个下划线,然后一条直线,最后一列不显示直线。分割线在第三行的时候不显示。接下来上代码: