二维数组的应用之====》扫雷游戏(精简版)详解

发布时间:2024-08-26 14:01

前言:Hello!我是@每天都要敲代码,今天我们一起来学习一下,二维数组的应用===》扫雷游戏;这算是我们设计的第3个游戏了;它的大体框架和前两个游戏类似,还不太了解的小伙伴不妨去看一下:改版的猜数字游戏和三字棋游戏,下面让我们一起学习吧!

目录

1.大体框架

2.游戏具体功能设计环节

2.1 初始化:InitBoard

2.2 打印:PrintBoard

2.3 布置雷:SetBoard

2.4 排查雷:FindBoard 

所有代码:​ 

 总结:


1.大体框架

    这里我们就不在多赘述,有了前面两个游戏的设计,相信我们已经熟练掌握了,下面直接上代码:

\"二维数组的应用之====》扫雷游戏(精简版)详解_第1张图片\"

逻辑测试: 

\"二维数组的应用之====》扫雷游戏(精简版)详解_第2张图片\"

2.游戏具体功能设计环节

    接下来就是最核心的扫雷游戏的实现环节;老样子我们先封装一函数game();用这个去代替case 1打印的内容,然后把所有的功能函数都写到game()函数里;让我们一起动手写一下把!

2.1 初始化:InitBoard

首先我们要思考我们要初始化什么?要创建几个数组?我们不妨去玩两把扫雷游戏去体验一下:扫雷游戏,这里我们就需要注意两点:

1. 我们需要两个字符数组,一个mine数组用来保存布置雷的信息,另一个show数组用来保存排查出雷的信息,并且我们才开始把mine数组初始化为字符0,随机布置雷的时候在改为字符1;show数组我们需要全部初始化为字符*,当这个位置不是雷的时候,我们在统计它周围有几个雷的信息存储起来。

2.对于数组的大小我们怎么设置呢?假如才开始是9*9的格子,如果数组的大小我们就定义为9*9就会出现问题;如果是边界的情况下,我们去统计它周围雷的信息个数,是不是就会造成越界;所以我们就不妨上下左右都多一行,就是11*11,为了使坐标能对应起来,我们把两个数都设置为相同的大小。例如:以下这种情况,我们设置大一点就不会造成越界!

\"二维数组的应用之====》扫雷游戏(精简版)详解_第3张图片\"

 接下来最关键的来了,我们要初始化两个数组,并且我们两个数组初始化的值还不一样:一个初始化为字符0,一个初始化为字符*;怎么办呢?写两个初始化的函数?所以我们不妨在传参的时候多传一个参数,最终共用一个初始化函数;你传过来什么,我就初始化为什么。

注意:初始化时我们把11*11的网格都要初始化,等我们真正使用打印的时候只用9*9就可以了。

具体代码实现:

\"二维数组的应用之====》扫雷游戏(精简版)详解_第4张图片\"

\"二维数组的应用之====》扫雷游戏(精简版)详解_第5张图片\"

\"二维数组的应用之====》扫雷游戏(精简版)详解_第6张图片\"

2.2 打印:PrintBoard

    对于打印很简单就不在说什么;值得注意的是,我们只打印出来中间9*9的格子就行;并且为了下面排雷输入坐标方便,我们不妨在打印时把序号也打印上。

具体代码实现:

\"二维数组的应用之====》扫雷游戏(精简版)详解_第7张图片\"

逻辑测试: 

\"二维数组的应用之====》扫雷游戏(精简版)详解_第8张图片\"

2.3 布置雷:SetBoard

    接下里我们就需要在mine数组里布置雷了,利用产生随机数来布置雷;产生随即数前两个游戏也有很详细的解释了,就是利用randsrand函数,这里就不在多说。随即数产生后我们想布置几个雷循环就写多少;需要注意的是:我们只有当前坐标位置是字符0时,我们把它改成字符1,才算设置雷成功,让循环次数减少一次;如果当前已经是字符1,就让它重新产生随即数。

具体代码实现:

\"二维数组的应用之====》扫雷游戏(精简版)详解_第9张图片\"

 逻辑测试:

\"二维数组的应用之====》扫雷游戏(精简版)详解_第10张图片\"

    当然我们在玩的时候,mine数组我们是不该打印的,到时候直接屏蔽掉就可以,这里只是为了更好的测试! 

2.4 排查雷:FindBoard 

对于排查雷我觉得是整个扫雷游戏中少稍微麻烦难一点的,前面的设计都很简单,这里就需要我们花一点心思:

第一步:我们需要输入排查的的坐标,首先判断坐标的合法性;坐标合法了,再判断是不是雷,是雷就被炸死了,我们就需要打印一下mine数组,告诉玩家你为什么被炸死了;最后break跳出循环。

第二步:如果不是雷呢?我们就需要统计mine数组当前位置周围有几个雷,我们封装个get_mine_count函数,这个函数我目前知道两种实现方法,今天将都展示给大家。需要注意的是我们统计的个数count返回的是int,而我们需要的是字符,所以我们把count+\'0\'就可以了,并把这个值赋给show数组;接下里打印一下show数组,查看排查的状态,并让变量加1这样循环次数减少1,直到我们把所有的不是雷的坐标都筛选出来,就跳出循环。

具体代码:

\"二维数组的应用之====》扫雷游戏(精简版)详解_第11张图片\"

逻辑测试: 

正常排雷:

\"二维数组的应用之====》扫雷游戏(精简版)详解_第12张图片\"

 排到雷炸死了:

\"二维数组的应用之====》扫雷游戏(精简版)详解_第13张图片\"

 通关:对于全部排出雷通关,我们不妨换个思路,多设置雷,比如设置80个雷,只有一个没有雷,如果我们把这个雷排查出来,显示我们通关了,说明逻辑就没问题:

\"二维数组的应用之====》扫雷游戏(精简版)详解_第14张图片\"

所有代码:

 总结:

     对于扫雷游戏只要把逻辑理清楚了,其实比五子棋逻辑简单多了,除了我们排查雷麻烦一点;最主要的还是思路要清晰,理清我们的字符和数之间的转换。还是那句话,能一口气写出来的小伙伴,一定要尝试写成项目的格式!!!这里我是专门整合到一块的,方便理清楚思路和截图。

下面一起欣赏校园美景吧:

\"二维数组的应用之====》扫雷游戏(精简版)详解_第15张图片\"

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号