トップページgamedev
1001コメント335KB

ダンジョン自動生成

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。02/07/19 22:06ID:o6Bp.wT2
「風来のシレン」みたいにランダムでダンジョンを作るのって
どうやるんですか
0180名前は開発中のものです。04/06/14 11:25ID:HxZhdP5q
思っていたより厄介なソースだなぁ、コメント少ないし。

get_rand(x, y);
xからyまでの範囲の乱数値を得る

例)
get_rand(5, 2);
5から7までの間の乱数値
0181名前は開発中のものです。04/06/14 11:26ID:HxZhdP5q
coin_toss();
0か1の値をランダムに返す
0182 ◆Mn5mzn8hAQ 04/06/14 12:04ID:0lapHs9H
>>180
なるほど、ここで判明した関数かきだして
リファレンスみたいにすれば
みんなで読めるね

と、get_randの説明がおかしいある・・

get_rand(5, 2)なら2〜5の乱数を返す
get_rand(5, 7)なら5〜7の乱数を返す だわいね

乱数に関する関数はrandom.cに入っております。

>>178
最短経路探索、お、と思ったけどローグのソースはなんか違う気がしる

>>179
他のしとは知らんけど俺はまだ読むばかりなり。アンタも読むなり。
01832時間しか寝てませんよ? ◆Mn5mzn8hAQ 04/06/14 12:19ID:0lapHs9H
画面ORマップまわりの重要な定数(Rogue.h)

#define ROW1 7
#define ROW2 15
#define DROWS 24/*縦の最大*/

#define COL1 26
#define COL2 52
#define DCOLS 80/*横の最大*/

※〜1、〜2は
マップを3x3の領域にきりわける際に利用している
01842時間しか寝てませんよ? ◆Mn5mzn8hAQ 04/06/14 12:54ID:0lapHs9H
●rm = room・・・部屋を表現する構造体。
Y2、X2、Y1、X1、door[4], is_room で構成される
is_roomはR_NOTHIN、R_ROOM、R_MAZE、R_CROSSなどの定数が入り、
部屋の種類をあらわす。

●door = dr・・・ドアに関する情報をつめこむ構造体
ペアになる部屋番号、ペアのドアのY、ペアのドアのX、X、Yで構成される

一つの部屋は最大4つのドアをもっていて
しかもペアになる部屋のドアの座標ももっており
かつ部屋ではなく通路になったりもする、と。
0185名前は開発中のものです。04/06/14 13:08ID:HxZhdP5q
>>183
まだ読みかけだから間違っているかもしれないけど補足すると・・・

部屋の最大数は9で、80x24の空間をを9個に分割して
部屋を配置しているっぽい。

例外はBIG_ROOM。空間内に一部屋だけという状態。部屋のサイズは画面内でランダム。
これはゲーム中、いずれかの階に一度だけ かつ 1/100の確率で出現する。
0186名前は開発中のものです。04/06/14 13:09ID:HxZhdP5q
>>185
あ、0lapHs9H氏の書き込みみると、9個じゃなくて8個なのかな。
01872時間しか寝てませんよ? ◆Mn5mzn8hAQ 04/06/14 13:17ID:0lapHs9H
>>185
あ、ほんとだ部屋の数9だね
for WonderWitchのソースはなぜか8ですた

#define MAXROOMS 9(rogue.h)

100分の1の確率なのか、なーる
01882時間しか寝てませんよ? ◆Mn5mzn8hAQ 04/06/14 13:24ID:0lapHs9H
ぶっちゃけてしまうが
風来のシレン月影村の怪物インターネット版の体験版
を画面キャプチャしながら4階層遊んでみたが
今わかっている時点だけであきらかにRogueと
生成方法が違いますケドw
0189名前は開発中のものです。04/06/14 14:21ID:CyVM64I2
rogueのソース読むのもいいけど自分で書いちゃった方が早いし面白いんじゃないかなあ
0190名前は開発中のものです。04/06/14 16:11ID:5+/Otxjs
そうして、他人のソースを読まずに突き進んできた奴があwqせdrftgyふじこlp;
0191名前は開発中のものです。04/06/14 17:06ID:rnOPv/om
せっかくだから斬新な自動生成段ジョンを開発しようぜ
0192名前は開発中のものです。04/06/14 19:04ID:HxZhdP5q
ダラダラと別のことしながらローグIIのソース読んでる。
部屋生成について補足。make_level()から呼び出される、make_room()は以下の通り。

画面を3x3に分割して、その分割された領域内に矩形を作ることで部屋にしている。
サイズはランダムで、領域内の左上からの位置もランダム。この時、他の領域には
踏み入らないように計算しているので、部屋の重なりをチェックする必要はない。

必ず9個の部屋があるわけでない。条件によって部屋のあるなしが決められる。
条件は単なるランダムではなく、ある程度の法則性がある。
これはゲームバランス的なものだと思うので詳しい説明は省略。
1/2の確率で縦に3部屋並ぶ構成になる・1/2の確率で3種類の部屋の並びになる、
一つのフロアには、少なくとも3つの部屋が生成される、とか。

部屋のあるなしを決定したら、フロアマップに部屋の構成を記録すると同時に、
部屋の位置やサイズを別に記憶しておく。
0193名前は開発中のものです。04/06/14 19:18ID:HxZhdP5q
おっと、一部読み間違えた。

>部屋の位置やサイズを別に記憶しておく。
サイズではなく、左上の座標と右下の座標っぽい。

あと、条件チェックで部屋がないと判断されても、先に計算した部屋の位置・・・
つまり、小領域内での左上と右下の座標値を保存している。どうやら通路?を
生成する時に利用しているっぽい。
0194ぐぅ ◆Mn5mzn8hAQ 04/06/14 19:40ID:0lapHs9H
だいたいわかったんだが、
わからないのが
ペアの部屋を選定するコード。

add_maze/make_maze。
add_mazeは>>193の「部屋ではなく通路にする」場合の処理で
座標を保存して範囲を限定することで
どこまでも無駄に通路を延ばしてしまうことを避け
るためと読んだ。
月曜日は面白いテレビ番組がなくて退屈である。
0195名前は開発中のものです。04/06/14 19:42ID:HxZhdP5q
部屋を作ったら、次は迷路の作成らしい。通路ではない。

9個の小領域内に、ある条件を満たしたら、迷路を作る。
基点は先の部屋を作成した時に保存した左上の位置から、掘り進む。
1回(1文字)掘るごとに1/3の確率で進行方向を変える。
掘り進む方向+1と、その左右方向(画面の左右ではなく進行方向に対して)、
それから、掘り進む方向+2を調べて、すでに掘った通路があったら迷路作成終了。
掘る範囲は先にランダムに決定した部屋サイズ内なので、小領域を出ることはない。

迷路が生成される条件はゲームバランス的なので詳しい説明は略。
最初の階では絶対に迷路がない。16階以降は階を増やすごとに迷路が作られる確率が高まる。
迷路は1つの階につき1つっぽい。
0196名前は開発中のものです。04/06/14 19:45ID:HxZhdP5q
>>195は、make_maze()の処理内容です。
0197名前は開発中のものです。04/06/14 19:49ID:HxZhdP5q
>>195
また読み違えた。

> 掘る範囲は先にランダムに決定した部屋サイズ内なので、小領域を出ることはない。

掘る範囲は少領域内。
基点が、部屋サイズ内。
0198ぐぅ ◆Mn5mzn8hAQ 04/06/14 19:52ID:0lapHs9H
ははぁなるほど。
するってぇと通路への変更は別のコードか。
0199名前は開発中のものです。04/06/14 19:57ID:HxZhdP5q
>>198
関数名だけみると、通路&ドア作成は、connect_rooms()内っぽいですよ。
0200名前は開発中のものです。04/06/14 20:12ID:HxZhdP5q
迷路を作ったら、hide_boxed_passage()を実行してる。

処理内容は、作った迷路をところどころHIDDEN属性にする。
つまり、先に迷路を掘ってから迷路の一部をHIDDEN化してる。
このルーチンは、迷路だけでなく、通路作成時にも呼び出されてる。

隠し処理は3階以降にしか発生しない。あとはゲームバランス的な条件で。
0201名前は開発中のものです。04/06/14 20:14ID:HxZhdP5q
というわけで、add_mazes()もおしまい。

>>197は間違いで、やっぱり掘る領域は部屋サイズだったけど、まぁいいや。
0202ぐぅ ◆Mn5mzn8hAQ 04/06/14 20:16ID:0lapHs9H
>>199
ああ、通常の部屋同士の通路掘りはそれなんだけど、
229行で部屋でも迷路でもないものははじかれるから
それ以外に部屋を通路にするロジックがあるのではないかと
おもて。

R_CROSSという定数がアヤシイ・・
fill_out_level()とfill_it()がアヤシイ・・
とかおもてました。
最後に調整してるんかな、とか。
でもなんか違う気もするし・・
まぁ割と瑣末な部分なので
この時点で突っ込まないでもいいのかもしれんが。
0203ぐぅ>腹ペコ ◆Mn5mzn8hAQ 04/06/14 20:29ID:0lapHs9H
>>200
ほほぅ。そうなんだ。ソース読むの早いなぁ。

部屋同士を接続するアバウトなしくみの見当ついた。
012
345
678
とわかれているエリアで
ランダムに部屋を選んで、(ここでは仮に0とすると)
1,2,3,6のエリアの部屋に接続に行く。
選んだ部屋が4だったとすると5と7に接続にいく。
実は6にも接続に行ってしまうが、
connect_roomsで実際に接続する際、行か列のいずれかがあっていないと
処理を終了するので結局6には接続しない。
これをランダムな順番で0〜7について行う(8はイラン)
つまり、
右、さらに右、下、さらに下の4箇所に接続に行く。
非常にアバウトだが、
これが接続先選定のアルゴリズムであった。タブンネw
夕飯買ってきてそれからそれからもうちっと読んでみます。
0204名前は開発中のものです。04/06/14 21:06ID:HxZhdP5q
連続投稿制限に引っかかって、ふてくされてた。

3x3の領域内に部屋と迷路を作ってから、迷路の部分隠しをしたあとは、
mix_random_rooms()で3x3の小領域の情報を10回ほどシャッフルしてるっぽい。
領域単位での入れ替え。

・・・すでに部屋とか迷路をdungeon[][]内に書き込んでるけど、
そんなことしていいのか?どこか読み違えてるかも。

というわけで、そろそろ通路の処理に入りそうなんだけど、ここからが面倒っすね。
とりあえずアミュレットは26階以降にでるっつーことで。
0205ぐぅ>腹ペコ ◆Mn5mzn8hAQ 04/06/14 21:29ID:0lapHs9H
>>204
そうそう、mix_random_rooms()でしっちゃかめっちゃかと俺も悩んだw
でも冷静によむと、
mix_random_rooms()はrandom_roomsをシャッフルするだけで
肝心のroomsはいじられないので大丈夫だったりしる。
random_roomsはランダムに部屋選ぶのに参照しるだけの配列にゃり。

部屋同士の接続はこれまたアバウトにいうと
部屋の出入り口を向かい合わせにつくって(dirとrevに向きを設定)
通路を延ばして途中で向きかえて座標をあわせて再度通路をのばして
ドッキングしてるだけ

というか、細かい話抜きにしると
これでほぼ全容はわかったことになるんだなぁ。
0206名前は開発中のものです。04/06/14 21:53ID:MkSJwU7k
ソースに 日本語コメントつけてうぷ汁
0207ぐぅ@満腹 ◆Mn5mzn8hAQ 04/06/14 21:59ID:0lapHs9H
>>206
なんかくれるか?
0208名前は開発中のものです。04/06/14 22:10ID:HxZhdP5q
>>205
なるほど、そっちだったか〜。
深読み&変数名勘違いのトラップひっかかってました。
0209ぐぅ@凍結 ◆Mn5mzn8hAQ 04/06/14 22:35ID:0lapHs9H
隣り合っていても部屋と部屋を繋ぐ通路がなかったりしるのは
どのような理屈であろうか。
0210名前は開発中のものです。04/06/14 23:18ID:HxZhdP5q
>>200の続き。
部屋と部屋をつなぐ処理・・・は>>203ですが、ちょっと補足。

1つの小領域につき1度、右とその右、下とその下の4箇所の
小領域(にある部屋)に対して通路を作成する。

connect_rooms();
まず、向かい合わせになっているそれぞれの部屋の壁に対して、
ランダムな位置に扉を作成する。そこから通路を延ばす。

draw_simple_passage();
通路は2回曲がるように作成される。スタート地点の扉から
ランダムな長さまで直線をひいて、進行方向を変えて、そこからゴールの扉の
縦座標(or横座標)まで直線をひいて、進行方向を扉の方にして、
そこからゴールの扉まで直線をひくだけ。進行方向を変えるとかいうのは90度向きを...
とかではなく、部屋の位置関係が上下であれば、下にひいて、右か左にひいて、また下ひく
という、ただの条件分岐と線をひくためのfor()ループ三回。
0211名前は開発中のものです。04/06/14 23:28ID:HxZhdP5q
通路を作成したら、12%の確率で通路の一部を隠す。
迷路作成時に呼び出した、hide_boxed_passage()と同じ。
そうそう、小領域をまたぐ場合...つまり、>>200の図でいうと、0から2とか、
0から6へ通路を作成した場合には、その中間の小領域(1 or 3)には、
R_CROSSという部屋扱いになるけど・・・これが何を意味するのか、今はわからない。
もちろん、1と3に部屋があったら、通路は作成されない。
あとは、is_all_connected()とfill_out_level()を読んだらオシマイ。


ナゾというか、勘違いかもしれないけど、隠し扉ってなかったっけ?
あれっていつ作ってるんだろう?
0212ぐぅ@凍結 ◆Mn5mzn8hAQ 04/06/14 23:42ID: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;
は隠しドアとは違うの?ちゃんと読んでないからわからんけど。
0213名前は開発中のものです。04/06/14 23:46ID: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])) {
部屋だけでなく、迷路も部屋と同じ扱いになってる。
0214ぐぅ@氷解 ◆Mn5mzn8hAQ 04/06/14 23:51ID:0lapHs9H
おおお、謎がほぼすべて解けた
ヽ(`Д´)ノ うぉ〜

あれ、部屋が通路になってしまう仕掛けはいったい・・
0215名前は開発中のものです。04/06/14 23:51ID:HxZhdP5q
>>212
隠し扉それです、ThanX!

>>209
その1 ... 隠し扉
その2 ... is_all_connected();が真の場合、通路作成のfor()ループをbreakしてます。
つまり、ぐるっとまわって別の部屋へつながっている場合、直通路は作成されないのだと思います。
0216名前は開発中のものです。04/06/14 23:59ID:HxZhdP5q
fill_out_level()ながーい!休憩。
0217ぐぅ@氷解 ◆Mn5mzn8hAQ 04/06/15 00:02ID:f1MiYXar
make_room()内の
if ((rn != r1) && (rn != r2) && (rn != r3) && rand_percent(40)) {
goto END;
}
の処理、必須の3部屋でなければ40%の確率で
通路に変貌すると見た。つぅか既出だったっけかな・・
0218ID変わっちゃった04/06/15 01:58ID:aIwm2r1B
fill_out_level()はよくわからない。
部屋に扉がない場合(どこにもつながってない壁がある)、
行き止まりの通路を作成してる?
まぁ、ローグの部屋と通路の作成方法はこれでわかった、ということでいっかな。

このアルゴリズムのキモは“空間を3x3に分割する”ということに尽きますね。
これで部屋の重なりを防げるし、ある程度のばらつきを保証できるわけです。
0219ぐぅ@氷解 ◆Mn5mzn8hAQ 04/06/15 02:25ID:f1MiYXar
>>218
ウンウン
おれっちも3X3が肝とおもふさ〜
あと、再帰して繋がりチェックしるやつ
あれないと全部の部屋がつながってしまうわけだけど
ランダムな部屋から通路つくるから絶妙に無駄な通路ができたりする。
必ずしも最低限の通路ではないちうとこもよくできてる。

まとめでもアップしようと思ったけど(カッタルイからw)やめて
このアルゴリズムの簡易版でも作ってアップしようかな。

ID変わっちゃったさんありがとう
おかげでかなりスムーズに解析できた。
というわけで、とりあえずどもおつかれさました〜
0220名前は開発中のものです。04/06/15 16:40ID: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のブロックに分けるロジックよりは、ダンジョンっぽい造りになると思う
後は、部屋を迷路状にしてしまうとか、ブロックをまたいだ中部屋をつくるとか、
隣り合わせのブロックに向かう通路を必ず作るとか(円形のフロアになる)、
適当に部屋や通路を加工していけば面白くなるかもね。
0221ぐぅ@夜更かし ◆Mn5mzn8hAQ 04/06/16 03:10ID:wguEk+iT
このようなものを生成できるようになりました。
らしくなってるじゃろうか?

http://namihei.zone.ne.jp/upup/up/12992.jpg
http://namihei.zone.ne.jp/upup/up/12991.jpg

0222名前は開発中のものです。04/06/16 06:49ID:4vCvzbx3
>>221
おおっ、トルネコっぽい。グッド。
0223名前は開発中のものです。04/06/16 17:06ID:wxXigfIi
>>221
いい感じだね。
しかも、ローグのソースをもとにちょこっと拡張しました?

せっかく結果も出てきたことですし、
ここらで、ダンジョン自動生成のルールを決めたらどうでしょうか?
とりあえず、たたき台
1.「風来のシレン」を習い、1フロアの面積を50x30とする
2.1フロアの情報は、部屋・通路・壁の3種類として、出力を区別する
3.サンプル出力は、画像とし、2パターン以上提出する

意見等あればどうぞ。
0224名前は開発中のものです。04/06/16 18:17ID:E0t6wJPT
いや、技術的な話は、もう特にないんだよ。
ここまでくるとあとはゲームバランスになってしまう。
1フロアに部屋をいくつ配置するのかっていうのは、
腹の減り具合とか、敵の強さとかに依存するし。
0225ぐぅ@腹ペコ ◆Mn5mzn8hAQ 04/06/16 18:30ID:wguEk+iT
>>222
さんくすこ
究極的ダンジョン生成エンジンを開発して
それはもう愉快なローグ系携帯アプリを作るのが夢ですの。
もちろん主人公はカシワモーチですわ。

>>223
現状1フロアは64x48。
4x3のエリアにわけて生成。
部屋を配置して通路でつないでるだけ。

ここまできて気づいたのだが
俺っちには今のところ
「どんなマップを生成したいのか」という具体的なビジョンがない。
究極的てなんやねん、て話。
夕飯買いに逝ってきます。
0226名前は開発中のものです。04/06/16 19:21ID:7o6/4sW2
ローグ系アルゴリズムが落ち着いたところでこんなものを放り出してみるテスト
ttp://www.aarg.net/%7Eminam/dungeon.cgi
0227ぐぅ@アイスクリーム ◆Mn5mzn8hAQ 04/06/16 19:31ID:wguEk+iT
>>226
むぅ
それすごいね。
それで生成したマップで内容がシレンだったら面白いのだろうか。
0228名前は開発中のものです。04/06/16 19:37ID:7o6/4sW2
もともとD&D用だからシレンよりWizとか3D系の方が相性がいいだろう。
シレンとかはフィールドを巡るって感じだけどWizは部屋を漁るって感じだから。
0229名前は開発中のものです。04/06/16 19:52ID:umWV/n6X
うむ、それみると、自動生成でWiz作れそうだね
よさげだ
0230名前は開発中のものです。04/06/16 20:07ID:6hhIabkQ
ttp://www.vector.co.jp/soft/win95/game/se261865.html
0231ぐぅ@満腹 ◆Mn5mzn8hAQ 04/06/16 20:24ID:wguEk+iT
そうか自動生成でウィザードリ〜。
なるほど・・・
0232名前は開発中のものです。04/06/16 21:20ID:MyHIRJr2
自動生成でWizといったらヘルドアか
RPGツクールだけど
023322304/06/17 09:19ID:gyW9IQUR
>>225
>現状1フロアは64x48。
だったか、スマソ 適当に書いたのが悪かった

ただ、ここは自動生成スレだし、いろんなロジックを考えるのは無駄じゃないと思うんだが・・・
シレンにしろ、明らかにひとつのロジックで書かれていないでしょ?
まぁ、いいけど( ゚Д゚)y─┛~~
0234ぐぅ@D言語研究中 ◆Mn5mzn8hAQ 04/06/17 14:17ID:loWtexz3
>>233
なんで謝ってるのかわかんないジョ
俺もいろんなロジックを考えるのは無駄じゃないと思うジョ
0235名前は開発中のものです。04/06/17 17:10ID:ItiRVkb7
ローグ系のダンジョン自動生成だったら作ったことがある。実際やるかどうかはともかく考えてみる
ブロック単位で生成させるなら三次元のダンジョンも応用で出来そう
ただ完全にベクターというか、アリの巣のようなダンジョンを作るのはもうどうやったらいいのかわからん
023622304/06/17 18:09ID:gyW9IQUR
>>234
あ、うむ、読み返してみるとなんか変だ。
議論ばっかじゃあれなんで、漏れもなんか造ってみる
0237ぐぅ@裸ネクタイ ◆Mn5mzn8hAQ 04/06/18 18:00ID:q/zHUwKW
シレンにならって
@通路をなるべくグネグネしない
という方針で
マップ生成アルゴリズムに手を加えてみますた。
意見きかせてくださいまし
Javaアプレットで、クリックするたびに新しいマップを生成しる。
http://namihei.zone.ne.jp/upup/up/13101.lzh
0238ぐぅ@裸ネクタイ ◆Mn5mzn8hAQ 04/06/18 18:01ID:q/zHUwKW
@と書いてあるのにAがないのは気のせい( ´_ゝ`)
0239名前は開発中のものです。 04/06/18 19:26ID:1IDEdqU+
>>1

それならツクール2003で作れ
ダンジョン自動作成機能あるぞw
0240名前は開発中のものです。04/06/18 19:56ID:oZgvjvN9
>>239
物事の仕組みがどうなっているかを知ろうとしない奴にはプログラミングの素質はない。一生ツクールやってろ。
0241名前は開発中のものです。04/06/18 20:22ID:A6zOKkuB
>>237
おーすげー。

けど、「ローカを極力直線的にする」という方針のせいで
「同じようなマップばかり」感が出来てしまっている気もしまつ
0242名前は開発中のものです。04/06/18 22:10ID:Gazkyfw7
そういやトルネコ3では長方形以外の小部屋も生成されてたな
角が丸くなってるのとか

 □□□□
 □□□□
   □□
0243ぐぅ@裸エプロン ◆Mn5mzn8hAQ 04/06/18 23:35ID:q/zHUwKW
>>241
>「同じようなマップばかり」感が・・
了解。
それは俺っちも感じてたので現在調整中。

>>242
なるほど部屋自体もバリエーションがあると・・
それはあまり考えてなかったカモ。
あとで考えてみる。

マップ生成のイメージができあがったので
もう一息で完成しる予定。
0244名前は開発中のものです。04/06/19 01:47ID:eD4/Os/T
こういう自動生成型のダンジョンは、ローグ系以外にも使っていきたいね
でも具体的な使い方が思いつかない orz
0245ぐぅ@夜這い中 ◆Mn5mzn8hAQ 04/06/19 02:59ID:YWlxQVDJ
>>244
生成アルゴリズム学習の効能を考えてみた。

●うぃざ〜どり〜タイプ(>>229-230参照)
●Quakeなどの3Dアクションゲームのステージ
●各種ゲームの一場面にスパイスとして
●パズルゲームとして
●電流イライラ棒のステージとして(゚Д゚)ハァ?
●追いかけっこ、レースゲームなど
ステージを巡回することに意味があるゲームすべて

使えそうな場面てイッパイありそうだね。ららら。
0246名前は開発中のものです。04/06/19 09:16ID:VrZX8wM9
ランダムなカルドセプトなんか面白そうだ
0247名前は開発中のものです。04/06/19 16:54ID:TP5uiroQ
普通のRPGでやられるとどこ行っても変わり映えしないで飽きるだろう
0248名前は開発中のものです。04/06/19 20:27ID:zNSAKAYY
ギリギリのバランスにしないと、単に面倒なだけのダンジョンになるよね。
0249名前は開発中のものです。04/06/19 21:21ID:CFVCgowp
237とは違うアルゴリズムで作ってみた。
これだと通路がごちゃごちゃになりやすい罠。

http://namihei.zone.ne.jp/upup/up/13183.zip
窓用バイナリです。マカやウニな方すいません。
Rで再生成。起動時にオプションに"-nowait"付けるとウェイト無しになります。
0250ぐぅ@ディープブルー ◆Mn5mzn8hAQ 04/06/19 22:25ID:YWlxQVDJ
>>249
生成してる様子が見れて面白いねヽ(´ー`)ノ
んでアルゴリズムを想像してみた。
穴掘り系のアルゴリズムで(見たまんまだがw)
再帰的に通路を延ばして
既存の部屋や通路と重ならないことを条件に
部屋を配置しているとみた。

通路の問題と部屋の数とマップの大きさの
制御ができれば究極かもね〜とおもた。
0251名前は開発中のものです。04/06/20 10:48ID:IVN9/P8p
GBのドラクエモンスターズシリーズは、RPGで自動生成ダンジョンつかってたな。
ダンジョンに飽きが来る前に、あまりの作業ゲーっぷりに飽きたが。
025224904/06/21 19:22ID:Yt6BBulP
http://namihei.zone.ne.jp/upup/up/13383.zip
バージョンアップしてみたよ。
主な変更点は、
通路を作る時に周囲の壁比率を調べて、壁が多い方に向かって掘り進む様にしてみたぐらい。
起動オプションの内容が変わってるので一応readme読んどいて。

>>250
マップのサイズは一応引数で指定できる様になってまつ。
通路の問題も少しはよくなったはず。かな? 部屋の数はとりあえず放置。
とりあえずマップ生成はこの辺で中断して、
簡単なローグライクな物体を作ってみようかと思ってます。
0253名前は開発中のものです。04/07/08 00:08ID:cqJ2IUqs
t
0254名無しさん@そうだ選挙に行こう04/07/11 14:17ID:N5viEg7j
うわーん、おとせねー
0255名前は開発中のものです。04/07/13 02:42ID:jJo7FGn+
自作ゲーム評価スレ
http://pc5.2ch.net/test/read.cgi/gamedev/1010018331/l50
ここの323が迷路自動生成のRPGつくってるよ
0256名前は開発中のものです。04/08/01 15:21ID:usbW8wJj
今作ってるけど以外と難しいなこれ
通路2本がこんがらがったりしてる
0257名前は開発中のものです。04/08/27 18:39ID:6G59GEgA
ダンジョン補修
0258名前は開発中のものです。04/09/01 00:10ID:lhDgMKCu
220の書いてくれたロジックでとりあえず部屋作るまでは出来た。

ttp://gamdev.org/up/img/1143.jpg
0259名前は開発中のものです。04/09/01 00:28ID:Gy9xIV4C
頑張ってるのは褒められることだが
おまいこんなただの白黒画像をJPGにすんなよ。
GIFのほうがよっぽど容量少ないぞ。
0260名前は開発中のものです。04/09/01 01:02ID:lhDgMKCu
>>259
ゲムデヴのトコ、jpgで上げてるヒト多かったんで・・・
以後気を付けます。
0261名前は開発中のものです。04/09/01 01:34ID:IwX3QeYN
しかもただの二色なのに、jpgつかうから劣化しちゃっているし。
むしろtxtでも良いくらいだ。

俺も現在作成中。廊下が上手くうごかん。
0262名前は開発中のものです。04/09/10 15:25:48ID:BWQ15nVC
誰か面白いダンジョン生成アルゴリズム開発してない?。
このスレで挙げられたようなのとは違うやつ。
0263名前は開発中のものです。04/09/10 16:20:26ID:TY6UsWtD
現在出ていた生成されるダンジョンタイプの種類は
1.単純な棒倒し法、穴掘り法等をそのまま利用した迷路のみのダンジョン
2.nethack、rouge等の部屋と通路に分けられるダンジョン

面白いアルゴリズムって言ってもなあ…
0264名前は開発中のものです。04/09/10 16:54:00ID:+r9mwvZc
今考えてるのは円形のダンジョン
何重もの円を書いて適当にブッタ切る
そして内側の円から外側の円に向けて通路をわたす
0265名前は開発中のものです。04/09/10 17:08:05ID:0YuGbAcl
手作業で作られた既存のダンジョンっぽいのを自動生成で作れるようになるには、
アルゴリズムというよりは様々な細かい要素を組み込むことが必要なのかな
0266名前は開発中のものです。04/09/10 17:09:05ID:CkYRmAwD
まずは面白いダンジョンというのを定義したまえ
0267名前は開発中のものです。04/09/10 19:14:10ID:FL6ftGDh
半裸の女の子が出てくるダンジョン
0268名前は開発中のものです。04/09/10 19:27:32ID:oQTQ81fi
フォントデータを
ダンジョンデータにコンバートする
どの文字かはランダム
プレイヤーは予測しながら進む
0269名前は開発中のものです。04/09/10 20:07:04ID:sRVfUITO
>>267
半裸の女の子を生成しないといけないわけか、今までのアルゴリズム
では確かに解決できないな…

期待させてもらいます。
0270名前は開発中のものです。04/09/10 21:02:44ID:BWQ15nVC
実際に手作業でダンジョン作ってる人の、
指針というか、作り方がわかれば、自動生成にも応用できそうなんだけどね・・。
0271名前は開発中のものです。04/09/10 21:05:40ID:u8u8k9wk
ぬるぽ堂
http://f25.aaacafe.ne.jp/~nullpo/
0272名前は開発中のものです。04/09/11 00:07:12ID:qXK5hJcc
かわいい女の子の白黒ドット絵を
そのままダンジョンにコンバートしたらいい
0273名前は開発中のものです。04/09/12 00:09:09ID:csUOVR/a
とりあえずダンジョン全体の構造とギミックは分けて考えようぜ。
このスレで重要なのは構造の方だよな。
例えば1つのフロアでもタクティクスみたいに山あり谷ありにするとか。
0274名前は開発中のものです。04/09/12 00:14:29ID:6giDMfAq
構造を再現するためにギミックがあるんだから分けても分けれないと思うんだけどなー。
山アリ谷アリんを作るとしたら・・・
まったいらの床にてきとーに縦軸の起伏の最大値を設定して段々と・・・よくわかんね
0275名前は開発中のものです。04/09/12 00:51:56ID:7YwXfMXJ
PSのアザーライフアザードリームスがローグライクで地面にブロック単位で高さがあったよ。
一定以上段差があると通行できない。
0276名前は開発中のものです。04/09/12 04:11:27ID:5jJEqSKa
タクティクスオウガやFFTAのはごくわずかなパラメータからなかば自動生成のように山あり谷あり作れるシステムだと
どこかで見たおぼえがある
0277名前は開発中のものです。04/09/12 16:27:13ID:DirlIiFv
今なにげにGems見てたが、ダンジョン自動生成載ってるな。
3ページくらいだけど・・・。
0278名前は開発中のものです。04/09/13 01:02:22ID:/TWcsktV
オートメーション化によって生成されたダンジョンよりも、
職人デザイナが丁寧に作り上げたダンジョンの方がいいよ。

プログラマにできることは前者なんだけどさ。
0279名前は開発中のものです。04/09/13 01:12:33ID:4vmv6GkS
職人デザイナががんがろうと思えるようなエディタを作ることもできる



・・・あれ?
■ このスレッドは過去ログ倉庫に格納されています