【问题标题】:Dungeon Generation Methods地牢生成方法
【发布时间】:2014-11-13 03:07:03
【问题描述】:

我一直在研究一个好的地牢算法,但遇到了几个问题。我正在尝试在狂神境界和地牢爬行者之间进行混合。我的设计布局是走廊相互分支,房间里装满了怪物。到目前为止,我已经根据这个算法建立了一个地牢生成器:http://www.roguebasin.com/index.php?title=Dungeon-Building_Algorithm。我的第一个问题是,由于我的走廊不是 1 个空间宽,它们看起来经常相互隔开,这不是预期的效果。

.

我一直在考虑可能会更改生成,以便它将图块存储在数组列表中,以便它可以使用它来查找每个段落应该如何连接,我也考虑过尝试不同的算法,但是我很犹豫,因为不先尝试解决这个问题会感觉很浪费。任何一点建议都是有帮助的,因为我对此比较陌生!

注意:必须有一个玩家生成的特殊房间和一个 Boss 房间。就这一点而言,我不确定如何始终确保将这些房间连接在一起,也许是在其他所有事情都完成之后的最后一代?

【问题讨论】:

  • 这听起来是个不错的问题。我可能会首先生成房间(具有最大宽度/高度),这样您就可以拥有“列和行”的房间......然后在同一行和相邻列的房间之间生成大厅,或者在同一列和相邻房间之间生成大厅。
  • 我喜欢像这样将它们联系在一起的想法,但我认为如果我理解正确的话,这将导致一些非常直接的联系,我想的是更多曲折的段落。我会试一试,看看效果如何,谢谢@Gus的建议
  • 如果您不喜欢直线连接,请尝试样条线,然后调整路径宽度以匹配两个出口。
  • 我认为测量从起始位置到boss房间的路径很重要。无论随机性如何,让它具有假定的长度都会导致相似的游戏时间和复杂性。但这有点离题。我认为最好的方法是使用分治算法。首先将您的所有地图划分为较小的扇区,然后使用填充它们的功能。当然,这个函数必须能够匹配扇区边界上定义的出口数量。根据它应该覆盖的区域,它可能会产生不同的结果:小区域为走廊,中等区域为房间等。

标签: java algorithm random generator


【解决方案1】:

也许更简单(但不完整)的解决方案是存储您构建的每个“房间/功能”的一些元数据。如果您选择走廊尽头的墙壁作为某些新要素的放置位置,则将“走廊”排除为有效要素。

它不会解决所有地图不一致的问题,如果您有两种不同类型的走廊(较宽的走廊和较窄的走廊),您将永远不会看到走廊变得更宽或更窄,但它是一个简单的解决方案,而且相当快速的解决方案。

当然有更好的解决方案,但我需要更多关于算法的细节。对于我在您发送的链接中看到的内容,它的作用是选择墙砖作为放置并在其后面放置一个功能。也许在决定放置位置时,您不需要只看随机选择的墙砖,而是看它周围的整个连续墙:

  1. 选择一个随机特征(例如要构建的走廊)
  2. 在某处随机选择墙砖
  3. 从每个功能您将知道它的开口有多大。
  4. 比较是否有足够的墙砖向下(或右侧)整齐地放置其开口,如果没有,请选择您原来选择的向上/右侧墙并重试。您可以打到无法做到的场景,您可以从第 1 点重新开始,然后再试一次。

这只是我的想法,当然还有其他解决方案。但这可能足以让您入门。

【讨论】:

    【解决方案2】:

    我想过使用伪随机数生成器(例如 mersenne twister)来搜索随机方向,然后从中心点创建房间。如果没有碰撞,您可以在那里创建一个房间,然后随机选择另一个方向。当你建立在你的中心点上时,结果不会是直接的连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2011-06-27
      • 1970-01-01
      • 2019-06-29
      相关资源
      最近更新 更多