人気ブログランキング | 話題のタグを見る

ダンジョンの作られ方

とうとう不思議のダンジョンシリーズの要にまで手を出しました。と言っても、実は10ヶ月前に調べていたのですが、想像に難くないでしょうがプログラムが長いので、なかなか解説する気力が起きず、気が付けばこんなに時間が経過していたのでした。なので簡単に解説します。
通常の地形で1~3Fの場合だけ解説しますが、特殊地形でも作られ方はよく似ていると思います。

最初に、「ブロック」という単位を解説しておかなければなりません。
通常の地形の場合、1つのフロアは5*3のブロックに分かれています。この内中央のブロックを除いた14ブロックの中に部屋が配置されます。
以下の画像を見れば直ぐに分かります。

http://oyasen20.tripod.com/image/block.png

なぜ中央のブロックが使われないのかは分かりませんが、いつも中央に描画されるシレンが邪魔になるからかも知れません。

まず、通路の骨格を決定します。14ブロックの中からランダムに1ブロックを決定し、そこから一筆書きで既にある通路に当たらないようにして、4方向どこにも進めなくなるまで進めていきます。最も左上のブロックから始めた例です。

│←─┐□
└┐×└┐
□└──┘

次に、まだ骨格が決められていないブロックがあれば、それがなくなるまで、「既に骨格が決められたブロックから」分岐して、同様のことを繰り返します。

│──┬→
├┐×└┐
↓└──┘

どうして、骨格が決められていないブロックから進めないのか。少し考えると、同じフロア内で繋がっていない部分ができてしまうことが分かると思います。
全てのブロックで骨格が決定されると、高々3本ランダムにブロックを繋ぎます。1本につき最大10回トライします。これで通路の骨格が決定します。

│┌─┬┐
├┤×└┤
│└──┘

骨格が決まると、今度はどのブロックが部屋になるかを決定します。
部屋の数が高々10個であることはよく知られていますが、部屋のブロックを決めるトライを部屋1個につき最大5回行います。

後は部屋のサイズを決定し、通路が部屋のどこから延びるか(そのブロックが部屋でない場合、ある1マスを決めてそこから通路を延ばします)、延びた通路同士がどこで曲がって接続するかを決定して完成です。

読者の皆様は、どのようにしてダンジョンが作られると想像していましたか?私は、こう見えてもプログラミングはあまりできないので、恥ずかしながらこれで初めて迷路の作り方を知りました。

ダンジョンの作られ方の序でに、埋蔵金部屋の出現率らしきものも発見したので書いておきます。通常の地形に限って、以下の確率で出現するようです。

1~9F:1/256
10~14F:26/256
15~19F:86/256
20~24F:26/256
25F以上:1/256
by oyasen | 2010-01-03 11:52 | 改造・解析
<< web拍手への返信 その5 謹賀新年 >>