说到扫雷游戏,各位应该都有玩过吧,那我们今天就来用代码实现一下简易版的扫雷!
先大概的概括一下扫雷的玩法:找到所有的雷并且避开就算胜利。那怎么去实现呢???
我们首先先捋清楚要做什么 :1. 初始化棋盘 2 . 布置雷 3 . 统计雷 4 . 排查雷 , 这就是个大概的步骤。
在初始化键盘之前我们先打印菜单,菜单就用do while 循环来打印,具体的代码如下
打印完菜单,就可以开始初始化棋盘了。初始化前我们在创建一个game.c的源文件和game.h 的头文件,让代码不至于太乱。
test.c ---负责整个游戏的逻辑运行
game.c ---负责代码中函数的实现
game.h ---负责代码中函数的声明
1.初始化棋盘
我们先打印一个最容易的 9 * 9 的棋盘,安置 10 个雷 。首先,先给一个 game()函数用来调用并实现(放在原来的case 1 分支里,给好之后来看一下怎么去初始化一个 9*9 范围的棋盘。我们现在game.h 文件里利用 #define 定义一下 行 和 列 的数量 , 定义好后一定要在test.c文件中包含game.h 头文件,不然定义好的行和列无法在其他文件中使用。
考虑到在排最边缘的雷时,无法判断周围八个格子(有没有雷)的情况,所以初始化时需要用 11 行 11 列来初始化。
在test.c文件中创建两个char 类型的数组,并且使用 initboard 函数,方便其他文件调用
在game.h文件中声明 initboard
声明好后在game.c 文件中实现棋盘的初始化
初始化好后打印出来查看是否正确。
先在test.c中定个函数,然后在game.h中给这个函数声明,最后在game.c中实现声明(以下的图片是根据这句话的顺序排序的)
最后输出的效果如下:
这时候我们发现,没有坐标,没办法输入坐标,所以得在行 和 列边上加上坐标,所以要对这个打印坐标的代码进行优化,如下:
输出结果为:
到这一步就已经初始化完成了,紧接着就是第二步布置雷了!
2.布置雷
在布雷之前,我们需要先想以下,一共10颗雷,我们要怎么让他随机放在 9 * 9 的格子里面呢?这时候我们就需要用上名为 rand 的库函数,rand 的随机数为伪随机数,如果用户未设定随机数种子时,系统默认的随机数种子为1,因此每次的随机值都是相同的,而srand 是用来设置rand产生随机数时随机数种子,所以rand 函数 需要配合srand函数才能产生真正的随机数。srand的数,用time函数值(即当前时间),这样就能保证随机性了。话不多说,上代码:
第一步,在test.c中定义一个函数,然后在刚开始那里给上一个srand
第二步,在game.h中定义雷的个数,同时声明
第三步,在game.c中实现
输出结果如下:
注:srand和rand在使用时必须包含#include <stdlib.h>的头文件
time在使用时必须包含#include<time.h>的头文件
3 . 统计雷
布置好雷以后,我们接下来要做的便是统计玩家输入的格子周围的八个方位内有几个雷,统计后在中间显示出来。
该怎么去实现这个呢?很简单,我们需要知道坐标怎么计算,然后把周围八个格子的坐标加起来减一个8,然后加上一个‘0’(因为初始化时使用的是字符0)。坐标图奉上:
代码如下:
此时已经统计好雷的个数,接下来要做的便是排查雷了
4 . 排查雷
在test.c中定义一个函数
在game.h文件中声明
在game.c中实现排查雷
1.输入坐标后,如果坐标不在棋盘范围内则重新输入
2.如果坐标相同则重新输入
3.若踩雷,则重新返回菜单重新选择
4.若全部排查完则游戏胜利
代码如下:
此时,扫雷的全部代码已经完毕,若不想打印布置好的雷的信息,在test.c文件中注释掉打印的就好
全部代码用图片全部奉上:
这就是本篇的全部内容了~~~