三角剖分自動生成dungeon算法

看到別人的算法實現感覺比較不錯, 這裏講一下. 原作者的思路:https://www.reddit.com/r/gamedev/comments/1dlwc4/procedural_dungeon_generation_algorithm_explained/

具體步驟是:

1. 首先在一定範圍內隨機生成一定數目的矩形, 例如150個矩形(位置可以是某種分佈)

2. 每一個矩形隨機設置寬和高(也可以有某種分佈. 這裏最好是不是太正方形, 但也不要過於狹長. 可以是某種分佈)

3.上一步產生的矩形會有很多重疊.接下來就是將這些矩形彼此距離拉開讓他們不重疊, 但是排列緊湊

4. 判斷這些矩形中那些是房間. 最簡單的方法是矩形面積大於一定範圍就認爲是房間.

5. 將房間之間彼此連接. 這裏使用Delaunay三角剖分方法, 以房間中心點位置爲三角形頂點.這樣所有房間會彼此連接, 並且不會有交叉線

6. 每個房間彼此連接會導致地圖太亂了, 也沒必要. 接下來是去除某些連接, 但同時還要保證房間直接是可達的.這裏採用最小生成樹方法, 去除多餘的連接

7. 最小生成樹很好, 但是又過於簡單了, 會有點無聊, 因爲他沒有循環. 所以接下來就是適當加一些連接,.這些連接可以從Delaunay剖分中添加. 這樣最終就會房間之間有"適當"的邊連接

8. "連接"最終會轉化成房間之間的"走廊". 有很多方法, 原文作者的做法是, 將每條連接變成一系列直線(是一系列, 所以可能形成L形狀等).任何和這些直線相交的矩形都認爲是走廊

9 . 最後通過設置圖片等形成最終dungeon, 如下圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章