[過去ログ] ダンジョン自動生成 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
204(1): 04/06/14 21:06 ID:HxZhdP5q(13/19) AAS
連続投稿制限に引っかかって、ふてくされてた。
3x3の領域内に部屋と迷路を作ってから、迷路の部分隠しをしたあとは、
mix_random_rooms()で3x3の小領域の情報を10回ほどシャッフルしてるっぽい。
領域単位での入れ替え。
・・・すでに部屋とか迷路をdungeon[][]内に書き込んでるけど、
そんなことしていいのか?どこか読み違えてるかも。
というわけで、そろそろ通路の処理に入りそうなんだけど、ここからが面倒っすね。
とりあえずアミュレットは26階以降にでるっつーことで。
205(1): ぐぅ>腹ペコ ◆Mn5mzn8hAQ 04/06/14 21:29 ID:0lapHs9H(15/19) AAS
>>204
そうそう、mix_random_rooms()でしっちゃかめっちゃかと俺も悩んだw
でも冷静によむと、
mix_random_rooms()はrandom_roomsをシャッフルするだけで
肝心のroomsはいじられないので大丈夫だったりしる。
random_roomsはランダムに部屋選ぶのに参照しるだけの配列にゃり。
部屋同士の接続はこれまたアバウトにいうと
部屋の出入り口を向かい合わせにつくって(dirとrevに向きを設定)
通路を延ばして途中で向きかえて座標をあわせて再度通路をのばして
ドッキングしてるだけ
省2
206(1): 04/06/14 21:53 ID:MkSJwU7k(1) AAS
ソースに 日本語コメントつけてうぷ汁
207: ぐぅ@満腹 ◆Mn5mzn8hAQ 04/06/14 21:59 ID:0lapHs9H(16/19) AAS
>>206
なんかくれるか?
208: 04/06/14 22:10 ID:HxZhdP5q(14/19) AAS
>>205
なるほど、そっちだったか〜。
深読み&変数名勘違いのトラップひっかかってました。
209(1): ぐぅ@凍結 ◆Mn5mzn8hAQ 04/06/14 22:35 ID:0lapHs9H(17/19) AAS
隣り合っていても部屋と部屋を繋ぐ通路がなかったりしるのは
どのような理屈であろうか。
210: 04/06/14 23:18 ID:HxZhdP5q(15/19) AAS
>>200の続き。
部屋と部屋をつなぐ処理・・・は>>203ですが、ちょっと補足。
1つの小領域につき1度、右とその右、下とその下の4箇所の
小領域(にある部屋)に対して通路を作成する。
connect_rooms();
まず、向かい合わせになっているそれぞれの部屋の壁に対して、
ランダムな位置に扉を作成する。そこから通路を延ばす。
draw_simple_passage();
通路は2回曲がるように作成される。スタート地点の扉から
ランダムな長さまで直線をひいて、進行方向を変えて、そこからゴールの扉の
省4
211: 04/06/14 23:28 ID:HxZhdP5q(16/19) AAS
通路を作成したら、12%の確率で通路の一部を隠す。
迷路作成時に呼び出した、hide_boxed_passage()と同じ。
そうそう、小領域をまたぐ場合...つまり、>>200の図でいうと、0から2とか、
0から6へ通路を作成した場合には、その中間の小領域(1 or 3)には、
R_CROSSという部屋扱いになるけど・・・これが何を意味するのか、今はわからない。
もちろん、1と3に部屋があったら、通路は作成されない。
あとは、is_all_connected()とfill_out_level()を読んだらオシマイ。
ナゾというか、勘違いかもしれないけど、隠し扉ってなかったっけ?
あれっていつ作ってるんだろう?
212(1): ぐぅ@凍結 ◆Mn5mzn8hAQ 04/06/14 23:42 ID:0lapHs9H(18/19) AAS
R_CROSSは
R_ROOMでもR_MAZEでもR_NOTHINGでもないエリア(というか部屋)
connect_rooms()の最初の条件文ではじかれるエリア、
はやい話、通路を延ばせない場所でいいんでないかと。
十字路ってみかけないものな。
put_door()の最後の方の
if ((cur_level > 2) && rand_percent(HIDE_PERCENT)) {
dungeon[*row][*col] |= HIDDEN;
は隠しドアとは違うの?ちゃんと読んでないからわからんけど。
213: 04/06/14 23:46 ID:HxZhdP5q(17/19) AAS
通路を一本作成したら、全ての部屋がつながっているかを調べる。
is_all_connected();
9つの小領域分用意された、部屋訪問フラグをクリアする。同時に、部屋が
あるかどうかを調べて、あれば、その部屋の番号を覚えておく。(starting_room)
その部屋から訪問調査する。
visit_rooms(roomnum);
roomnum部屋の訪問フラグをオンにする。
roomnum部屋にある4つの扉に対して・・・
扉から接続されている別の部屋の扉を調べて、
その部屋に対してvisit_rooms()する。再帰呼び出しですよ。
省7
214: ぐぅ@氷解 ◆Mn5mzn8hAQ 04/06/14 23:51 ID:0lapHs9H(19/19) AAS
おおお、謎がほぼすべて解けた
ヽ(`Д´)ノ うぉ〜
あれ、部屋が通路になってしまう仕掛けはいったい・・
215: 04/06/14 23:51 ID:HxZhdP5q(18/19) AAS
>>212
隠し扉それです、ThanX!
>>209
その1 ... 隠し扉
その2 ... is_all_connected();が真の場合、通路作成のfor()ループをbreakしてます。
つまり、ぐるっとまわって別の部屋へつながっている場合、直通路は作成されないのだと思います。
216: 04/06/14 23:59 ID:HxZhdP5q(19/19) AAS
fill_out_level()ながーい!休憩。
217: ぐぅ@氷解 ◆Mn5mzn8hAQ 04/06/15 00:02 ID:f1MiYXar(1/2) AAS
make_room()内の
if ((rn != r1) && (rn != r2) && (rn != r3) && rand_percent(40)) {
goto END;
}
の処理、必須の3部屋でなければ40%の確率で
通路に変貌すると見た。つぅか既出だったっけかな・・
218(1): ID変わっちゃった 04/06/15 01:58 ID:aIwm2r1B(1) AAS
fill_out_level()はよくわからない。
部屋に扉がない場合(どこにもつながってない壁がある)、
行き止まりの通路を作成してる?
まぁ、ローグの部屋と通路の作成方法はこれでわかった、ということでいっかな。
このアルゴリズムのキモは“空間を3x3に分割する”ということに尽きますね。
これで部屋の重なりを防げるし、ある程度のばらつきを保証できるわけです。
219: ぐぅ@氷解 ◆Mn5mzn8hAQ 04/06/15 02:25 ID:f1MiYXar(2/2) AAS
>>218
ウンウン
おれっちも3X3が肝とおもふさ〜
あと、再帰して繋がりチェックしるやつ
あれないと全部の部屋がつながってしまうわけだけど
ランダムな部屋から通路つくるから絶妙に無駄な通路ができたりする。
必ずしも最低限の通路ではないちうとこもよくできてる。
まとめでもアップしようと思ったけど(カッタルイからw)やめて
このアルゴリズムの簡易版でも作ってアップしようかな。
ID変わっちゃったさんありがとう
省2
220: 04/06/15 16:40 ID:vSxhBobb(1) AAS
ローグのソース解析お疲れさんです
労をねぎらう意味で、
Delphianで人気の「Delphiゲームプログラミングのエッセンス」
からロジックを転載します。
フロアを3×5のブロックに分ける
1ブロックは、10×10のマス
部屋番号
□□□□□ 0〜4
□□■□□ 5〜9
□□□□□ 10〜14
省12
221(2): ぐぅ@夜更かし ◆Mn5mzn8hAQ 04/06/16 03:10 ID:wguEk+iT(1/4) AAS
このようなものを生成できるようになりました。
らしくなってるじゃろうか?
画像リンク[jpg]:namihei.zone.ne.jp
画像リンク[jpg]:namihei.zone.ne.jp
222(1): 04/06/16 06:49 ID:4vCvzbx3(1) AAS
>>221
おおっ、トルネコっぽい。グッド。
223(3): 04/06/16 17:06 ID:wxXigfIi(1) AAS
>>221
いい感じだね。
しかも、ローグのソースをもとにちょこっと拡張しました?
せっかく結果も出てきたことですし、
ここらで、ダンジョン自動生成のルールを決めたらどうでしょうか?
とりあえず、たたき台
1.「風来のシレン」を習い、1フロアの面積を50x30とする
2.1フロアの情報は、部屋・通路・壁の3種類として、出力を区別する
3.サンプル出力は、画像とし、2パターン以上提出する
意見等あればどうぞ。
上下前次1-新書関写板覧索設栞歴
あと 778 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.012s