上海网络网站建设,新闻头条最新消息10条,西安网站搭建费用,厦门建设局叶文语简历由于代码较长#xff0c;为了增加可读性#xff0c;我们把代码分别写到game.h#xff0c;game.c#xff0c;test.c#xff0c;里面#xff0c;其中game.h用来声明函数#xff0c;实现函数功能的代码在game.c#xff0c;测试游戏的代码在test.c
为了方便后续的更改为了增加可读性我们把代码分别写到game.hgame.ctest.c里面其中game.h用来声明函数实现函数功能的代码在game.c测试游戏的代码在test.c
为了方便后续的更改代码使用了宏定义并没有把棋盘大小写死这样只要后续要是想要写五子棋甚至n子棋只需要更改宏定义的数值即可。
下面是game.h中对于所有函数的声明
下面是test.c
仍然是采用的do..while循环加上switch语句这与我们前面写过的猜数字游戏类似上来先打印一个菜单让输入1或0决定开始游戏还是退出游戏如果玩一次不过瘾还可以连续玩直到输入0退出游戏
首先程序运行起来之后不管三七二十一都先打印一个菜单供玩家选择当玩家输入1才开始游戏这时候先初始化棋盘然后把棋盘打印出来屏幕上就会呈现一个空棋盘然后玩家和电脑就可以开始下棋了由于玩家和电脑都要走很多步才能结束游戏因此显然是一个循环循环结束的条件就是有没有一方获得胜利或者平局。
先来看初始化棋盘的函数
我们所谓的棋盘其实就是一个三行三列的二维数组创建并把这个二维数组中的所有元素均初始化为空格。
再来看打印棋盘的函数
前面我们已经把二维数组的所有内容均初始化为了0如果我们直接打印其实是什么也看不到这样的棋盘对于玩家来讲是非常不友好的因此我们要打印一个更优美的棋盘比如这样的 这其实是由一些符号拼起来的一个像棋盘的图案就是先来一行三空格一竖杠再来一行三个_一个竖杠重复多次即可而且最后一行是不需要竖杠的最后一列也是不需要___|的然而这样我们发现最后一行永远都是三空格一竖杠在形状上显得略微不对称就像这样
因此我们最后又人为的打印了一行三空格一竖杠让图形看着更加对称
玩家下棋的函数 由于数组下标是从0开始的我们要想在第一行第一列下棋1应该输入坐标是0 0这显然不符合大众的理解大众并不知道数组下标是从零开始的因此我们这里让打印的是arr[x-1][y-1]要考虑到以下几种情况首先玩家因为我们的棋盘只有三行三列玩家如果输入一个坐标在第五行显然是不行的这时候我们让玩家重新输入再者就是玩家输入的坐标可能已经被占用了这时候就提示玩家坐标已被占用请重新输入如果上述两种问题均不存在则在对应的坐标位置放上一个*当然我们走完之后要紧接着调用打印棋盘的函数打印一下效果如图 电脑下棋的函数 为了方便我们就让电脑随机下棋即可电脑下棋我们通过模上row和模上col就能产生0~row-1与0~col-1有了这样的限制电脑就不会产生非法坐标了生成随机数的方式就是rand函数在调用rand函数之前要调用srand函数这是rand函数的语法srand函数用于设置时间戳且只需要在主函数中调用一次即可这里有一个设置时间戳的固定方法就是srand((unsigned)time(NULL)),希望读着能够记住这个写法。在以后需要产生随机数的时候均可以直接套用。
电脑下棋虽然不会有非法坐标但是也会出现坐标已经被占用的情况这时候我们就让电脑悄悄地再下一次即可。
接下来是判断棋盘是否已经满了的函数 这个逻辑还是非常简单的我们只要遍历一遍此时的二维数组看看是否有空格即可如果一个空格都没有当然就满了。
最后是判断玩家输赢的函数 假设玩家赢返回*电脑赢返回#没有结束返回C平局返回Q
这样写的好处就是有三点连成一线的时候直接返回其中任意一个坐标处的内容即可玩家赢说明有三个*连成了一条线我们返回其中任意一个就是*这就与我们前面让玩家赢返回*的逻辑对应上了电脑赢同理判断是否平局其实就是看看棋盘是不是已经满了利用前面的isfull函数即可。
自此所有的函数都写完了一个简易的三子棋游戏就完成了。效果如图 只要我们不输入0在一局下完之后会紧接着再打印菜单让玩家选择。