algorithm - 计算固定数量地雷随机生成的扫雷地图难度的算法
问题描述
我正在我的世界中制作扫雷游戏(没关系)。
我创建了一个随机放置地雷的代码,显示每个块周围的炸弹数量,检测游戏的清除和失败。
即使相同数量的地雷放置在相同大小的地图上,每个游戏的难度也相差很大,所以我觉得快速通关游戏需要很大的运气。
所以我正在寻找一种算法来以数字方式生成随机生成的地图的整体难度。
我尝试了一种通过对每个图块(块)的每个数字(颜色)进行评分和求和来计算难度级别的方法。但是,我们无法找到能够获得合理难度分数的每个图块的分数。
由于是 Minecraft 中的命令操作,我不想要太复杂的表达式或完美的结果。如果有一种算法可以通过获取随机生成的地图的难度可以分为大约3~5个级别,如果您能解释一下,我将不胜感激
(红石块是我的,每种颜色代表数字1 2 3)
解决方案
一些想法
首先,实际游戏中的扫雷难度是通过增加棋盘大小和地雷数量来处理的。由于在屏幕上重播扫雷游戏更容易重新启动并且更快,因此这被认为是足够的。(它是否是一个好的设计是一个不同的问题。)但是,您想要处理一组棋盘和地雷的难度,以实现您的迷你游戏。
由于您想要一些相当简单的东西,我会推荐以下方法之一:
骗一点:
Minecraft 编程并不是一个处理此类分析的好地方。由于您已经有一个随机生成器,因此可以使用它来加载几十个预先准备和预先分析的电路板之一。玩家不会注意到任何事情,除非他专心致志地花几天时间玩你的小游戏——只是你的游戏看起来很公平,玩起来很舒服。你有你的困难最小的麻烦。
经常作弊:
实施公平的扫雷:在玩家无法确定下一步的情况下,始终放置非地雷,如果有地雷,则将其放置在不会改变已经显示的布局的地方. 这从实际游戏中删除了玩家必须猜测哪些可能被认为是不公平的地方。当你无法控制局势时,有 30% 的机会在接近尾声时毁掉一场比赛的感觉并不有趣。
这将更难以实施。从好的方面来说,它不需要预加载和预计算。
至于一个实际的答案,已经对扫雷进行了广泛的研究——例如这篇论文。我发现那里提到董事会一代的部分是这样的:
- 生成一个板子。
- 运行算法以找到“无法解决”的部分(玩家必须猜测)
- 运行一种不同的算法来尝试将此部分转换为可解的部分。
这很可能不是您正在寻找的简单解决方案。
推荐阅读
- c# - SharePoint 文件夹名称验证器
- vue.js - Nuxt.js auth 用户已设置,但 loggedIn 仍然为 false
- c# - 如何通过“实时”滚动另一个comobox上的滚动来更改combobox.text?
- python - 我正在尝试使用 Anaconda 启动 Jupyter,但笔记本无法启动。它也不显示任何错误
- mongodb - 级别系统,用户名无法检索
- javascript - sum 的值是串联而不是总和
- gitlab - 在私有存储库的 npm install 上收到错误代码 128
- java - 按 ID 合并两个列表
- python - 使用 python 的命令行参数运行 C# exe 会给出 CalledProcessError: Command
- c# - Unity 3d 保存高分错误