一、理清整体思路
扫雷整体与三子棋类似,也是需要两个源文件:main.c 和 game.c,一个头文件game.h。
main.c 游戏的整体框架
game.c 游戏具体功能的实现
game.h 游戏中所需函数和自定义常量的声明
首先想做成这样的扫雷
首先需要创建二维数组对雷的坐标进行保存,假设在游戏中用字符0表示无雷,字符1表示有雷。然后玩家排雷时,若是安全区,则需要用字符显示周围有几个雷,假设旁边有一个雷的话,再显示字符1并存在同一个数组,则会让雷的数量混乱,所以需要创建两个数组,一个专门放雷的信息,称作mine数组,一个专门用来显示给玩家排雷称作show数组。
然后对两个数组先进行初始化,让mine数组都为字符零,show数组都为*。
因为在排雷时会对输入的坐标周围八个坐标进行判断是否有雷;如果输入的坐标在边缘的话会存在数组越界的问题,所以创建数组时要比真实使用的数组要多两行两列,消除排雷时数组越界的可能性。
两个数组初始化完成后,就是对mine数组里面放雷,放在比创建数组要小的真实数组中,即除去第一行、最后一行、第一列、最后一列。
然后进行排雷,玩家若是碰到雷,则游戏结束;若没有,则需要在show数组中显示此坐标周围有多少雷,直到所有安全区域都探明,玩家胜利游戏结束。
二、代码实现
1、创建主程序并测试
因为游戏一上来就要进入游戏显示主界面并让玩家选择,先完成游戏主体框架
2、创建数组并初始化棋盘
用常量标识符替代字符常量,只需要在头文件game.h中更改常量,即可修改整个项目里的相关常量,使代码更有通用性。
初始化完成后还需要对棋盘进行打印,创建一个打印的函数来完成
3、在mine数组中埋雷
需要在mine真实用到的数组范围里生成地雷,用set_mine函数完成。因用到随机数生成,需要在主函数里添加时间戳。
对埋雷数量也使用了常量标识符,方便进行修改扩展。
4、玩家排雷
玩家排雷的函数涉及到两个数组,所以参数里面两个数组都需要传参。
首先,要提醒玩家输入坐标,然后对坐标进行合法性判断,不在合法范围内请玩家重新输入;
如果在mine真实使用数组的范围内,则要判断当前坐标是否已经排查过雷,排查过则请玩家重新输入;
如果没有排查过则看此坐标是否有雷,有的话玩家死亡游戏结束。
没有雷则需要将此坐标周围八个坐标里雷的数量显示在show数组对应的坐标上,然后玩家继续排雷。
过段时间还需要通过递归的方式升级排雷的逻辑,达到真实游戏中一次排一片的效果。
谢谢各位佬们围观~
代码在下方链接如有需要可以自取