ランダムダンジョン生成―部屋生成
今まで机上の概念的な話ばかりで頭が痛かったですが、ようやく画面処理にも入っていきます。
部屋の生成です。
不思議のダンジョンシリーズではなんだか複雑な形の部屋もありますが、残念ながら自分にはそこまで処理するだけの能力がないので、とりあえず長方形の部屋を作ることにします。
が、その前にやっておくべきことがひとつ。マップをすべて床と天井で埋め尽くしてしまいます。
ウディタの場合は、レイヤー1を床チップで敷き詰め、レイヤー2を天井チップで埋め尽くすといい感じです。
あらかじめ天井で埋め尽くされたフロアから、天井をくりぬいてダンジョンを生成するイメージですね。
さて、では部屋の生成手順。
空間分割の情報を保存してある空間DBを参照。空間の起点(左上)となるXY、終点(右下)となるXY座標を取得。
↓
あらかじめ部屋の最小縦サイズ、最小横サイズを決めておき、部屋のサイズがそれ以下にならないように空間内に作る部屋の座標(起点と終点)を決定。
↓
決定した部屋の空間について、レイヤー2の天井チップをくりぬく(透明チップで上書きすればOK)。
↓
次の空間へ。
こんな感じです。空間分割よりは分かりやすいしやりやすいと思います。
注意点としては、こちらも空間いっぱいいっぱいに部屋を生成せず、一マス空けておくこと。これも後で通路を作る際に必要な処理になります。

↑イメージ。ヘタクソだけど、外側のでかい四角形が空間で、内側の四角形が部屋。必ず一マス空けるように!
空けてないと通路を作るとき、通路と部屋の間の壁がなくなるおそれがある。
余談:長方形じゃなくてさらに複雑な形のダンジョンを作るには、この部屋空間をさらにひとつの空間とみたてて、その空間の中に、部屋が複雑な形になるように天井をくりぬけばいいらしい。自分は長方形で妥協してしまったので詳しいやり方はしりません。あしからず。
部屋の生成です。
不思議のダンジョンシリーズではなんだか複雑な形の部屋もありますが、残念ながら自分にはそこまで処理するだけの能力がないので、とりあえず長方形の部屋を作ることにします。
が、その前にやっておくべきことがひとつ。マップをすべて床と天井で埋め尽くしてしまいます。
ウディタの場合は、レイヤー1を床チップで敷き詰め、レイヤー2を天井チップで埋め尽くすといい感じです。
あらかじめ天井で埋め尽くされたフロアから、天井をくりぬいてダンジョンを生成するイメージですね。
さて、では部屋の生成手順。
空間分割の情報を保存してある空間DBを参照。空間の起点(左上)となるXY、終点(右下)となるXY座標を取得。
↓
あらかじめ部屋の最小縦サイズ、最小横サイズを決めておき、部屋のサイズがそれ以下にならないように空間内に作る部屋の座標(起点と終点)を決定。
↓
決定した部屋の空間について、レイヤー2の天井チップをくりぬく(透明チップで上書きすればOK)。
↓
次の空間へ。
こんな感じです。空間分割よりは分かりやすいしやりやすいと思います。
注意点としては、こちらも空間いっぱいいっぱいに部屋を生成せず、一マス空けておくこと。これも後で通路を作る際に必要な処理になります。

↑イメージ。ヘタクソだけど、外側のでかい四角形が空間で、内側の四角形が部屋。必ず一マス空けるように!
空けてないと通路を作るとき、通路と部屋の間の壁がなくなるおそれがある。
余談:長方形じゃなくてさらに複雑な形のダンジョンを作るには、この部屋空間をさらにひとつの空間とみたてて、その空間の中に、部屋が複雑な形になるように天井をくりぬけばいいらしい。自分は長方形で妥協してしまったので詳しいやり方はしりません。あしからず。
スポンサーサイト