目录
1.扫雷游戏分析和设计
2.扫雷游戏的代码实现
3.扫雷游戏的扩展
正文:
1. 扫雷游戏分析和设计
1.1 扫雷游戏的功能说明
• 使⽤控制台实现经典的扫雷游戏
• 游戏可以通过菜单实现继续玩或者退出游戏
• 扫雷的棋盘是9*9的格⼦
• 默认随机布置10个雷
• 可以排查雷
◦ 如果位置不是雷,就显⽰周围有⼏个雷
◦ 如果位置是雷,就炸死游戏结束
◦ 把除10个雷之外的所有雷都找出来,排雷成功,游戏结束
游戏的界⾯:
2.游戏的分析和设计
2.1.数据结构的分析
扫雷过程中,布置的雷和排查的雷的信息都要储存,所以需要通过一定的数据结构来存储信息。
因为我们需要在9*9的棋盘上布置雷的信息,我们首先想到是创建一个9*9的数组来存储信息。
有雷就存放1,没有布置雷就存放0.
为了解决越界的问题,我们可以给数组扩大一圈,因此我们的数组就创建成了11*11的棋盘。
棋盘上雷的信息(1)和非雷的信息(0),假如我们排查了某个位置后,这个位置处不是雷,这个坐标的周围有一个雷,那我们需要将排查出的雷的信息数量记录,并打印出来,作为排雷的重要参考信息的。那这个雷的信息存放在哪里?如果存放在布置雷的数组中,这样雷的信息和雷的个数信息就可能或产生混淆和打印上的困难。
这里的解决方案,比如:雷和非雷的信息不要使用数字,使用某些字符就行,这样就避免冲突了,但是这样做棋盘上有雷和非雷的信息,还有排查出的雷的个数的信息,比较混杂,不够方便。
这里我们采用另外一种方案,专门给棋盘(对应一个数组mine)存放布置的雷的信息,再给另外一个棋盘(对应另外一个数组show)存放排查出的雷的信息。这样就互不干扰了,把雷布置到mine数组中,在mine数组中排查雷,排查出的数据存放在show数组,并且打印show数组的信息给后期排查做参考。
同时为了神秘,show数组开始时初始化为字符‘*’,为了保持两个数组的类型一致,可以使用同一套函数处理,mine数组最开始也初始化为字符‘0’,布置雷为‘1’。如下:
对应的数组应该是:
1.2.2.文件结构设计
这里设计三个文件:
1 test.c
2.game.c
3.game.h
2.扫雷游戏的代码实现
game.h
game.c
test.c
3.扫雷游戏的扩展
• 是否可以选择游戏难度
◦ 简单 9*9 棋盘,10个雷
◦ 中等 16*16棋盘,40个雷
◦ 困难 30*16棋盘,99个雷
• 如果排查位置不是雷,周围也没有雷,可以展开周围的⼀⽚
• 是否可以标记雷
• 是否可以加上排雷的时间显⽰