fc2ブログ

ランダムダンジョン生成―部屋生成

今まで机上の概念的な話ばかりで頭が痛かったですが、ようやく画面処理にも入っていきます。
部屋の生成です。
不思議のダンジョンシリーズではなんだか複雑な形の部屋もありますが、残念ながら自分にはそこまで処理するだけの能力がないので、とりあえず長方形の部屋を作ることにします。

が、その前にやっておくべきことがひとつ。マップをすべて床と天井で埋め尽くしてしまいます。
ウディタの場合は、レイヤー1を床チップで敷き詰め、レイヤー2を天井チップで埋め尽くすといい感じです。
あらかじめ天井で埋め尽くされたフロアから、天井をくりぬいてダンジョンを生成するイメージですね。

さて、では部屋の生成手順。

空間分割の情報を保存してある空間DBを参照。空間の起点(左上)となるXY、終点(右下)となるXY座標を取得。

あらかじめ部屋の最小縦サイズ、最小横サイズを決めておき、部屋のサイズがそれ以下にならないように空間内に作る部屋の座標(起点と終点)を決定。 

決定した部屋の空間について、レイヤー2の天井チップをくりぬく(透明チップで上書きすればOK)。

次の空間へ。

こんな感じです。空間分割よりは分かりやすいしやりやすいと思います。
注意点としては、こちらも空間いっぱいいっぱいに部屋を生成せず、一マス空けておくこと。これも後で通路を作る際に必要な処理になります。


↑イメージ。ヘタクソだけど、外側のでかい四角形が空間で、内側の四角形が部屋。必ず一マス空けるように!
空けてないと通路を作るとき、通路と部屋の間の壁がなくなるおそれがある。

余談:長方形じゃなくてさらに複雑な形のダンジョンを作るには、この部屋空間をさらにひとつの空間とみたてて、その空間の中に、部屋が複雑な形になるように天井をくりぬけばいいらしい。自分は長方形で妥協してしまったので詳しいやり方はしりません。あしからず。
スポンサーサイト



ランダムダンジョン生成-空間分割

15/01/05改稿

さて。
別にこいつはローグライク必須の要素というわけでもないですが、いちおうランダムダンジョンの作り方なんてのも載せてみます。
といっても、別に面白くもない四角形の部屋&通路ダンジョンを生成するだけなので、たいしたことは書けないです。
そんなことより自然っぽい地形を生成したいよ~とかいう方は、自作ゲー『ワールドフロンティア』にて悪戦苦闘した記録があるので、そっちを見てみては。

不思議のダンジョンチックなダンジョン生成については、自分も他のサイトを参考にしたので、とりあえずはこちらを見てみるといいかと思われます。
ttp://www40.atwiki.jp/spellbound/pages/384.html

基本的なランダムダンジョンの生成手順は3つに分かれます。以下、この流れに沿って説明していきます。
1.空間分割
2.部屋生成
3.通路生成

1.空間分割
ここではまず、まっさらなマップをいくつかの空間に分割する処理を行います。
ここで分割した空間の中に、後で部屋を作ることになります。
手順はこんな感じ。

[ループ地点]
空間を二つに分割。空間の縦サイズ>横サイズのときは縦分割、逆なら横分割。これはどの分割においても一緒。分割線を入れるときは、分割によってできる空間が小さくなりすぎないように注意。

できた二つの空間の情報をデータベースに入力。左上の点の座標とか、右下の点の座標とか。

あらかじめ空間の最小縦サイズ、最小横サイズを決めておき、できた空間をさらに分割しても最小サイズ以下にならないときは、ループ地点に戻る。
どう分割してもどちらかが最小サイズ未満になってしまうときは、分割できないので次の空間に移動。

文字だと分かりづらいですが。。
絵で説明するとこんな感じです。


最初の何も分割のされてないマップ

一回分割した後の状態


分割した空間をさらに分割


さらに分割


これ以上分割ができなくなったら(=分割すると空間の最小サイズ未満になってしまうときは)次の空間の分割に移行


空間分割が完成した状態
この空間の中にひとつずつ部屋を生成する。

注意点としては、空間と空間の間を必ず1マス空けること!
後で通路を作る際に困ったことになってしまうので、空間と空間の間は必ず1マス空けるようにしましょう。
なお、空間の最小サイズについては余裕をもって設定するといいと思います。というのも、その空間の中にさらに部屋を作ることになるからです。部屋サイズも最低4×4くらいは欲しいので、空間サイズも最低6×6くらいは欲しいですね。
また、空間分割の際は、それぞれの空間の空間情報を保存するデータベースの並びを整えていくとのちのち便利です。

空間DB
1.空間A
2.空間B


とあるときに、空間Aを分割したら

空間DB
1.空間A
2.空間A'
3.空間B


と保存するようにすると後で通路を作る際に困らずに済みます。
Twitter
カテゴリ
最新コメント
月別アーカイブ
カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR