算法小白手撸扫雷小游戏,有没有大佬指点一下?

131 天前
 miaeLKK
最近比较闲,想摸鱼,玩手机容易被逮,电脑又没有网,就想着写个扫雷玩玩:

初始化:

根据大小生成棋盘,初始化每个格子为 - ;

随机生成指定地雷数的地雷(写入棋盘);

遍历每个格子,计算周围 9 个格的地雷数量(需要边界判断),将计算结果写入棋盘。

初始化完成了,然后是游戏部分:

然后翻开格子时需要一个“炸开”效果,一开始我想着太麻烦了,自己一个个翻吧,后来觉得还是写一个试试,一开始想着逐行扫描,但是连续性不好做。然后想着四个象限扩展,但感觉也是很麻烦。最后想了个方法,每个格子扩展其上下左右 4 个格子,成功了。具体方法:

翻开格子时首先判断是否不是雷(也就是数字或空格),然后将当前格子翻开。然后进一步判断当前格子是否是空格,是的话就递归当前方法,翻上下左右 4 个格子

对此,大家有什么建议吗?
858 次点击
所在节点    算法
4 条回复
murmur
131 天前
这东西涉及算法么,当时我都拿这个做前端面试题,除了生成正好多少个雷可能需要点算法,其余的都不需要吧
newtype0092
131 天前
翻格子的效果,和格子实际数据是两码事,不应该有逻辑耦合,不然就会干扰限制动画渲染的逻辑,你播放动画效果前,就应该知道这次动画涉及到的所有格子。

要说算法的话简单的就是两种计算格子数据的方式,一种是像你这样点开格子后递归搜索计算旁边可能关联的所有格子的情况,但这样的话你最开始初始化时的遍历就没什么意义了。

还有一种就是遍历的时候把所有信息算好,包括有多少个空格区块,每个区块具体包含哪些格子,这样点开任意空格后所有的信息都是已知的。
helldweller
131 天前
如果你在游戏开始之前就初始化所有雷的位置就会出现开局第一步就被炸死的情况,可能在第一次翻开格子的时候构造棋盘更好一点。
xuelang
19 天前
我用 cursor 实现了一个,支持经典扫雷还有蜂窝雷,代码开源了,你可以看看。其实不用什么算法,比较简单的

https://gallery.selfboot.cn/zh/games/minesweeper

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1064856

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX