「穴掘り法」による自動迷路生成を試してみました。

こちらの記事で紹介されていたものです。


コードの書き換え

コードを読み解くため、少し書き換えて試したりしました。動きは変わらないはず。


備忘録。コードの書き換えはこんな感じで行いました。
  • 座標が int[] で管理されていたのを、Vector2Int に変更した。座標を (p[0], p[1]) と表すよりは (p.x, p.y) のほうが直感的かなと
  • 変数名、メソッド名の変更。リストなどの変数名には複数形の s をつけたり、変数名 positions を movablePositions にして意味を分かりやすくしてみたり
  • 処理結果を Dictionary に変換して返すメソッドがあったが、後工程をみてみると List で十分だったので処理を省いた
  • マップ上のマス目(セル)の種別が「0: 壁、1: 通路」というように管理されていたのを、enum CellType (Wall または Path) で指定するようにした
など。


動かしてみた(GIF)

動かしてみると、こんな感じ。
インスペクターから登録する4つのゲームオブジェクト(壁、床、スタート、ゴール)は、すべて大きさ(1,1,1)のCubeにしています。
Anahori

動かしてみて!(WebGLプレイヤー)

WebGLでビルドしたものはこちら。コードはさらに編集しています。
  • 画面上のUIから迷路のサイズを選択して再生成できるようにした
  • スタートとゴールの位置が一緒にならないようにした

実際に迷路を生成してみてね。(※ 迷路を作るだけで、ゲームにはなっていません)



元の記事にも書いてあるけど、袋小路ができてしまうことがありますね。何が原因なんだろう。


自動迷路生成のアルゴリズムはほかにもある

自動迷路生成のアルゴリズムには「穴掘り法」以外にも、「棒倒し法」「壁伸ばし法」などというものがあるようです。ほかにもあるのかな。
また機会があればいろいろ試してみたいかも(テキトー)。

今回は以上です。