[過去ログ] ダンジョン自動生成 (1001レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
170: ◆Mn5mzn8hAQ 04/06/13 23:34 ID:SVTy+FtY(4/4) AAS
>>169
いいこと言うなぁ。
仕切ってくださいくださいください
171
(1): 04/06/14 03:47 ID:kvXypjdH(1) AAS
迷路生成の部分だけ抜き出して
貼ってちょうだい
172
(1): ◆Mn5mzn8hAQ 04/06/14 04:32 ID:0lapHs9H(1/19) AAS
>>171
貼り付けられるほどは短くないジョ。。。

ソース付ウィンドウズ版ローグクローン2
外部リンク:www.freak.ne.jp
のRogue Clone II

部屋生成の理屈はわかったが
通路つなぎの部分で苦戦中。
173: ◆Mn5mzn8hAQ 04/06/14 05:09 ID:0lapHs9H(2/19) AAS
んでもってローグに関する
(厳密にはローグクローン2系)の
我輩が読んでみた限りの情報提供しようとおもふ。
参考になるかわからんが(読み間違えてるかもしんないし)

AppMain.cがエントリポイントを含むソース
(Win版でない人は多分Main.c)
135行目のfor(;;)ループの部分の
make_level();が生成の関数。
level.cで定義されている。
これ以外で生成にからんでくるファイルは
省2
174: ◆Mn5mzn8hAQ 04/06/14 05:13 ID:0lapHs9H(3/19) AAS
生成は非常に大雑把に言うと
@3x3に分けたエリアのうち8箇所に部屋を設置する
A一定の法則で対となる部屋を決める
B3回方向転換しながら通路を結ぶ
という段取り。
<つづく>
175: ◆Mn5mzn8hAQ 04/06/14 05:24 ID:0lapHs9H(4/19) AAS
@とBはそれとなくなんとなくわかったような気分。
しかしAの部分がまだ理解不能。
>>157 で指摘している繋がりチェックを省いて
華麗かつスマートなアルゴリズムで選定するんだろう。
寝ぼけた脳みそでは理解できんねぃ。朝になっちゃったねぃ。
ぐぅ。
他いろいろ気づいたことあるんですが長くなったのでさやうなら。
<つづかない>
176: ◆Mn5mzn8hAQ 04/06/14 05:53 ID:0lapHs9H(5/19) AAS
ごめん上の>>157ての>>161の間違いです脳はすでに睡眠しています
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のソース読むのもいいけど自分で書いちゃった方が早いし面白いんじゃないかなあ
1-
あと 812 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.018s