三角剖分自动生成dungeon算法

看到别人的算法实现感觉比较不错, 这里讲一下. 原作者的思路:https://www.reddit.com/r/gamedev/comments/1dlwc4/procedural_dungeon_generation_algorithm_explained/

三角剖分自动生成dungeon算法

具体步骤是:

1. 首先在一定范围内随机生成一定数目的矩形, 例如150个矩形(位置可以是某种分布)

2. 每一个矩形随机设置宽和高(也可以有某种分布. 这里最好是不是太正方形, 但也不要过于狭长. 可以是某种分布)

3.上一步产生的矩形会有很多重叠.接下来就是将这些矩形彼此距离拉开让他们不重叠, 但是排列紧凑

4. 判断这些矩形中那些是房间. 最简单的方法是矩形面积大于一定范围就认为是房间.

5. 将房间之间彼此连接. 这里使用Delaunay三角剖分方法, 以房间中心点位置为三角形顶点.这样所有房间会彼此连接, 并且不会有交叉线

6. 每个房间彼此连接会导致地图太乱了, 也没必要. 接下来是去除某些连接, 但同时还要保证房间直接是可达的.这里采用最小生成树方法, 去除多余的连接

7. 最小生成树很好, 但是又过于简单了, 会有点无聊, 因为他没有循环. 所以接下来就是适当加一些连接,.这些连接可以从Delaunay剖分中添加. 这样最终就会房间之间有"适当"的边连接

8. "连接"最终会转化成房间之间的"走廊". 有很多方法, 原文作者的做法是, 将每条连接变成一系列直线(是一系列, 所以可能形成L形状等).任何和这些直线相交的矩形都认为是走廊

9 . 最后通过设置图片等形成最终dungeon, 如下图三角剖分自动生成dungeon算法