♛ 扫雷的基本原理说明
使⽤控制台实现经典的扫雷游戏
游戏可以通过菜单实现继续玩或者退出游戏
扫雷的棋盘是9*9的格⼦
默认随机布置10个雷
可以排查雷
如果位置不是雷,就显⽰周围有⼏个雷
如果位置是雷,就炸死游戏结束
把除10个雷之外的所有雷都找出来,排雷成 功,游戏结束
1 首先设置游戏开始界面,如图所示:
2 设置一个选择界面
让用户选择,如果用户输入1,则开始游戏,输入0则退出游戏,输入其他,则显示输入错误,请重新选择
可以用do...while循环语句和switch选择语句实现
我们可以用一个menu( )函数,将开始界面装起来
如图所示:
3 进入游戏后
3.1 如果选择1,则进入游戏,可以用一个game( )来实现,由于game函数里面内容太多,所以在game里面使用自定义函数来分装,由此我们可以新建一个add.h头文件和add.c文件来声明和定义这些函数
为了方便更改变量数值,则可以在add.h中进行宏定义,使用时引头文件#include "add.h"
3.2 如图所示,扫雷游戏里面一般在ROW行COL列棋盘里查找雷和布置雷,可以用数组来实现,由于用1表示雷,0表示非雷,在计算周围有几个雷的时候,如果有一个雷,显示为1,会与雷(1)产生冲突,所以我们就用两个数组来实现查找和布置雷由于查找边界位置雷,会出现越界情况,所以需要多加两行两列。
3.3 对棋盘就行初始化
声明,定义一个函数Initboard( )进行初始化,雷未布置前,mine数组最开始全是‘0’
向用户展示的页面全被遮挡,所以show数组最开始全为‘*’
3.4 打印棋盘
我们可以将两个棋盘都打印出来看看是否正确,在这里可以自定义一个printboard( )函数,最后向用户展示的为遮挡界面。
3.5布置雷
自定义一个函数SetMine( ),把雷随机放入,需要引用库函数rand( )将雷随机放入ROW行COL列的棋盘里。要产生1---ROW的随机数,所以rand( )%row+1;要产生1---COL的随机数,所以
rand( )%col+1,如果arr[row][col]里为0,就可以布置雷,布置EASY_COUNT个为止
✔✔✔✔✔✔✔
3.5.1 rand函数⽣成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。之所以每次运⾏程序产⽣的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1,如果要⽣成不同的随机数,就要让种⼦是变化的。引用头文件 include <stdlib.h>
3.5.2 srand
C语⾔中⼜提供了⼀个函数叫 srand,⽤来初始化随机数的⽣成器.
程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。那也就是说给srand的种⼦是如果是随机的,rand就能⽣成随机数;在⽣成随机数的时候⼜需要⼀个随机数,这就⽭盾了
3.5.3 time
在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的,因为时间时刻在发⽣变化的。在C语⾔中有⼀个函数叫 time ,就可以获得这个时间。引用头文件# include <time.h>
✔✔✔✔✔✔✔
3.6 排查雷
使用自定义函数FindMine( )在棋盘里面排查雷,输入的坐标在规定范围内,超过就是非法坐标,当排查的次数小于等于ROW*COL - EASY_COUNT,排雷成功,否则就被炸死了,并显示雷的排布。
如果选择的该位置没有雷,则需要输出周围雷的总数。
最终代码为: