第一步
先设置好游戏的菜单,菜单比较简单设置我就只放图片了
第二张图的头文件是我自己定义的,里面可以放了其他函数的声明以及编译所需要的库函数,该头文件图如下
第二步
设置两个数组同时在头文件中设置扫雷游戏的行和列,注意我们应该在原有的的行和列上多加入两行和两列,比如设置为9*9的范围,那它的行数应为11*11,因为这样更有利于我们后续统计雷的个数。数组mine是用于埋雷的,数组show是用于玩家看的。设置完后我们就可以进行初始化了,’*‘用于初始化玩家看的,’0‘用于埋雷时方便自己看见。
初始化函数如下
第三步
初始化好后我们就可以埋雷了,该函数图如下
我们将用于埋雷的数组传过来,然后开始进行埋雷。同时这里也运用了生成随机数的函数rand,但单靠这一个函数是不行的,因为他是根据种子来生成随机数的 ,而它的种子在目前是不变的,所以我们要用srand函数去改变种子,至于怎么改变目前只需要会使用时间戳就OK了,使用前我们要在“456456.h”的头文件中加入头文件<time.h>和<stdlib.h>,又因为time的返回值类型不匹配,所以我们要将它强制类型转化为unsigned int类型。
会设置随机数后我们就可以考虑埋几个雷了,我本人设计的是easy模式所以只有十个雷,设置好后我们用我们的数学方法去生成1~9之间的数,所以我们用rand函数生成的数%上9会生成0~8之间的数,之后我们再加一就OK了,这里我是用字符‘1’代表雷。埋好之后我们可以将它打印出来
运行的结果大致是这样子(最上面的数字和最左边的数字是便于玩家去输入坐标来排雷)
第四步
既然雷都埋好了这不开始排雷,所以接下来我们设置排雷的函数,如下
我们将两个数组传过来,设置两个坐标用于玩家输入,当输入的坐标是雷时游戏结束,同时将埋雷的样子展示出来,当玩家输入的坐标不是雷的时候我们就要开始统计这个位置周围一圈雷的个数,这就是为什么要将范围设置成11*11,,这样不会造成数组越界访问,同时也简化了工作量。当然玩家不可能只排一次雷所以我们要套上一层循环。
将玩家输入的坐标和埋雷的数组传过去统计雷的个数,雷是字符1,统计时我们可以减去8*‘0’,这里‘0’的ascll码值是48,‘1’的ascll码值是49,所以周围一圈雷相加后减去8个‘0’就可以得到雷的个数,然后再返回回去。
返回去之后我们再加个‘0’就可以转变为字符类型同时个数也不影响,比如返回的是2,2+‘0’(‘0‘的ascll值是48)等于50,而五十刚好是字符’2‘的ascll值,之后的数也可以自行验证。然后将值赋给玩家输入的坐标,接着打印出来。
第五步
设计游戏输赢的判定以及重复输入对游戏的影响。我们可以设计一个变量来判断输赢,当玩家把所有雷都排出来后即判定为win,所以我们要在玩家排的坐标不是雷的时候对这个变量进行自增操作,但也不是无限下去, 所以我们要将循环的条件改为小于9*9-雷的个数。最后用if语句判断玩家输入的坐标是不是’*‘,防止玩家重复输入,这样游戏就做好了。