使用来自给定集合的某些房间来程序生成地下城

时间:2017-09-17 22:16:57

标签: algorithm graph-algorithm procedural-generation

在程序上生成地下城的大多数尝试我偶然发现了空间区域,这些区域将成为房间并将它们连接起来,这些区域将是走廊和走廊,但是如果您拥有各种尺寸的可能房间的集合,并希望生成一个地牢,那么使用这些特定的房间,没有这些走廊和连接?为了回答这个问题,我发现了this particular video on the topic of generating levels in Path of Exile(约5:20 - ~7:20关于我所指的地下城部分),这些问题留下了关于如何在技术上实现所述算法的问题。

总的来说,我理解这个想法,但我正在努力弄清楚如何将其转化为代码(最有效),因此这里有几个问题:

  1. 当他展示如何切割整个关卡时,我无法想出一个能够代表这个结构的图表。我天真的方法是让整个级别由1x1个房间组成,并在图表中任意合并节点以形成有效维度的房间(有效=有一个可以在以后插入的预定义房间)。或者更好的方法是使用二维数组和特定尺寸的试验室,然后用它来构建图形?
  2. 对房间进行着色应该只是将随机距离(在给定的时间间隔内)分配给连接节点的边缘,只是应用Dijkstra从头到尾找到房间序列我猜想?
  3. 当他添加分支房间时,我注意到他们不允许另一条通往出口的替代路径(当然可能是随机的)但是如何实现分支?只是递归遍历,继续深入图表的可能性越来越小?
  4. 备注

    请注意,该集合超出了关卡中的切片数量,并且旨在预先定义关卡中的房间数量。切片的数量应该是任意的,房间随机放入切片中。

    视频

    中算法的描述

    步骤1。将一个开始和结束房间任意放入关卡中(可能是给定的最小距离,以防止退化布局):

    enter image description here

    第2步。将整个关卡切割成任意数量的区域,这些区域与系列中预定义房间的大小完全相同:

    enter image description here

    第3步。为每个房间分配一个随机加权/距离,在此示例中用颜色表示:

    enter image description here

    第4步。找到从开始到结束获取非线性路径的最短路径:

    enter image description here

    第5步。您的基本布局只有一条成功路径,您可以在其中放置必须与相应门连接的相应尺寸的随机房间:

    enter image description here

    第6步。最后,添加一些分支室:

    enter image description here

0 个答案:

没有答案