不思議なダンジョンを作る
文章:syun
日付:2005/3/6
目次
1.はじめに
2.部屋の作り方
3.通路の作り方
1.はじめに
今回は「不思議なダンジョン」の作り方を解説します。
「不思議なダンジョン」とは何かというと、要はダンジョンの自動生成機能です。
ダンジョンを自動生成するようにすると、ダンジョンのマップを考える必要がなくなるので、
開発がとても楽になります。
また、プレイする側にとっても、毎回ダンジョンの構造が変わるので、
プレイのたびに新鮮な気持ちで遊んでもらうことができますよね。
さて、不思議のダンジョンとはこんな感じのものです。

作り方のポイントは、「部屋」の作り方と「通路」の作り方ですね。
この2つを押さえてしまえば、簡単に作ることができます。
2.部屋の作り方
最初にダンジョンの大きさを決めてしまいます。
ここで基準となるのが「部屋」です。
通常、アイテムや敵、下へ降りる階段などは、この「部屋」に配置されます。
部屋をどのように扱うかをまず考えてみます。
例えば、ダンジョンの大きさを、部屋が5×3だけ配置できるようにします。

ただし、実際には5×3=15部屋を配置することはしません。
通路だけの部屋を織り交ぜた方が、メリハリがあるからです。
具体的には、最大の1/3〜1/2だけ配置した方がいいでしょう。
この場合ですと、5〜10部屋ということになりますね。
次に部屋のサイズです。
図では10×10ブロックとっています。
なので、8×8が最大のサイズですね。
これ以上とってしまうと、隣の部屋とつながってしまいます。
最小は4×4ぐらいでしょうか…。
というように、
「部屋の数」と「部屋のサイズ」を乱数で決定することにより「部屋」を作ることができます。
(部屋の配置は、なるべく偏りのないように配置するのがベストです)
3.通路の作り方
通路の作り方は、少し難しいです。
ただ、実際のところは「プレイヤーの最初の地点」と「下に降りる階段」がつながっていれば、
ゲームの進行上問題はありません。
ですので、とりあえずは各部屋の上下左右に乱数で通路を作成し、
つながりのある部屋に「プレイヤーの最初の地点」と「下に降りる階段」を設定すれば問題ないでしょう。
しかし、こうしてしまうと、つながっていない部屋ができてもったいないですね。
そこで、以下の方法を利用します。
最初に乱数で部屋をつなぐところは同じです。
その後、つながっている部屋をグループ分けします。

例えば、図では、
1と2と6、3と4と5と8、9と10と14と15
というつながっている部屋のグループがありますね。
各グループから、乱数で部屋を選び、その部屋同士を結び付けます。
隣同士でない場合は、途中につなぎの部屋を作る、または通路を掘って結び付けてしまう、というのもありですね。
例えば、2と3、5と10を結ぶと、無事全体がつながります。

○参考資料
Delphiゲームプログラミングのエッセンス
自動生成をすると、どうしてもダンジョンの構造にムラができてしまうので、
そこをいかにうまくごまかせるかが、プログラマーの腕の見せ所ですね。
以上、syunでした。