Open7

ローグライクのダンジョン生成アルゴリズムを調べる

ハムちゃんハムちゃん

Cellular Automaton (セルオートマトン)

ルールを元にマップを生成するアルゴリズム。セルオートマトン自体にも何個も種類があるらしい。

目を通した記事では、セルオートマトンを利用すると良い感じのダンジョンが作れたり、上手く利用すると洞窟のようなダンジョンが作れる見たい。

・記事の内容を抜粋
1.マップをグリッド上に分割して、ランダムに壁や床を配置
2.ルールを適用(壁が多いとそのセルが壁になる、少ないと床になる)
3.オプションの配置(敵、宝箱、階段の配置)

▼Unity公式でセルオートマトンに関するチュートリアルがあった
https://hajimete-program.com/blog/2016/07/16/unity5の洞窟、ダンジョン生成チュートリアル動画の/

▼参考記事
https://note.com/tosik/n/nc4a30c329515
http://koyoru1214.blog.fc2.com/blog-entry-9.html
https://gamedevlog.hatenablog.jp/entry/2024/12/20/150838
https://ympbyc.hatenablog.com/entry/20120614/1339680184

ハムちゃんハムちゃん

Binary Space Partitioning (バイナリスペースパーティショニング)

略称でBSPと呼ばれているらしい。

ランダムな部屋配置、つながった通路の作成に役立つアルゴリズムらしい。
部屋と通路を繋げてくれることから無難にいい感じのマップが生成できそう。

・記事の内容を抜粋
1.マップをランダムな方向(水平または垂直)に分割 ※最小値の値まで分割を繰り返す
2.分割した区間内にランダムなサイズの部屋を作成
3.部屋から分割した境界線まで辿り次の部屋へと繋げる
4.オプションの配置(敵、宝箱、階段の配置)

▼参考記事
https://qiita.com/generoKoki/items/40e10ee1538f6adacc09
https://qiita.com/LeNia/items/067cc5814f00c9f86624
https://www.roguebasin.com/index.php?title=Basic_BSP_Dungeon_generation
https://qiita.com/2dgames_jp/items/00ee2ad52914753bfbb7
https://studioshimazu.com/ハイクラス:マップの自動生成/

ハムちゃんハムちゃん

番外:棒倒し法? 壁倒し法?

2つの呼び方があるけどどっちが正しいんだろう?宗教...?
迷路生成アルゴリズムで定番の手法。迷路生成アルゴリズムの中でも最もシンプルらしい。

1.外壁を作る
2.内側に1マスごとに起点となる壁を作る
3.2で並べた壁を起点に上下左右に倒していずれかの1マスを壁にする

▼参考記事
https://zenn.dev/sdkfz181tiger/articles/208681ce5a4d87
https://algoful.com/Archive/Algorithm/MazeBar
https://minatame-lab.com/maze-stick/

ハムちゃんハムちゃん

番外:穴掘り法

穴を掘るように道を作る、迷路生成アルゴリズムの定番手法らしい。
棒倒し(壁倒し)法と違って、何もないところから道を作ることから人が手書きで作った風な迷路を作ることができる見たい。

1.二次元配列を壁で全部埋める
2.掘り進める開始地点を決めて壁を掘る
3.1セル先の掘る場所が通路なら方向転換(進めれるところまで掘り続ける)

▼参考記事
https://zenn.dev/sdkfz181tiger/articles/208681ce5a4d87
https://algoful.com/Archive/Algorithm/MazeDig
https://2dgames.jp/digging/

ハムちゃんハムちゃん

番外:壁伸ばし法

名前の通り、壁を伸ばすアルゴリズム。これも迷路生成アルゴリズムだと定番らしい。
壁を止める判定を作るのが少し複雑らしく、棒倒し(壁倒し)法、穴掘り法と比べると少し複雑見たい。

1.外壁を作る
2.セルが奇数の場所をリストにまとめ開始位置を決めて壁を伸ばす
3.起点をランダムにしつつ壁を伸ばす

▼参考リンク
https://algoful.com/Archive/Algorithm/MazeExtend
https://zenn.dev/sdkfz181tiger/articles/208681ce5a4d87
https://zenn.dev/baroqueengine/books/a19140f2d9fc1a/viewer/49a601

ハムちゃんハムちゃん

今日は一旦ここまで。
棒倒し(壁倒し)、穴掘り、壁伸ばしは3点セットで紹介されている内容が多い。

若干脱線してたけど、考え方を知っとけば他のアルゴリズムと組み合わせてごにょごにょできるのかな。