ランダムでダンジョンを自動作成する手法についてのスレです。
ローグタイプやシレンタイプのダンジョンや、街並みや地形など。
※過去スレ
ダンジョン自動生成
http://pc11.2ch.net/test/read.cgi/gamedev/1027084016/
関連サイトは>>2>>3
探検
【ダンジョン】 自動生成 2 【地形】
■ このスレッドは過去ログ倉庫に格納されています
2007/06/19(火) 12:21:35ID:oqLsw/ra
325名前は開発中のものです。
2009/08/05(水) 00:35:17ID:SND5sjgx いろんな方法があると思うけど
たとえば各マスが「部屋ID」のようなものを持ち
部屋IDが同じマスたちはすべて同じ部屋で
部屋IDがヌル(とか0とかNaNとか)なら通路とか
そういう方法もあるかもね
あるいは同じことだけどIDではなく部屋クラスのオブジェクトへの参照とか
それか逆に部屋クラスの方でその部屋に属するマスのリストを持ってもいい
あとはたとえば各マスに「北と同じ部屋か?」「西と同じ部屋か?」
を表す真偽値のプロパティを持たせるとかいう方法もあるかも
いずれにしても壁が壊れて等のイベントの際にはいちいち判断を入れて
意図通りになるように処理するしかないかと
多分そういうイベントの方が少ないケース(コード量的にも発生頻度的にも)
なのだろうから、一般的なケースが処理しやすくなるような方法にすれば
よいと思うよ
たとえば各マスが「部屋ID」のようなものを持ち
部屋IDが同じマスたちはすべて同じ部屋で
部屋IDがヌル(とか0とかNaNとか)なら通路とか
そういう方法もあるかもね
あるいは同じことだけどIDではなく部屋クラスのオブジェクトへの参照とか
それか逆に部屋クラスの方でその部屋に属するマスのリストを持ってもいい
あとはたとえば各マスに「北と同じ部屋か?」「西と同じ部屋か?」
を表す真偽値のプロパティを持たせるとかいう方法もあるかも
いずれにしても壁が壊れて等のイベントの際にはいちいち判断を入れて
意図通りになるように処理するしかないかと
多分そういうイベントの方が少ないケース(コード量的にも発生頻度的にも)
なのだろうから、一般的なケースが処理しやすくなるような方法にすれば
よいと思うよ
326名前は開発中のものです。
2009/08/05(水) 01:57:00ID:djmbzU5s >>324
俺が昔、ローグライクRPGを作ったときは、
「ダンジョンの大きさの2次元配列」と「部屋クラス」の両方を使ってた。
つるはし・大砲で壁を破壊したときは2次元配列の壁だったところを通路に変更するだけで、
部屋クラスのデータは変更しない。
(壁を壊したとき、そこは通路扱いで、部屋の一部にはならない)
大部屋の巻物を使ったときは、2次元配列を床で埋め尽くして、全部屋クラスを破棄し、
大部屋の示す部屋クラスを1つ作るというようにしていた。
部屋と部屋が繋がっても特になにも処理はしなかったが、問題はなかった。
ちなみに、2次元配列に入れるデータは「(部屋の)床」「通路」「壁」以外に
「壊せない壁」をダンジョンの外周部分に配置しておくと、つるはしでどんどん壁を
壊していって、配列の外に飛び出してしまうことを防げるので便利だった。
俺が昔、ローグライクRPGを作ったときは、
「ダンジョンの大きさの2次元配列」と「部屋クラス」の両方を使ってた。
つるはし・大砲で壁を破壊したときは2次元配列の壁だったところを通路に変更するだけで、
部屋クラスのデータは変更しない。
(壁を壊したとき、そこは通路扱いで、部屋の一部にはならない)
大部屋の巻物を使ったときは、2次元配列を床で埋め尽くして、全部屋クラスを破棄し、
大部屋の示す部屋クラスを1つ作るというようにしていた。
部屋と部屋が繋がっても特になにも処理はしなかったが、問題はなかった。
ちなみに、2次元配列に入れるデータは「(部屋の)床」「通路」「壁」以外に
「壊せない壁」をダンジョンの外周部分に配置しておくと、つるはしでどんどん壁を
壊していって、配列の外に飛び出してしまうことを防げるので便利だった。
327名前は開発中のものです。
2009/08/05(水) 05:40:23ID:8C+6rJYo >324
ちょっと前に作ったときは、部屋情報はマップデータとは別に部屋構造体を用意して、
マップ作成時に部屋データもいっしょに作成。
つるはしとか壁を破壊する系は実装しなかったけど、やるとしたら破壊した場所は
全部通路認定。これが一番楽。もし、破壊した場所も部屋認定したいなら、
そもそも長方形以外の形も扱える部屋情報が必要になるからね。
ちょっと前に作ったときは、部屋情報はマップデータとは別に部屋構造体を用意して、
マップ作成時に部屋データもいっしょに作成。
つるはしとか壁を破壊する系は実装しなかったけど、やるとしたら破壊した場所は
全部通路認定。これが一番楽。もし、破壊した場所も部屋認定したいなら、
そもそも長方形以外の形も扱える部屋情報が必要になるからね。
328名前は開発中のものです。
2009/08/05(水) 08:04:40ID:aEx2LxPn あんまりやったことないけど、シレンて矩形に広がらないと部屋認定されないんじゃ。
もちろんシレンに合わせる必要は無いけれども。
適当に思いついたことを書くと、部屋はそれぞれ番号を振ってマップにその番号で埋めておく
11111111
11111111
11111111
2222
2222
2222
穴が開く
11111111
11111111
11111111
1
2222
2222
2222
つながるとどちらかに帰依する
11111111
11111111
11111111
1
1111
1111
1111
もちろんシレンに合わせる必要は無いけれども。
適当に思いついたことを書くと、部屋はそれぞれ番号を振ってマップにその番号で埋めておく
11111111
11111111
11111111
2222
2222
2222
穴が開く
11111111
11111111
11111111
1
2222
2222
2222
つながるとどちらかに帰依する
11111111
11111111
11111111
1
1111
1111
1111
329名前は開発中のものです。
2009/08/05(水) 08:13:50ID:l8/hwzvv 俺が作ったときはつるはしは面倒臭いので仕様上除外したけど
部屋番号の情報は持たせたな
enum type
{
floor,
corridor,
wall,
}
struct cell
{
int blockNo;
int type;
}
cellで二次元配列作ったので
部屋を識別する所まではできたけど
部屋番号の情報は持たせたな
enum type
{
floor,
corridor,
wall,
}
struct cell
{
int blockNo;
int type;
}
cellで二次元配列作ったので
部屋を識別する所まではできたけど
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- フィンランド首相、「つり目」投稿問題で日本向けに「心からお詫び」 [どどん★]
- 日中関係改善は「下手をすると10年かかる」 トランプを全面信頼できない高市官邸の苦悩★4 [ぐれ★]
- 【赤坂サウナ火災】非常ベル電源「2年前から入れていない」、押した形跡も [ぐれ★]
- 【野球】WBC、録画放送含め地上波中継なし (ネットフリックス) ★2 [阿弥陀ヶ峰★]
- 牛丼チェーン店で5杯食べ終えて「支払えない」…詐欺容疑で逮捕の男「どうしても腹がすいて」 甲府 [蚤の市★]
- 【東京・赤坂の“個室サウナ店夫婦死亡火災”】 タオルがサウナストーンに触れたことで発火したか 警視庁 [ぐれ★]
- 【東京】サウナ室のドアノブが外れる→非常用ボタンの電源が2年入れられてない→事務所には従業員が不在 [696684471]
- 前澤友作「超富裕日本人2000名集めてパーティ開いて、意見出し合って国に要求するわ」 [237216734]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪
- 【速報】山上徹夜、明日の求刑で無期懲役へ [329329848]
- 名探偵津田🏡
- 【高市悲報】立憲小西、デマを流した国光がX垢を消し国民になんの説明もしない事にブチギレ💥国光の謝罪文を公開 [359965264]
