大家好,今天博主来介绍扫雷小游戏的设计思路以及实现,会很细致的呦,喜欢的话还请给个三连吧!
目录
设计思路
一,基础框架
还是那句话,不论什么游戏,都需要游戏最基础的部分——选择是否进入游戏,游戏的内容,玩完了之后选择是否退出游戏。并且此次依然需要三个文件:game.h game.c test.c进行模块化编程
分析:由于玩家很有可能玩过一局之后还想再玩一局,所以此时需要一个循环结构来提问玩家是否还要再玩一局,而玩家要通过选择来决定,所以需要一个判断结构。
于是,代码如下。(一些需要使用的头文件已经放在game.h中)
运行结果没有问题,进行下一步。
二,基础框架的填充和完善
1.众所周知,扫雷首先需要一个棋盘,那么就需要一个二维数组来表示。
2.进入游戏前,电脑要对二维数组中的随机元素进行埋雷操作。
3.进入游戏后,玩家需要看到雷区以及一些提示内容,所以需要能够展示和打印雷区的函数。
4.玩家需要通过输入坐标来进行排雷,所以需要一个提示玩家输入坐标的函数。
5.游戏的结局可能是失败或者成功,所以需要一个判断输赢的函数。
6.每次游戏结束后,都需要对雷区进行重新排布,让游戏充满随机性,所以需要一个初始化函数。
到这里,大体上没有问题,但是扫雷游戏中最初出现在我们眼前的画面是这样的。
对的,是不会让玩家看到地雷的。但是我们如果打印了二维数组,岂不是就会把信息暴露吗?那游戏就没有可玩性了。该如何解决这个问题呢?
我们只需要再创建一个二维数组就好,一个仅仅用于埋雷,另一个用于和玩家来交互即可。
又因为,在调查棋盘边缘地雷信息时,很有可能发生数组越界,所以需要扩大数组为ROWS,COLS。
并且由于打印雷区信息,玩家进行排雷操作和判断输赢 这几个函数会进行好几个回合(应该没人会一上来就点到炸弹吧,⊙﹏⊙汗),所以要用一个循环结构封装起来。
于是,代码如下。
代码实现
终于到了最激动人心的时刻
一,初始化函数
我打算将埋雷数组初始化为全‘0’,当然是字符‘0’。
将展示埋雷信息的数组初始化为全‘ * ’。
这很简单,只需要一个嵌套循环。
这个函数不需要返回值,参数分别是数组的首个元素的地址,行数,列数。
我们当然可以写两个函数,每个函数各自初始化不同的数组为“0”和“*”。
但是有点麻烦,不如再设置一个参数,然后由我们自己来传参决定要初始化为“0”或者是“*”。
于是,代码如下。
二,埋雷函数
显然,此函数不需要返回值,它的参数应该是数组地址,行数和列数,但是要注意,此处的行数和列数是并不是数组扩展之后的,而是扩展之前的。
不可以在已经埋雷的地方再次埋雷,并且一定要埋好一定个数的地雷。至于随机数的问题,可以去我三子棋那篇文章,这里不再赘述。
上代码
三,展示雷区的函数
显然不需要返回值,参数为show数组的地址,行数和列数。
函数内部:需要将行号和列号打印出来作为玩家进行排雷操作的辅助
上代码
四,提醒玩家输入坐标并且判断输赢的函数
此函数不需要返回值,参数为bomb数组的地址,行数和列数。
函数内部:在玩家输入坐标后,需要进行判断是否合法。输入坐标的条件是 1.在棋盘范围內部
2,不可以在已经排查过得区域再次排查。
上代码
好的,以上便是全部讲解,谢谢大家,给个三连呗