(第十一篇)
目录
5.2扫雷的代码实现
本次实现扫雷游戏使用三个文件:

5.2.1 game.h

(a)包含必要的头文件,以便game.c与text.c调用;
(b)宏定义常量:雷数、操作的二维数组行数列数、实际的二维数组行数列数;
(c)进行对调用函数的声明,返回值设为void表示函数只运行不反回值,同时设定传入参数的类型,对应创建的形参等;
5.2.2 game.c
(a)函数InitBoard:传入创建出的二维数组以及对应的行、列数,还有雷与空白格子的符号设定,使用嵌套for函数将设定输入到数组之中;

(b)函数DisplayBoard:传入数组及行列数。
(1)为show数组打印行号列号,方便游玩时进行定位;
(2)打印show数组,将其显示在输出面板之内;

(c)Setmine函数:传入数组,行数列数;
(1)创建变量传入雷数;
(2)先随机出雷的行号列号,判断该位置是否已经有雷,若否,将雷输出到数组之内,没输出一次使总雷数减一,直到雷数=0,循环结束,雷打印完成;
(3)由于打印雷时可能有重复,循环数一定>=雷数;


(d)GetmineCount函数:传入数组,玩家选择位置的横纵坐标;
(1)探查周围8个格功能实现,涉及知识为字符减去字符'0'得到对应数值的整型,将周围8个格上的字符相加,得到的数值即为雷的个数;
(2)返回size_t,即正数;
(3)使用static修饰,使其他文件无法调用;

(e)ExpandBoard函数:传入两个数组,行号,玩家选定的坐标,变量win的指针
(1)判定玩家选定坐标是否越界,越界返回;
(2)判定玩家选定坐标是否不为雷,若真直接返回;
(3)传入周围雷数,在该坐标显示雷数;同时win++表示探出格子加1;
(4)对于周围有雷的格子,直接返回;
(5)对于周围没雷的格子,对周围8个格子同样执行ExpandBoard函数,即函数递归,用于直接展开一部分空白区域;
(6)强制转化:将show[x][y]强制转换为char类型后再+‘0’转为整形;
如果不强制转化,则:



(f)FindMine函数:传入两个数组,行纵数;
(1)提示玩家,让玩家输入坐标;
(2)确认show中为未排查坐标,进入循环;
(3)如果遇到雷,输出失败信息并停止;
(4)没遇到,执行以上的两个功能函数;
5.2.3text.c函数



(a)打印提示信息
(b)传入存放,打印,布置,排雷等函数的参数;
(c)调用功能面板;
总结:扫雷游戏并非难点,只要多看几遍就能掌握;我这里讲的也有错漏,请仔细甄别;
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/MMaacaalloonn/article/details/166725519




