不思議なダンジョンを作る
文章: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でした。