当前位置: 首页 > news >正文

小游戏(2)扫雷游戏

一、简述

鸽子的时间太长了,其实学完数组和函数就应该搞出来这个丐版的小游戏了,不耽误,反正总归是轮到了,嘻嘻。

二、依旧菜单\.

我们这里写的是一个丐版的扫雷游戏,难度就固定了,所以菜单写起来就是玩游戏和退出游戏两个选项。

三、扫雷的主逻辑

1.主函数

主函数没什么好说的,无非就是让用户选择玩还是不玩,玩完一次以后是否要继续,最重要的是扫雷的逻辑。

2.扫雷的逻辑

扫雷游戏就是一个棋盘,其中有数字和雷,数字显示的是九宫格以内雷的个数:

所以现在我们要创建一个棋盘,最开始的时候什么都不显示,每选择一个坐标去排除就显示相应的信息(周围的雷的个数)。

创建的棋盘的每个坐标都是一个取值,既然类似于二维平面的坐标,那我们就用一个二维数组来储存这个信息。

最开始的时候应该是一个雷都没有的状态,我们应该随机去设置雷,说到随机设置肯定离不开之前写猜数字游戏的时候用到的rand函数,rand函数又离不开srand函数,srand函数的参数我们给的又是time这个函数。

这里就说出来了两种棋盘,一种是布置好雷的棋盘,一种是我们在扫雷过程中看到的棋盘。

扫雷过程中看到的棋盘应该是由本次扫雷给出的坐标然后统计出九宫格内的雷的个数。

需要注意的是边界统计雷个数:

这个位置不够九宫格,如果正常数的话,肯定会存在越界的情况,所以我们将来为了不越界,干脆多初始化两行和两列,只不过最外面那一圈不布置雷。

扫雷过程中有以下几种情况:

1.扫到雷了,被炸死了。这种情况下游戏结束,并给出布置雷的信息。

2.没有扫到雷,展示该坐标九宫格内雷的个数,游戏继续。

3.扫完了所有不是雷的坐标,游戏成功。

接下来一步一步来实现。

四、创造所需几种棋盘

1.初始化所需棋盘

2.布置雷

在说逻辑的时候说有一个重要的特点就是如果扫的不是雷,显示的是四周雷的个数,如果我们到时候需要计算的话,布置雷的棋盘应该以0 1来实现,因为这样的话方便后续计算并展示。

为了后续方便统计雷,特别是边界的雷,假如我们最后要9×9的棋盘,就扩成11×11,即:

只要最外面这一圈不布置雷就行,即1~9行和1~9列内的元素才有可能赋值雷

这么实现:

并且为了美观,咱们把雷的位置记录下来,并且用'*'来展示,毕竟你为了好实现,0代表没雷,1代表有雷,但是展示的时候还是得展示的好像我们埋的就是雷:

布置完雷以后展示一下,将要被排查的棋盘,为扫雷做准备:

3.排查雷

布置好以后就可以让人开始排查雷:

这里就是我们所说的,坐标有效,如果是雷怎么办,如果不是雷怎么办,哦对,还得防止坐标被反复排查:

即在判断坐标有效后又加一判断,判断是否排查过。

相信眼尖的人已经注意到了,在这段代码中还有两个地方,while循环的条件还未去设置,另一个是不是雷,要展示这次排查出来的坐标九宫格内雷的个数。

循环条件暂时没想好,先管九宫格这个,这个有头绪:

只要将这八个坐标里的值遍历一下数数有几个就可以了,注意,我们初始化的时候给的可全是字符(因为展示的也是字符,索性都字符二维数组了),所以可以根据ASCII码的差值来:

'0'-'0'为整型0,'1'-'0'为整型1

其实很懊恼,我们写这个while循环是为了一个一个遍历整个棋盘,什么情况下就停止呢,当然是正常遍历完,正常遍历完是整个棋盘的大小减去雷的个数,故条件为:

五、细节处理以及不足之处

1.坐标难看

这个难看可不是不好看,而是不容易看,所以加上行号列号,便于扫雷:

2.测试运行的时候的bug

写的时候

返回的个数正好是九宫格内整数的个数嘛,但是运行不出来,因为:

show数组是一个字符类型的数组,如果直接将int值传过去的话,将会导致不能展示出来个数,因此:

用字符0强制给它凑出来。

六、整体展示

相关文章:

  • 小芯片大战略:Chiplet技术如何重构全球半导体竞争格局?
  • Laravel 12 基于 EMQX 实现 MQTT 消息发送与接收
  • Linux云计算训练营笔记day02(Linux、计算机网络、进制)
  • 信息论05:信息论中的条件熵——从不确定性量化到机器学习实战
  • java每日精进 5.06【框架之功能权限】
  • java安全入门
  • AI技术下研发体系重构
  • 登高架设作业“十不登高”原则
  • SSCLMD项目详细分析
  • colcon: error: unrecognized arguments: --packages-select报错
  • vs code管理员权限启动问题
  • 最新版Google浏览器加载ActiveX控件之VLC五一节特别版
  • 【Linux系统】读写锁
  • QT Sqlite数据库-教程03 插入数据-下
  • 如何修改 JAR 包中的源码
  • 设备管理系统的功能架构与核心价值
  • MATLAB程序演示与编程思路,相对导航,四个小车的形式,使用集中式扩展卡尔曼滤波(fullyCN-EKF)
  • 决 策 树
  • Marin说PCB之1000-BASE-T1的PCB设计总结--04
  • 文化符号与隐形的社会话语权力:解码布尔迪厄理论下的意识形态操控机制
  • 公募基金行业迎系统性变革:基金公司业绩差必须少收费
  • 秦洪看盘|受阻回落,蓄积新做多能量
  • 水中托举救出落水孩童后遇难,42岁退役军人高武被确认为见义勇为
  • 经济日报:落实落细更加积极的财政政策
  • 《中国医药指南》就涉宫颈癌等论文出现男性病例致歉:辞退涉事编辑
  • 洗衣机无法有效杀菌