文章目录
游戏介绍
游戏整体框架
游戏具体功能及实现
1、雷盘的定义
2、雷盘的初始化
3、布置雷
4、排查雷
5、获取周围雷的个数
6、打印雷盘
游戏完整代码
1、test.c
2、game.h
3、game.c
游戏介绍
以基出版扫雷游戏为介绍:它是以9*9方格随机放置10个地雷,后面一步一步排除雷。
游戏整体框架
test.c:游戏逻辑的测试。
game.c:游戏功能的具体实现,这部分是整个游戏的核心代码。
game.h:相关头文件的包含、符号的声明以及函数的声明。
1、雷盘的定义
扫雷的过程中,布置的雷和排查出的雷的信息都需要存储。应分别初始化两个棋盘,一个布置雷的信息,一个排查出的雷的信息给我们看。
布置雷
那如果这个位置布置雷,我们就存放1,没有布置雷就存放0
0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
统计周围雷的个数时,最上⾯的三个坐标就会越界,为了防⽌越界,我们在设计的时候,给数组扩⼤⼀圈,雷还是布置在中间的9*9的坐 标上,周围⼀圈不去布置雷就行,这样就解决了越界的问题。所以我们将存放数据的数组创建成11*11 是⽐较合适.如下图所示
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
我们专⻔给⼀个棋盘(对应⼀个数组mine)存放布置好的雷的信息,再 给另外⼀个棋盘(对应另外⼀个数组show)存放排查出的雷的信息。这样就互不⼲扰了,把雷布置到 mine数组,在mine数组中排查雷,排查出的数据存放在show数组,并且打印show数组的信息给后期 排查参考。 同为了保持神秘,show数组开始时初始化为字符 '*',为了保持两个数组的类型⼀致,可以使⽤同⼀ 套函数处理,mine数组最开始也初始化为字符'0',布置雷改成'1'。如下如:


2、雷盘的初始化
要把mine和show初始化。


3、布置雷
对于布置雷我们有两个需要注意的地方:
第一是用于随机生成坐标的rand函数的种子srand函数只需要在main函数中声明一次即可。
第二是我们在布置雷的时候需要检查该位置是否已经有雷,避免重复布置。

4、排查雷
5、获取周围雷的个数
6、打印雷盘游戏完整代码
1、test.c
2.game.h
3.game.