[過去ログ] ダンジョン自動生成 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
177: 04/06/14 08:05 ID:Fu2wy2cA(1) AAS
>>108の穴掘り法は、3次元の迷路も作れそうだな。
というかこのページ、迷路ゲームの面白さへの考察まで書いてある。
なかなかいい大学だな。
178(1): 04/06/14 09:28 ID:c4NXluee(1) AAS
>>161の問題は最初の部屋から最短経路探索、領域拡張法でいいで解決しない?
179(1): 04/06/14 09:47 ID:5+/Otxjs(1/2) AAS
で、もまいら具体的なソースはできたのかい?
180(1): 04/06/14 11:25 ID:HxZhdP5q(1/19) AAS
思っていたより厄介なソースだなぁ、コメント少ないし。
get_rand(x, y);
xからyまでの範囲の乱数値を得る
例)
get_rand(5, 2);
5から7までの間の乱数値
181: 04/06/14 11:26 ID:HxZhdP5q(2/19) AAS
coin_toss();
0か1の値をランダムに返す
182: ◆Mn5mzn8hAQ 04/06/14 12:04 ID:0lapHs9H(6/19) AAS
>>180
なるほど、ここで判明した関数かきだして
リファレンスみたいにすれば
みんなで読めるね
と、get_randの説明がおかしいある・・
get_rand(5, 2)なら2〜5の乱数を返す
get_rand(5, 7)なら5〜7の乱数を返す だわいね
乱数に関する関数はrandom.cに入っております。
>>178
最短経路探索、お、と思ったけどローグのソースはなんか違う気がしる
省2
183(1): 2時間しか寝てませんよ? ◆Mn5mzn8hAQ 04/06/14 12:19 ID:0lapHs9H(7/19) AAS
画面ORマップまわりの重要な定数(Rogue.h)
#define ROW1 7
#define ROW2 15
#define DROWS 24/*縦の最大*/
#define COL1 26
#define COL2 52
#define DCOLS 80/*横の最大*/
※〜1、〜2は
マップを3x3の領域にきりわける際に利用している
184: 2時間しか寝てませんよ? ◆Mn5mzn8hAQ 04/06/14 12:54 ID:0lapHs9H(8/19) AAS
●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つのドアをもっていて
しかもペアになる部屋のドアの座標ももっており
かつ部屋ではなく通路になったりもする、と。
185(2): 04/06/14 13:08 ID:HxZhdP5q(3/19) AAS
>>183
まだ読みかけだから間違っているかもしれないけど補足すると・・・
部屋の最大数は9で、80x24の空間をを9個に分割して
部屋を配置しているっぽい。
例外はBIG_ROOM。空間内に一部屋だけという状態。部屋のサイズは画面内でランダム。
これはゲーム中、いずれかの階に一度だけ かつ 1/100の確率で出現する。
186: 04/06/14 13:09 ID:HxZhdP5q(4/19) AAS
>>185
あ、0lapHs9H氏の書き込みみると、9個じゃなくて8個なのかな。
187: 2時間しか寝てませんよ? ◆Mn5mzn8hAQ 04/06/14 13:17 ID:0lapHs9H(9/19) AAS
>>185
あ、ほんとだ部屋の数9だね
for WonderWitchのソースはなぜか8ですた
#define MAXROOMS 9(rogue.h)
100分の1の確率なのか、なーる
188: 2時間しか寝てませんよ? ◆Mn5mzn8hAQ 04/06/14 13:24 ID:0lapHs9H(10/19) AAS
ぶっちゃけてしまうが
風来のシレン月影村の怪物インターネット版の体験版
を画面キャプチャしながら4階層遊んでみたが
今わかっている時点だけであきらかにRogueと
生成方法が違いますケドw
189: 04/06/14 14:21 ID:CyVM64I2(1) AAS
rogueのソース読むのもいいけど自分で書いちゃった方が早いし面白いんじゃないかなあ
190: 04/06/14 16:11 ID:5+/Otxjs(2/2) AAS
そうして、他人のソースを読まずに突き進んできた奴があwqせdrftgyふじこlp;
191: 04/06/14 17:06 ID:rnOPv/om(1) AAS
せっかくだから斬新な自動生成段ジョンを開発しようぜ
192: 04/06/14 19:04 ID:HxZhdP5q(5/19) AAS
ダラダラと別のことしながらローグIIのソース読んでる。
部屋生成について補足。make_level()から呼び出される、make_room()は以下の通り。
画面を3x3に分割して、その分割された領域内に矩形を作ることで部屋にしている。
サイズはランダムで、領域内の左上からの位置もランダム。この時、他の領域には
踏み入らないように計算しているので、部屋の重なりをチェックする必要はない。
必ず9個の部屋があるわけでない。条件によって部屋のあるなしが決められる。
条件は単なるランダムではなく、ある程度の法則性がある。
これはゲームバランス的なものだと思うので詳しい説明は省略。
1/2の確率で縦に3部屋並ぶ構成になる・1/2の確率で3種類の部屋の並びになる、
一つのフロアには、少なくとも3つの部屋が生成される、とか。
省2
193(1): 04/06/14 19:18 ID:HxZhdP5q(6/19) AAS
おっと、一部読み間違えた。
>部屋の位置やサイズを別に記憶しておく。
サイズではなく、左上の座標と右下の座標っぽい。
あと、条件チェックで部屋がないと判断されても、先に計算した部屋の位置・・・
つまり、小領域内での左上と右下の座標値を保存している。どうやら通路?を
生成する時に利用しているっぽい。
194: ぐぅ ◆Mn5mzn8hAQ 04/06/14 19:40 ID:0lapHs9H(11/19) AAS
だいたいわかったんだが、
わからないのが
ペアの部屋を選定するコード。
add_maze/make_maze。
add_mazeは>>193の「部屋ではなく通路にする」場合の処理で
座標を保存して範囲を限定することで
どこまでも無駄に通路を延ばしてしまうことを避け
るためと読んだ。
月曜日は面白いテレビ番組がなくて退屈である。
195(2): 04/06/14 19:42 ID:HxZhdP5q(7/19) AAS
部屋を作ったら、次は迷路の作成らしい。通路ではない。
9個の小領域内に、ある条件を満たしたら、迷路を作る。
基点は先の部屋を作成した時に保存した左上の位置から、掘り進む。
1回(1文字)掘るごとに1/3の確率で進行方向を変える。
掘り進む方向+1と、その左右方向(画面の左右ではなく進行方向に対して)、
それから、掘り進む方向+2を調べて、すでに掘った通路があったら迷路作成終了。
掘る範囲は先にランダムに決定した部屋サイズ内なので、小領域を出ることはない。
迷路が生成される条件はゲームバランス的なので詳しい説明は略。
最初の階では絶対に迷路がない。16階以降は階を増やすごとに迷路が作られる確率が高まる。
迷路は1つの階につき1つっぽい。
196: 04/06/14 19:45 ID:HxZhdP5q(8/19) AAS
>>195は、make_maze()の処理内容です。
上下前次1-新書関写板覧索設栞歴
あと 805 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.018s