NetHack 侏儒矿坑中的地牢生成
摘要
一篇博客文章,详细解析了 NetHack 如何通过四轮元胞自动机迭代生成侏儒矿坑关卡,其中包括一轮不使用缓冲区的聚类处理和多轮侵蚀处理,而第二轮处理令人费解,作者对其用途提出了疑问。
暂无内容
查看缓存全文
缓存时间: 2026/10/22 18:38
# NetHack 侏儒矿坑中的地牢生成
来源:https://www.boristhebrave.com/2026/10/18/dungeon-generation-in-the-gnomish-mines-of-nethack/
跳至正文 (https://www.boristhebrave.com/2026/10/18/dungeon-generation-in-the-gnomish-mines-of-nethack/#content)
好吧,这个话题确实最好借助可视化工具来解释:
NetHack 的关卡生成有很多有趣之处,但我想重点讲讲侏儒矿坑 (https://nethackwiki.com/wiki/Gnomish_Mines),因为它使用了元胞自动机\。这赋予了它一种自然洞穴的感觉,而游戏的大部分时间都是在方形房间中度过的\。
流程非常简单:
- 随机选取 40% 的格子作为地面
- 执行四轮元胞自动机更新
- 添加额外的走廊,连通彼此隔绝的洞穴
让我们具体看看元胞自动机\。它只有两种状态——地面或岩石\。每一轮都会统计每个格子的 8 邻域中有多少个地面格子\。
第 1 轮:0\-2 → 岩石;3\-4 → 不变;5\-8 → 地面 第 2 轮:0\-4 → 不变;5 → 岩石;6\-8 → 不变 第 3 轮:0\-2 → 岩石;3\-8 → 不变\。第 4 轮:*与第 3 轮相同*
有趣的是,第 1 轮不使用缓冲\。每个格子都会原地更新,然后才处理下一个格子\。其余各轮都使用缓冲——先计算所有格子的新值,再一次性更新整个网格\。
第 1 轮会在其他地面附近生成地面,在其他岩石附近生成岩石\。我会将其称为“聚集”轮,它促使随机分布的格子形成宽阔的开放区域\。这里不使用缓冲很重要,这样就不会出现来回翻转的情况:某个格子从岩石变成地面,而它附近的另一个格子却从地面变成岩石\。
第 3 轮和第 4 轮是侵蚀过程,这是元胞自动机的一种非常常见的用途\。如果你附近有 6\-8 个岩石格子,那么你也会变成岩石\。这通常会使棱角变得平滑,并消除微小的孤岛\。
不过,第 2 轮嘛……如果一个格子恰好有 5 个地面邻居,它就会被变成岩石\(也就是有 3 个岩石邻居\)\。我仍然很难理解这一步究竟想达到什么目的\。大家有什么想法吗?
相似文章
Show HN: Reverse Minesweeper
Reverse Minesweeper 是一款逻辑益智游戏,它使用基于推理的求解器生成可调节难度的网格,提供从简单到疯狂五个难度等级。
这个博客底下有一座地下城
一位开发者描述了如何使用 WebRTC 和 Trystero 将点对点多人地下城游戏嵌入静态博客,采用确定性程序生成,且无需后端服务器。
将NetHack加入我的社区应用,这款38年历史的游戏始终让我措手不及
一位开发者将NetHack加入自己的社区应用,发现了这款38年历史的Roguelike游戏惊人的深度,包括通过Bones文件实现的多人在线模式,以及无数隐蔽的互动方式。
Show HN:基于 Raycaster 的 Entombed 复刻
这是一篇 Show HN 帖子,介绍了作者受 Atari 2600 经典游戏《Entombed》启发而制作的 raycaster 项目,重点探讨了该游戏著名的「神秘表格」迷宫生成算法——在极端的内存限制下,仅利用相邻单元的局部信息逐行程序化地构建迷宫。
《Caves of Qud》中的端到端程序化生成(2019)
自由游戏(Freehold Games)的Brian Bucklew和Jason Grinblat介绍了他们如何结合程序化生成技术,在游戏《Caves of Qud》中创建具有历史、文化、建筑、NPC和任务的完整村庄。