在创建扫雷游戏之前我们需要知道什么是扫雷游戏,
-
我做的扫雷游戏是一个简单的九乘九的简单版本。
-
规则是点击方格,如果是地雷,游戏失败,找到所有方格,而不踩到地雷游戏胜利。
首先创建两个源文件,一个头文件
text.c————用来表示游戏的测试逻辑
game.c和game.h————用来表示游戏逻辑的实现
我们要做的是一个可以选择,是否进行扫雷游戏的菜单,如果选择一就进行扫雷游戏就停止戏。
游戏菜单如下 ,选择1游戏开始,如果选择0.就停止游戏
一、棋盘的初始化和打印 然后开始游戏的构建,先创建一个九乘九的二维数组棋盘,如果有雷的时候我们就存放字符一如果没雷的话就存放字符零 ,但是 这样会遇到一个问题是九乘九的棋盘是否方便扫雷,每当我们选择排雷的时候,会在周围判断雷的多少,这时候就会出现数组越界的发生所以为了避免这种情况的发生我们应该定义一个11*11的棋盘首先先用宏定义行和列。
使用宏定义棋盘的好处:使用宏定义的行和列可以更好的调整棋盘,如果直接定义棋盘的行和列的话,那么所有的行列都要修改,如果用宏定义只用,修改一处,更加简便修改棋盘。
然后开始初始化棋盘一个全部初始化为字符0,一个全部初始化为字符*号,先利用数组传参
先在game.h中声明函数如图所示,这里的char set穿的是字符“*”,和“0”。
然后再game. c中初始化代码如下。
然后再利用DisplayBoard函数打印棋盘,同样在game.h中声明,在game.c中使用
代码如图所示
最后打印的两个棋盘如下图所示
二、雷的创建
这时候就来到的关键步骤,如何在棋盘上生成10个雷,首先在利用宏定义雷的个数,方便以后的更改。
然后利用SetMine函数将Mine数组传参在game.h中声明函数
在game.c中实现布置雷,需要在行和列1-9之间布置雷,我们需要用到rand,因为rand生成的随机数%9在0-8之间所以要在后面+1
在棋盘不能出现同一个位置而出现两颗雷的情况,因为我所做的棋盘字符0表示没有雷,而字符1表示有雷,用count表示布置雷的个数,每布置一个雷的时候,count就减减,直到雷为零的时候,循环就自动停止了,具体代码如下·
这时候雷就埋好了不妨打印出来看看效果图如下
三、游戏过程
然后就是该如何排查雷了,先调用函数FindMine,先在game.h,中声明,形式如下。
然后开始排查坐标,输入一个坐标,棋盘实际是一个11*11,的但是雷的放置地点只有9*9,所以要设定范围,判断坐标的有效性,条件如下
然后我们要进行排查雷,当我们输入一个坐标时像要排查周围的雷一共要排查周围的八个,那么该如何计算出周围的雷呢我自己写了一个方法以图的形式,如下图
用代码表示出来就是
还有一种方法是利用循环
还不能重复排同一个雷
再设置一个win变量,判断排查是否完成当win==row * col - EASY_COUNT是证明排雷成功
整体代码如下
在此扫雷游戏就基本完成了。
--------------------------------------------------------
如果想看完整代码可以看这里 https://gitee.com/ChangUng/text-12-20
最后感谢你们的阅读,请各位公主王子点点赞。