[過去ログ]
ダンジョン自動生成 (1001レス)
ダンジョン自動生成 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
211: 名前は開発中のものです。 [sage] 04/06/14 23:28 ID:HxZhdP5q 通路を作成したら、12%の確率で通路の一部を隠す。 迷路作成時に呼び出した、hide_boxed_passage()と同じ。 そうそう、小領域をまたぐ場合...つまり、>>200の図でいうと、0から2とか、 0から6へ通路を作成した場合には、その中間の小領域(1 or 3)には、 R_CROSSという部屋扱いになるけど・・・これが何を意味するのか、今はわからない。 もちろん、1と3に部屋があったら、通路は作成されない。 あとは、is_all_connected()とfill_out_level()を読んだらオシマイ。 ナゾというか、勘違いかもしれないけど、隠し扉ってなかったっけ? あれっていつ作ってるんだろう? http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/211
212: ぐぅ@凍結 ◆Mn5mzn8hAQ [sage] 04/06/14 23:42 ID:0lapHs9H R_CROSSは R_ROOMでもR_MAZEでもR_NOTHINGでもないエリア(というか部屋) connect_rooms()の最初の条件文ではじかれるエリア、 はやい話、通路を延ばせない場所でいいんでないかと。 十字路ってみかけないものな。 put_door()の最後の方の if ((cur_level > 2) && rand_percent(HIDE_PERCENT)) { dungeon[*row][*col] |= HIDDEN; は隠しドアとは違うの?ちゃんと読んでないからわからんけど。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/212
213: 名前は開発中のものです。 [sage] 04/06/14 23:46 ID:HxZhdP5q 通路を一本作成したら、全ての部屋がつながっているかを調べる。 is_all_connected(); 9つの小領域分用意された、部屋訪問フラグをクリアする。同時に、部屋が あるかどうかを調べて、あれば、その部屋の番号を覚えておく。(starting_room) その部屋から訪問調査する。 visit_rooms(roomnum); roomnum部屋の訪問フラグをオンにする。 roomnum部屋にある4つの扉に対して・・・ 扉から接続されている別の部屋の扉を調べて、 その部屋に対してvisit_rooms()する。再帰呼び出しですよ。 ※先に書き忘れたけど、部屋に扉と通路を作成する時に、どこの部屋の 扉につながっているのかを記録してあるので、それを参照している。 また、一つの部屋には最大で4つの扉が設置される。上下左右の壁に一つずつ。 全部屋訪問フラグがONになっていれば、全部屋が接続されているとみなされる。 なぜか、 if ((rooms[i].is_room & (R_ROOM | R_MAZE)) && (!rooms_visited[i])) { 部屋だけでなく、迷路も部屋と同じ扱いになってる。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/213
214: ぐぅ@氷解 ◆Mn5mzn8hAQ [sage] 04/06/14 23:51 ID:0lapHs9H おおお、謎がほぼすべて解けた ヽ(`Д´)ノ うぉ〜 あれ、部屋が通路になってしまう仕掛けはいったい・・ http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/214
215: 名前は開発中のものです。 [sage] 04/06/14 23:51 ID:HxZhdP5q >>212 隠し扉それです、ThanX! >>209 その1 ... 隠し扉 その2 ... is_all_connected();が真の場合、通路作成のfor()ループをbreakしてます。 つまり、ぐるっとまわって別の部屋へつながっている場合、直通路は作成されないのだと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/215
216: 名前は開発中のものです。 [sage] 04/06/14 23:59 ID:HxZhdP5q fill_out_level()ながーい!休憩。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/216
217: ぐぅ@氷解 ◆Mn5mzn8hAQ [sage] 04/06/15 00:02 ID:f1MiYXar make_room()内の if ((rn != r1) && (rn != r2) && (rn != r3) && rand_percent(40)) { goto END; } の処理、必須の3部屋でなければ40%の確率で 通路に変貌すると見た。つぅか既出だったっけかな・・ http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/217
218: ID変わっちゃった [sage] 04/06/15 01:58 ID:aIwm2r1B fill_out_level()はよくわからない。 部屋に扉がない場合(どこにもつながってない壁がある)、 行き止まりの通路を作成してる? まぁ、ローグの部屋と通路の作成方法はこれでわかった、ということでいっかな。 このアルゴリズムのキモは“空間を3x3に分割する”ということに尽きますね。 これで部屋の重なりを防げるし、ある程度のばらつきを保証できるわけです。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/218
219: ぐぅ@氷解 ◆Mn5mzn8hAQ [sage] 04/06/15 02:25 ID:f1MiYXar >>218 ウンウン おれっちも3X3が肝とおもふさ〜 あと、再帰して繋がりチェックしるやつ あれないと全部の部屋がつながってしまうわけだけど ランダムな部屋から通路つくるから絶妙に無駄な通路ができたりする。 必ずしも最低限の通路ではないちうとこもよくできてる。 まとめでもアップしようと思ったけど(カッタルイからw)やめて このアルゴリズムの簡易版でも作ってアップしようかな。 ID変わっちゃったさんありがとう おかげでかなりスムーズに解析できた。 というわけで、とりあえずどもおつかれさました〜 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/219
220: 名前は開発中のものです。 [sage] 04/06/15 16:40 ID:vSxhBobb ローグのソース解析お疲れさんです 労をねぎらう意味で、 Delphianで人気の「Delphiゲームプログラミングのエッセンス」 からロジックを転載します。 フロアを3×5のブロックに分ける 1ブロックは、10×10のマス 部屋番号 □□□□□ 0〜4 □□■□□ 5〜9 □□□□□ 10〜14 部屋の数は、5〜10として、最低3個は偶数の部屋番号に配置する 1ブロックには、最大9×9マスの部屋が作られる。 (1マス分は通路に充てる。) 1ブロックには、必ず部屋か通路が存在する。ただし■は何も無し。 2と12(■の上下にあるブロック)はどちらかを必ず両隣とつなぐ。 2と12を隔てて左右のフロアで各6ブロック毎に部屋や通路を作成する。 そのとき通路を繋ぐロジックは、絶対に繋がっていない部屋を作らないこと。 これが基本。 3×3のブロックに分けるロジックよりは、ダンジョンっぽい造りになると思う 後は、部屋を迷路状にしてしまうとか、ブロックをまたいだ中部屋をつくるとか、 隣り合わせのブロックに向かう通路を必ず作るとか(円形のフロアになる)、 適当に部屋や通路を加工していけば面白くなるかもね。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/220
221: ぐぅ@夜更かし ◆Mn5mzn8hAQ [] 04/06/16 03:10 ID:wguEk+iT このようなものを生成できるようになりました。 らしくなってるじゃろうか? http://namihei.zone.ne.jp/upup/up/12992.jpg http://namihei.zone.ne.jp/upup/up/12991.jpg http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/221
222: 名前は開発中のものです。 [sage] 04/06/16 06:49 ID:4vCvzbx3 >>221 おおっ、トルネコっぽい。グッド。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/222
223: 名前は開発中のものです。 [sage] 04/06/16 17:06 ID:wxXigfIi >>221 いい感じだね。 しかも、ローグのソースをもとにちょこっと拡張しました? せっかく結果も出てきたことですし、 ここらで、ダンジョン自動生成のルールを決めたらどうでしょうか? とりあえず、たたき台 1.「風来のシレン」を習い、1フロアの面積を50x30とする 2.1フロアの情報は、部屋・通路・壁の3種類として、出力を区別する 3.サンプル出力は、画像とし、2パターン以上提出する 意見等あればどうぞ。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/223
224: 名前は開発中のものです。 [sage] 04/06/16 18:17 ID:E0t6wJPT いや、技術的な話は、もう特にないんだよ。 ここまでくるとあとはゲームバランスになってしまう。 1フロアに部屋をいくつ配置するのかっていうのは、 腹の減り具合とか、敵の強さとかに依存するし。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/224
225: ぐぅ@腹ペコ ◆Mn5mzn8hAQ [] 04/06/16 18:30 ID:wguEk+iT >>222 さんくすこ 究極的ダンジョン生成エンジンを開発して それはもう愉快なローグ系携帯アプリを作るのが夢ですの。 もちろん主人公はカシワモーチですわ。 >>223 現状1フロアは64x48。 4x3のエリアにわけて生成。 部屋を配置して通路でつないでるだけ。 ここまできて気づいたのだが 俺っちには今のところ 「どんなマップを生成したいのか」という具体的なビジョンがない。 究極的てなんやねん、て話。 夕飯買いに逝ってきます。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/225
226: 名前は開発中のものです。 [sage] 04/06/16 19:21 ID:7o6/4sW2 ローグ系アルゴリズムが落ち着いたところでこんなものを放り出してみるテスト ttp://www.aarg.net/%7Eminam/dungeon.cgi http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/226
227: ぐぅ@アイスクリーム ◆Mn5mzn8hAQ [sage] 04/06/16 19:31 ID:wguEk+iT >>226 むぅ それすごいね。 それで生成したマップで内容がシレンだったら面白いのだろうか。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/227
228: 名前は開発中のものです。 [sage] 04/06/16 19:37 ID:7o6/4sW2 もともとD&D用だからシレンよりWizとか3D系の方が相性がいいだろう。 シレンとかはフィールドを巡るって感じだけどWizは部屋を漁るって感じだから。 http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/228
229: 名前は開発中のものです。 [sage] 04/06/16 19:52 ID:umWV/n6X うむ、それみると、自動生成でWiz作れそうだね よさげだ http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/229
230: 名前は開発中のものです。 [sage] 04/06/16 20:07 ID:6hhIabkQ ttp://www.vector.co.jp/soft/win95/game/se261865.html http://mevius.5ch.net/test/read.cgi/gamedev/1027084016/230
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 771 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.009s