Purple 2024/04/07 23:00

ウディタでローグライク制作.1 ランダム生成ダンジョンについて

こんにちは、Purpleです。
今回から本格的にローグライクゲームの話に入りたいと思います。

さて、本題に入る前にこの記事を読んでくださっている皆様に少々(?)残念なお知らせがあります。

今回の記事ではまだ実践には入りません。
何故かと言いますと、まだ説明しなくてはならないことが残っているからです。

ローグライクゲームといえばランダム生成ダンジョン、あれがどういう理屈で作られているか、今回の記事ではそれについて触れていきたいと思います。

退屈な時間が続くかと思われますが、あと少しだけ辛抱して頂けますと幸いです。

1. ダンジョン自動生成の仕組み

筆者の調べた限りでは、いわゆる「ランダム生成ダンジョン」と呼べるものは概ね以下の3つの手順によってつくられているようです。

1.空間分割:マップにランダムに仕切りを置く

2.部屋生成:仕切りの中にこれまたランダムに部屋を生成する

3.通路生成・連結:部屋同士を通路で結ぶ

これだけだと説明が大雑把過ぎて分かりにくいので、それぞれもう少し詳しく見ていきたいと思います。

2. 空間分割

マップ全体を一度まっさらな(何もない)状態にして、それをいくつかの空間に分けていく処理です。

イメージとしては概ねこんな感じかと。


まっさらなマップがあります。※記事では見やすいように色を付けています。


適当な位置に仕切りをおきます。


これを何度か繰り返します。


最終的にこんな感じになりました。

分割してできた空間の情報(角の座標や仕切り線同士の間隔など)はデータベースや変数に格納しておきます。

※今回の記事では横→縦の順に分割していますが、分割の順番に決まりはないようですので、お好みで大丈夫かと。

3. 部屋生成

各仕切りの中に、これまたランダムな大きさの床を置いていきます。

まず、データベースなどから分割した空間の情報を取得します。


今回の場合は始点(左上)と終点(右下)のX/Y座標になります。

この中に、


このように適当なサイズの床を置いていきます。


繰り返すと、こんな感じに床が置けました。

4.通路連結

最後に、部屋同士を繋ぐ通路を作ります。

まずは通路の入口の座標を決め、
(下図の黄色の点)


そこから仕切りの外に向けて足(通路)を伸ばします。

部屋を含む空間の端っこに到達したら、


足を空間の外に1マス分だけ延長します。

(水色で囲んだ、仕切り線に被っている部分)

最後に足と足を直線で繋ぎます。

これを繰り返して、


通路の完成です。

仕上げに仕切り線を消します。


マップができました。

5.終わりに

ここまでお付き合いいただき、ありがとうございました。
次回からはいよいよ実践パートに入っていきたいと思います。
それでは、またお会いしましょう。

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索