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

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

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


1.大体框架


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

64677d54b48843ee84bb56cacad1179a.png逻辑测试:

933844664b3a469b98dd2a55e80fe2ec.png



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


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


2.1 初始化:InitBoard


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


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


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

2de091082c554615b8e632e3cf49f449.png

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


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


具体代码实现:


1269732c55834f4eac0f45bfdcb4de25.png

b988a1cc44dc4dcdb11a61607b2d689f.png


1c1aa93eea75436ead50af65882f1507.png


2.2 打印:PrintBoard


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


具体代码实现:


abaf0bd6ed3c4926a8862f3cc25d1ef0.png


逻辑测试:

8c8f826a4bb3474ca1e18e883286028e.png


2.3 布置雷:SetBoard


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


具体代码实现:

2d7fa815f6a54dc58714001c2d7dabfc.png


逻辑测试:


543c817ad0b347558e73311c4bf339f7.png


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

2.4 排查雷:FindBoard


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


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


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


具体代码:


a9d880cd9f1548309792e30232867e82.png

逻辑测试:

正常排雷:

670cf751b2264695b9bb221aa571e5da.png

排到雷炸死了:

441ede717e2f4be59ce1003100001dfa.png


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

0dfcdbfe15d6484b89c03032cc72cdd1.png

所有代码:

image.png



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


结束语


今天的分享就到这里,想要提升编程思维的,快快去注册牛客网开始刷题吧!各种大厂面试真题在等你哦!


💬刷题神器,从基础到大厂面试题👉点击跳转刷题网站


184068dc41e94efbb14e555f972eaa17.png

目录
打赏
0
0
0
0
0
分享
相关文章
DataWorks产品深度评测:优势与展望
在数字化时代,数据成为企业决策和创新的关键驱动力。DataWorks作为一款大数据开发治理平台,展现了强大的功能和潜力。本文从用户画像分析实践、实际工作中的作用、产品体验评测、与其他工具对比等多个维度,全面评测了DataWorks,旨在为潜在用户提供深入且实用的参考。评测内容涵盖任务开发便捷性、性能表现、价格策略、社区建设等方面,突显了DataWorks的优势和改进空间。
AI经营|多Agent择优生成商品标题
商品标题中关键词的好坏是商品能否被主搜检索到的关键因素,使用大模型自动优化标题成为【AI经营】中的核心能力之一,本文讲述大模型如何帮助商家优化商品素材,提升商品竞争力。
859 62
AI经营|多Agent择优生成商品标题
《深度融合:DeepSeek无缝嵌入现有业务系统全攻略》
在数字化转型中,企业利用人工智能提升效率和创新能力。DeepSeek作为强大的大语言模型,以其出色的推理能力为企业带来新机遇。集成DeepSeek需经过系统评估、需求分析和技术选型,选择API调用或私有化部署。通过接口对接、数据预处理和模型优化,逐步实现深度融合。最后,进行全面测试确保集成效果,为企业业务创新注入强大动力。
753 0
介绍几个常用的电商API接口及其应用场景。(一篇文章全清楚)
电商API接口是电商平台高效运营的核心技术支撑,涵盖商品管理、订单管理、支付、客户管理、营销推广和数据分析六大模块。商品管理API实现商品信息的精准上传与动态调整;订单管理API确保订单全流程透明可控;支付API保障交易安全便捷;客户管理API通过数据分析提供个性化服务;营销推广API助力精准营销;数据分析API为决策提供数据支持。各API协同工作,推动电商行业创新发展,构建智能便捷的电商生态。
852 12
如何监控和诊断 MySQL 数据库的性能问题?
【10月更文挑战第28天】监控和诊断MySQL数据库的性能问题是确保数据库高效稳定运行的关键
1034 1
玩转数据科学:Python实战分析天气预报变动趋势
【10月更文挑战第1天】随着气候变化对日常生活的影响日益显著,理解和预测天气模式变得越来越重要。本文将引导您如何使用Python来抓取和分析天气预报数据,从而揭示天气变化的趋势。我们将介绍从获取公开气象API的数据到清洗、处理以及可视化整个过程的技术方法。
685 2
|
9月前
SDL基础使用04(SDL_image与SDL_mixer扩展库)
本文介绍了如何使用SDL_image和SDL_mixer扩展库在SDL项目中加载和显示图片以及播放音频文件。
417 1
【PTA】​L1-003 个位数统计​ (C++)
【PTA】​L1-003 个位数统计​ (C++)
214 0
【PTA】​L1-003 个位数统计​ (C++)
【分布式任务调度平台 XXL-JOB 急速入门】从零开始将 XXL-JOB 接入到自己的项目(上)
【分布式任务调度平台 XXL-JOB 急速入门】从零开始将 XXL-JOB 接入到自己的项目
1672 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问