探究扫雷奥秘

今天白白要和大家分享扫雷的奥秘,让我们一起去见证自己“制作”出来的扫雷游戏吧~

设计游戏前,我们需要分析游戏的构造

1.要有菜单,让参与者选择玩游戏还是退出游戏

2.要显示出棋盘(以9*9为例)

3.布置雷的位置

4.可以排查雷,不是雷的位置可以显示出周围有几个雷

分析过后我们就开始吧!

设计菜单

在扫雷游戏开始之前,设计菜单让玩家选择玩游戏还是退出游戏,那么我们可以用函数menu来表示,当然玩家进行选择是需要输入东西的,那我们就可以设定一个整型,选择1即参与游戏,选择0即退出游戏。但是玩家不小心输错数字,那我们可以用switch来解决这个问题。

参与游戏需要进入到游戏中,我们就可以用do while,完成一次游戏后,while(input)来判断玩家是否想要继续进行游戏。代码如下

接下来我们就要进入游戏,所以游戏本身的代码全部写在game函数中

设计棋盘

我们以9 * 9为例来设计棋盘。

我们都知道扫雷的棋盘是矩形的,因此我们可以借助二维数组,用数字或者符号来表示盘面。

玩家在玩游戏的时候是看不到雷的位置的,所以可以应用两个二维数组,一个放置雷,一个展现在玩家面前。

如果一个位置不是雷的话,会统计周围雷的个数,那么我们的9 * 9棋面实际上需要11 * 11,这样玩家的9 * 9棋面上的边缘处才不会出现问题。

这时我们创建一个新的头文件来放置我们定义的数字,那么在接下来的代码中只需要输入数字的代号即可。

把main函数的头文件放在我们自己设定的头文件中,那么我们的源文件就可以直接用我们自己的头文件了(我们自己设定的头文件需要用双引号

初始化棋盘

初始化存放地雷的棋盘,全为0;初始化展示在玩家面前需要排雷的棋盘,全为* ,此时可以借助循环来实现,当然我们还需要用到字符数组。当然初始化的函数中需要包括四部分:数组名、行、列、字符

为了简洁,我们可以增加一个源文件game.c专门存放函数的声明,test.c调用函数,同时在头文件中也可说明一下

(图1:test.c;图2:game.c ;图三:game.h)

设置打印棋盘

打印的棋盘是二维数组,所以可以用for循环来实现,代码如图

(函数的调用)

(函数的声明)

代码运行结果

我们可以看到运行的结果挤在一块,玩家不能很好地输入自己需要排查的坐标。所以我们需要把数组的下标表示出来,同时加入分割线,便于玩家排查。

由于我们自定的数组为11 * 11,但是我们打印出来的是9 * 9,所以在11 * 11中去掉上下左右边缘的行和列,在9 * 9中刚好下标为1~9,便于玩家输入坐标,代码如图

布置雷

在地雷棋盘中,1为雷,0为安全位置

这时就用到了随机数,当然这些随机数(雷)的坐标仍满足1~9,所以让随机数除以9的余数是0~8 , +1为1~9,符合棋盘上标的行和列

然后就要判断生成的雷是否重复,在同一位置,那么就可以运用if循环,当生成的数组元素等于1,则表明重复,则不能进入if循环,如果数组元素为0,则可进入if循环生成雷

当然在9 * 9棋盘中有10个雷,我们可以在头文件定义雷的个数,在后来的代码中就不需要再输入10了,设置了一个雷后要减1,知道10个雷都设置完

排查雷

因为总共有10个雷,所以我们需要排查10个雷,即在9 * 9棋盘中,我们应该输入81-10=71个坐标

当我们排查雷的个数<71,那么我们仍可以排雷,同时不是雷的位置需要标出周围有几个雷

当我们排查雷的个数=71,则我们排雷成功

当排查的位置不是雷时,该位置会显示出周围8个位置有多少个雷

x-1,y-1x-1,yx-1,y+1
x,y-1x,yx,y+1
x+1,y-1x+1,yx+1,y+1

因为x,y都有+(-1),+0,+1,所以可以用for循环来统计

下面我们来看一下整体的代码吧~

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值