ダンジョン自動生成at GAMEDEV
ダンジョン自動生成 - 暇つぶし2ch100:快傑ズバット ◆S/GGRxT0w2
03/07/06 12:01 h8XoQ2Wv
____________
|                      |
|                      |
|         _,,.、 -ー''''フ   .|
|    ―==二,,,__   /    |
|          /   / こ |
|   極      /   /  の  |
|   悪  .___,/′ /  ス . |
|   ク   \     \  レ  |
|   ズ    /  .,ー---    |
|   ス  ./  ./          |
|   レ  /   /         |
|    / /   /______    |
|   ・ /    ._,,.,、---″  . |
|   ./--‐''''^゙ ̄        |
|                     |
|                     |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

101:名前は開発中のものです。
03/07/06 19:34 9x9g4sJ5
あなたが探してるのってこれだよね?この中にあったよ♪
URLリンク(alink3.uic.to)

102:名前は開発中のものです。
03/07/09 12:58 K3gy2NT0
◆◇◆◇ 海外サイトだから安心無修正 ◇◆◇◆
URLリンク(upbbs.s2.x-beat.com)

 ↑ 
ココは丸見え! 今ならまだ消されてないよ。たぶん・・・

103:(・∀・)
03/07/09 16:56 vWjTVIFg
IE6.0でMicrosoftのゲームが出来るイースターエッグ発見
IEの製作スタッフが遊び心で入れたもののようだ
やり方は簡単、IEを開きアドレスのところに
c:\aux
と入れるだけ。IEにAUDと出てきたらスペースを押してスタート!

操作方法
上 カーソルキー↑
下 カーソルキー↓
左 カーソルキー←
右 カーソルキー→
ジャンプ A
しゃがみ Z
攻撃   X

現在の最高得点 53600点アメリカ人の模様
2ちゃんねるから1位を出すぞ!(゚Д゚)ゴルァ!!


104:>>103通報しますた
03/07/11 04:26 vuPizfxe
Internet Explorer 6が「c:\aux」でフリーズするバグ

Internet Explorer 6(IE6)のアドレスバーに「c:\aux」と入力して実行すると
IE6がフリーズしてしまうバグがあることが7月8日までに分かった。
URLリンク(www.zdnet.co.jp)

105:名前は開発中のものです。
03/07/11 23:11 oB0pX3ji
美少女のワレメが丸見えなサイトがありましたでつ!
マジでつよ。す、すごい… (*´Д`)ハァハァ…
URLリンク(plaza16.mbn.or.jp)


106:名前は開発中のものです。
03/07/16 04:55 WRWu/qqX
1はどうした。
早く迷路の自動生成プログラム公開しろよ。

107:名前は開発中のものです。
03/07/16 18:32 qOtGqSdH
1はどうした。
早く迷路の自動生成プログラム公開しろよ。


108:ここみろよ
03/07/21 14:11 g9ms6C2X
URLリンク(www.informatics.tuad.ac.jp)

ここにアルゴリズムのってるから勝手につくれよ はげども 2秒でつくれるだろ

109:名前は開発中のものです。
03/07/21 15:10 8kL0amIX
>>108
そういう形の迷路じゃない気がする。
ローグ風のだよね。

110:ここみろよ
03/07/21 15:29 ED0R2RwZ
それもはいってるから マジではげだな

111:名前は開発中のものです。
03/07/22 01:21 AgLHKOrw
docファイルなんぞ紹介されても読めん。

112:名前は開発中のものです。
03/07/22 07:59 tMKl5V9G
俺もDOCファイル読めない。
せめて"はげ"にも読めるフォーマットにしてください。

113:名前は開発中のものです。
03/07/22 11:11 Re+xfTHB
しかも上を辿るとどうやら大学のゼミのサイトか?
普通htmlかpdfだろう。何考えてるんだか。

114:名前は開発中のものです。
03/07/22 16:56 j4H/uE1m
誰か>>108をコンバートしてうぷ汁!!

115:名前は開発中のものです。
03/07/22 21:01 9tZKk9Qy
docなんて冗談だけにしてくれよ・・・

116:名前は開発中のものです。
03/07/22 21:06 72/8UPZ6
オフィスくらい入れれ

117:名前は開発中のものです。
03/09/05 20:36 xlXF3Rvt
保守

118:82
03/09/08 02:24 DGIb+Ofg
久々に来てみた。まったく進展していないな・・・。というかこのスレまだ残ってたのか。
すっかり忘れていたんだが、そろそろ消してもいいか?

119:名前は開発中のものです。
03/09/08 06:00 1vyVKrgh
URLリンク(user.auctions.yahoo.co.jp)

120:412
03/09/22 23:02 rNdSiZ4B
消した。漏れの作った基本アルゴリズムだけ書いておく。

1.部屋数決定
2.各部屋のサイズと位置の決定
3.最初の部屋から通路の敷設
4.他の部屋と接続
5.次の部屋から通路を延ばす(以後繰り返し)
6.全ての部屋がひとつになっているか確認。ダメなら最初から
7.適当に行き止まりや余分な通路を作って完成。

他にもイロイロと細かく小手先のこと(自分の部屋に戻る進路はやり直しとか)を
やってるが基本は1~7。



121:82
03/09/22 23:02 rNdSiZ4B
しまった。別スレの名前が残ってた。スマソ

122:名前は開発中のものです。
03/09/22 23:07 Pk1G8jz2
>>120
6の手順をスッキリさせないと時間メッチャかかりそうだけど

123:82
03/09/23 00:49 H87naM88
6よりも3と4がキモ。ここをどれだけ練れるかで、時間がかなり変化する。
間違えると自分の部屋に戻ってくる行けない部屋のあるダンジョンになってしまう。
ちなみに6の判定そのものは、すぐに出来る。
漏れの場合は左下にリトライカウントを表示してたけど大体1発で出来てた。
たまにやり直すくらい。


124:名前は開発中のものです。
03/10/09 18:15 gloYt7es
 1、通路全体を作る。
 2、通路の上に部屋同士が重ならないように配置する。

 これでどう?


125:名前は開発中のものです。
03/10/09 18:29 s4Tn1OFh
124の考えでいいと思う。

問題は通路の作り方だ。

126:名前は開発中のものです。
03/10/09 18:47 gloYt7es
通路の作り方は通路の上に通路が重なるように配置する。
重ねる通路は、直線やL形や四角形などを使う。

何度か通路を重ねれば大きくて複雑な通路が出来る。


127:82
03/10/09 22:35 WP88aGMf
>>124
なにも考えずに部屋を置くと部屋の形が四角に見えない可能性がある。
それでも良ければ構わないけど、漏れはトルネコのような部屋の形が長方形から
崩れないように注意した。

■□□□■□□□□□
■■■■■□□□□□
■■■■□□□□□□
□■■■■■■■■■
□■■■■□□□□□
□■■■■□□□□□
□■■■■■■■□□
□■■■□□□■□□

こんな部屋の形を許すかどうかだね。


128:名前は開発中のものです。
03/10/09 22:54 PD96naDp
実際作ってみてるわけじゃないので、間違ってたらスマン。

細かいルールになるが通路の長さや部屋の大きさ、配置の座標を奇数で統一すれば、
部屋の形を綺麗にすることは可能だと思う。


129:名前は開発中のものです。
03/10/10 02:58 YAvlPDIa
わざわざアルゴリズム考えなくても、Rogue Clone II とかのソース読めばわかるやん。

130:名前は開発中のものです。
03/10/10 05:14 x+Z90lGG
フラクタルかなんかで岩盤を作って、そいつを腐食させれば天然の洞窟。
同じく鉱脈を作ってカクカク掘っていけば鉱山。

131:82
03/10/13 08:53 wevhMUAZ
>>128
その制限が許されるなら簡単にはなる。問題はそれでいいかどうか。
論点としては>>124と同じだね。

漏れは>>1にシレンとあったので不思議のダンジョン系のダンジョンを基点として考えただけ。

ところで、漏れ以外にも誰か書いてくれよ。

132:名前は開発中のものです。
03/10/13 09:41 bbfkqWDB
アリンコが巣をつくるアルゴリズムを応用できないか?
とりあえず仲間の匂いがする(仲間が多くいる)箇所を彫る
んだけじゃなかったっけ?なんでそんなルールで複雑な巣穴
が生成されんだか…

133:名前は開発中のものです。
03/10/13 11:31 bV77mRDF
>>132
boidみたいに、できるといいね

134:132
03/10/13 13:20 bbfkqWDB
自分でプログラミングするまでの気力が生じないので、似たようなモノを探してみた。

アリの巣作り(画像紹介のみ)
URLリンク(acolyte.t.u-tokyo.ac.jp)

巡回セールスマン問題を「アリのフェロモン」をシミュして解くアプレットらしい。
URLリンク(uk.geocities.com)

ズバリのものは見つけられんかった。自分で作るしかないか…

135:名前は開発中のものです。
03/10/14 11:56 0sl2OLkJ
1.部屋生成
2.通路は((奇数ブロック*i)進んだら曲がる)*n
3.1に戻る
を任意数繰り返したら終了、ってのでやってみた。最初と最後の部屋には階段もつけてみた。
たしかに>>82みたいにきっちりやろうとすると大変だけど、「ダンジョンらしきもの」を自動生成させるのはそれほど難しくはないね。
初めてやってみたけどこれ面白いわ。もちっとがんばってみる。

136:82
03/10/24 23:55 LUG2pqu0
135に期待して保守

137:名前は開発中のものです。
03/12/03 22:01 zSvX83Rw
URLリンク(www.infoseek.livedoor.net)

138:名前は開発中のものです。
03/12/04 00:54 z1sAcz/m
俺が昔つくったやつは
1 X*Yの外壁をつくる。中は全部床。これをダンジョンと呼ぶ。
2 ダンジョンの中にX個の壁を置く。位置はランダム。
3 ダンジョンの中にX*Yの部屋をZ個作る。部屋は外周が全て壁で中が全て床。
4 入り口をランダムで一つ作る。
5 入り口から深さ優先の探索で床に深度を付ける。
6 深度の最大値がXより小さかったら、一番深い床に接してる壁を一つ床に変えて4に戻る

パラメータをうまく与えてやればそれらしいものが出来たよ。
ゲーム作成には挫折したが。


139:名前は開発中のものです。
03/12/04 00:56 z1sAcz/m
× 4に戻る
○ 5に戻る

140:名前は開発中のものです。
03/12/04 22:39 kq3KaFzw
>138

すまんが何がどうなのかさっぱりわからん。
なんで全部床なところにさらに床と壁を作るのか?
1~3と6にあるXはどこまで同じものなのか?
深度がなにを意味しているのか?


141:名前は開発中のものです。
03/12/05 00:12 w85YOxE1
>>138
まず、xとかyとか同じものを違う意味で使うのは止めたほうがよいと思った。

142:名前は開発中のものです。
03/12/05 01:35 ltjJGjMd
わかりにくくてスマン。
しかも深さ優先じゃなくて幅優先の探索だった。

深度は入り口からその床までの最短歩数。
Xは全部別物。

スゲー単純に言うとある程度の深さになるまで壁→床、床→壁を適当に繰り返してるだけ。
部屋を作って通路で繋ぐという考え方ではないので
ここで議論してるのとは全然違うものでした。


143:名前は開発中のものです。
03/12/06 17:18 DPzBMAwq
だからさ。5,6が全然分からない。

・幅優先・・なんのこと?
・最短歩数・・なんのこと?直線じゃなくてもいい?

あと、結局どんなダンジョンになるかわからん。




144:名前は開発中のものです。
03/12/06 20:27 gsVF3sa2
ソースをUPだ。それで全て解決する。

145:名前は開発中のものです。
03/12/06 22:34 uezX5CzB
(´Д`) えーと。

1.部屋数を一定数+乱数に決定
2.壁で埋め尽くされたマップに部屋を重ならないように配置
3.開始地点・終点をどこかの部屋の中に指定
4.開始地点から終点までの通路を1+乱数個作成

とまぁ、言うのは簡単なんだが
アルゴリズムにしろってーと難しいな・・・(´Д`)ハァ。

146:名前は開発中のものです。
03/12/06 23:51 pqhCLOb0

部屋
部屋 987
部屋   6
部屋 345
部屋12

深度ってこんな感じか?でも廊下が巻いたらどうするんだ?
9から下に行って右に行ったら?
同じ部屋についた場合とか廊下が交差したりすぐ隣を通って広くなったりで
これだけだとあまり廊下っぽくならない気がするぞ。



147:138
03/12/07 04:08 SbSpMvxn
探索のアルゴリズムは一般的なものだと思ってた

>>144
ソースはPC98を物置から引っ張り出さないとならないから面倒
でも面白そうだから、暇なときにでもサルベージします。


>>146の例の空白が壁を現しているなら
0がダンジョンの入り口だったとして下のようになる。

54
43 987
32   6
21 345
1012


148:続き
03/12/07 04:08 SbSpMvxn
深さ9では狭いと判断してランダムで床/壁を微調整時したとき、
9の下、9の左下が壁から床になると

54
43 567
3234 6
21 345
1012

になる。

書いてて思い出したが、6の「一番深い床に接してる壁を一つ床に変えて」は記憶違い。
ランダムで床を5個置く、壁を5個置く、とかやってたような気がする。

俺の作ってたやつは部屋の概念が無かったので、
床がたまたま四角く残ってたら部屋って感じ。
イベントの位置は深度で決定してた。

全然ローグ系じゃなくてゴメンネ

149:名前は開発中のものです。
03/12/07 10:16 Jd1VJ/+b
確かにローグ系というより、アリの巣っぽいものができそうだ。
でも、参考になったよ。おかげで下の方法を思いついた。
138と比較するとローグ系の廊下は一マスごとに方向をランダムに決めているんじゃなくて
他の部屋を目指した直線的なランダムってことだろうな。

A:掘り始めの部屋と行き先の部屋をランダムに決める。
B:XとY、どちらかを先にあわせるか決めて廊下を延ばす。
C:一方が合えばもう一方を合わせる方向へ。
D:数十回に一回、進行方向をランダムに変える。
E:別の廊下と繋がったらそこで終了。

まだ欠点はあるだろうけどたぶんこんな感じか?

150:名前は開発中のものです。
03/12/17 19:26 Og4NARii
大昔こんな感じで作った気がする
作りたいタイプによってアルゴリズムを変えてた

迷路風
 アルゴリズム辞典に出ているようなやり方で
 所々壁を消したりしてアクセントを付けてみたり
ローグ風?
 部屋を適当に配置し、適当に通路でつなぐ
 行き止まり通路を作ってみたり
洞窟風?
 適当に掘り進んで、適当に太らせる

151:名前は開発中のものです。
03/12/23 16:22 wQ1mOr30
>>150
その適当って個所のアルゴリズムを書けよアホ

152:名前は開発中のものです。
03/12/23 17:22 bY3OxSod
「大昔」に作ったやつだから忘れちゃったんだよ。きっと

153:名前は開発中のものです。
04/01/13 23:46 8aDUcohE
150が思い出すのを期待して保守

154:名前は開発中のものです。
04/03/18 05:26 mbXIiubf
なんとなくage

155:名前は開発中のものです。
04/05/03 20:45 6fzYU4+4
>>17 >>93
Nethack ではダンジョンの深い所では古典的な迷路が(いっぱい)出現します。
ミノタウルスも(いっぱい)いるよ。
とってもつらいけど、神様がくれた試練なので頑張ろうと思いました。


156:名前は開発中のものです。
04/05/30 09:02 4+hrirdE
テス

157: ◆wvM6C8VLoU
04/06/09 23:07 WBlL48ys
>>151
超亀レスで別人だが自分が昔考えたアルゴリズムは

1.適当な部屋を選択
2.その部屋から一番近く部屋を探す。
3.それぞれの部屋から縦横に直線状に通路掘る
をすべての部屋に通路が繋がるまで繰り返す。
   □


つまり上の場合(□は部屋)
   □
   ↓
□→X
矢印方向に通路を掘っていけばX地点で通路が繋がる。
例外的な場合として、下みたいな場合があるが、書くまでもないので省略




158: ◆wvM6C8VLoU
04/06/09 23:09 WBlL48ys
あと掘る方向は」

159: ◆wvM6C8VLoU
04/06/09 23:11 WBlL48ys
  ←□
↑ 

でもかまわない。
その他細々したものがあったと思うが思い出したらまた書く。

160:名前は開発中のものです。
04/06/10 16:16 v++dte4d
nethackのランダムマップは
マップが重要じゃなくてランダムイベントを#でつないでるんだよな

だから面白いんだと思った

161:名前は開発中のものです。
04/06/13 12:09 rkW7K1R1
>>157
それだけだとこのように孤立したエリアができる可能性がある。

  □ □
  ┃ ┃
□━┛ ┗━□

すべての部屋に通路は繋がっているが、部屋同士が繋がっていることにはならない。
厳密にやるなら、すべての部屋が繋がったかどうかのチェックが必要

あと「部屋から部屋へ通路を伸ばす」のではなく「部屋Aからの通路と部屋Bからの通路を繋げる」というアルゴリズムならば、その合流点Xをどう求めるのか気になる

162: ◆Mn5mzn8hAQ
04/06/13 19:51 SVTy+FtY
俺はあんましシレンとか好きでないので
内容がよくわからんというか
思いっきり忘れたんだが
こういう感じのマップを自動生成できたら
結構イケテルか?
教えてくれろ。

□□□□□□□□□□□□□□□□□□□
□■■■■■□□□□□□□□□□□□□
□■■■■■■■■■■■■□□□□□□
□■■■■■□□□□□□■□□□□□□
□■■■■■□□□□□□■□□■■■□
□□□■□□□□□□□□■□□■■■□
□□■■■■■■■■■■■■■■■■□
□□■□□□□□□□□□■□□■■■□
□■■■■□□□□□□□■□□□□□□
□■■■■□□□□■■■■■□□□□□
□■■■■■■■■■■■■■□□□□□
□■■■■□□□□■■■■■□□□□□
□□□□□□□□□■■■■■□□□□□
□□□□□□□□□□□□□□□□□□□
場所とってしまってすまんね~

163:名前は開発中のものです。
04/06/13 21:03 UiqEecMu
意外と出来ないんだよな
トルネコタイプ

164:名前は開発中のものです。
04/06/13 21:10 nOFtOGzx
いや、トルネコはRogue起源な訳で、NetHack起源な訳で、、

つまりNetHackのソースでも見ればいいだろ(´д`)

165:名前は開発中のものです。
04/06/13 21:18 QEF1CnCV
いきなりNethack読むと軽く死ねると思う

166: ◆Mn5mzn8hAQ
04/06/13 21:28 SVTy+FtY
とりあえずローグのソース読んでたが寝れる。
死ねるというか寝れる。
>>162はどうかいな?

167:名前は開発中のものです。
04/06/13 21:34 nOFtOGzx
そうなのかー、かー。読んだ事無かったから、スマソ
162は悪くないけど全ての部屋にほぼ直通で行ける状態はどうかと。
ある程度の回り道を要求する方がいいと思いますた。

168: ◆Mn5mzn8hAQ
04/06/13 21:43 SVTy+FtY
>>167
さようか一筋縄ではいかんな。
ソース読んだ方が早いかな。

ちなみにローグの生成部分のソースファイルは1000行未満で
ほんとに関係あるのは
そのうち一部分だけなので実はたいしたことがない。
でもコメントついてねぇし。。orz..ぐぅ

169:名前は開発中のものです。
04/06/13 23:22 9y2POLbC
じゃあ、みんなでソースを読み進める勉強会なんてしませんか?

170: ◆Mn5mzn8hAQ
04/06/13 23:34 SVTy+FtY
>>169
いいこと言うなぁ。
仕切ってくださいくださいください

171:名前は開発中のものです。
04/06/14 03:47 kvXypjdH
迷路生成の部分だけ抜き出して
貼ってちょうだい

172: ◆Mn5mzn8hAQ
04/06/14 04:32 0lapHs9H
>>171
貼り付けられるほどは短くないジョ。。。

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

部屋生成の理屈はわかったが
通路つなぎの部分で苦戦中。

173: ◆Mn5mzn8hAQ
04/06/14 05:09 0lapHs9H
んでもってローグに関する
(厳密にはローグクローン2系)の
我輩が読んでみた限りの情報提供しようとおもふ。
参考になるかわからんが(読み間違えてるかもしんないし)

AppMain.cがエントリポイントを含むソース
(Win版でない人は多分Main.c)
135行目のfor(;;)ループの部分の
make_level();が生成の関数。
level.cで定義されている。
これ以外で生成にからんでくるファイルは
room.cとrogue.h位だがちょっと参照する程度。
<つづく>

174: ◆Mn5mzn8hAQ
04/06/14 05:13 0lapHs9H
生成は非常に大雑把に言うと
①3x3に分けたエリアのうち8箇所に部屋を設置する
②一定の法則で対となる部屋を決める
③3回方向転換しながら通路を結ぶ
という段取り。
<つづく>

175: ◆Mn5mzn8hAQ
04/06/14 05:24 0lapHs9H
①と③はそれとなくなんとなくわかったような気分。
しかし②の部分がまだ理解不能。
>>157 で指摘している繋がりチェックを省いて
華麗かつスマートなアルゴリズムで選定するんだろう。
寝ぼけた脳みそでは理解できんねぃ。朝になっちゃったねぃ。
ぐぅ。
他いろいろ気づいたことあるんですが長くなったのでさやうなら。
<つづかない>

176: ◆Mn5mzn8hAQ
04/06/14 05:53 0lapHs9H
ごめん上の>>157ての>>161の間違いです脳はすでに睡眠しています

177:名前は開発中のものです。
04/06/14 08:05 Fu2wy2cA
>>108の穴掘り法は、3次元の迷路も作れそうだな。
というかこのページ、迷路ゲームの面白さへの考察まで書いてある。
なかなかいい大学だな。

178:名前は開発中のものです。
04/06/14 09:28 c4NXluee
>>161の問題は最初の部屋から最短経路探索、領域拡張法でいいで解決しない?

179:名前は開発中のものです。
04/06/14 09:47 5+/Otxjs
で、もまいら具体的なソースはできたのかい?

180:名前は開発中のものです。
04/06/14 11:25 HxZhdP5q
思っていたより厄介なソースだなぁ、コメント少ないし。

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

例)
get_rand(5, 2);
5から7までの間の乱数値

181:名前は開発中のものです。
04/06/14 11:26 HxZhdP5q
coin_toss();
0か1の値をランダムに返す

182: ◆Mn5mzn8hAQ
04/06/14 12:04 0lapHs9H
>>180
なるほど、ここで判明した関数かきだして
リファレンスみたいにすれば
みんなで読めるね

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

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

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

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

>>179
他のしとは知らんけど俺はまだ読むばかりなり。アンタも読むなり。


183:2時間しか寝てませんよ? ◆Mn5mzn8hAQ
04/06/14 12:19 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の領域にきりわける際に利用している


184:2時間しか寝てませんよ? ◆Mn5mzn8hAQ
04/06/14 12:54 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つのドアをもっていて
しかもペアになる部屋のドアの座標ももっており
かつ部屋ではなく通路になったりもする、と。

185:名前は開発中のものです。
04/06/14 13:08 HxZhdP5q
>>183
まだ読みかけだから間違っているかもしれないけど補足すると・・・

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

例外はBIG_ROOM。空間内に一部屋だけという状態。部屋のサイズは画面内でランダム。
これはゲーム中、いずれかの階に一度だけ かつ 1/100の確率で出現する。


186:名前は開発中のものです。
04/06/14 13:09 HxZhdP5q
>>185
あ、0lapHs9H氏の書き込みみると、9個じゃなくて8個なのかな。

187:2時間しか寝てませんよ? ◆Mn5mzn8hAQ
04/06/14 13:17 0lapHs9H
>>185
あ、ほんとだ部屋の数9だね
for WonderWitchのソースはなぜか8ですた

#define MAXROOMS 9(rogue.h)

100分の1の確率なのか、なーる

188:2時間しか寝てませんよ? ◆Mn5mzn8hAQ
04/06/14 13:24 0lapHs9H
ぶっちゃけてしまうが
風来のシレン月影村の怪物インターネット版の体験版
を画面キャプチャしながら4階層遊んでみたが
今わかっている時点だけであきらかにRogueと
生成方法が違いますケドw


189:名前は開発中のものです。
04/06/14 14:21 CyVM64I2
rogueのソース読むのもいいけど自分で書いちゃった方が早いし面白いんじゃないかなあ


190:名前は開発中のものです。
04/06/14 16:11 5+/Otxjs
そうして、他人のソースを読まずに突き進んできた奴があwqせdrftgyふじこlp;

191:名前は開発中のものです。
04/06/14 17:06 rnOPv/om
せっかくだから斬新な自動生成段ジョンを開発しようぜ

192:名前は開発中のものです。
04/06/14 19:04 HxZhdP5q
ダラダラと別のことしながらローグIIのソース読んでる。
部屋生成について補足。make_level()から呼び出される、make_room()は以下の通り。

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

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

部屋のあるなしを決定したら、フロアマップに部屋の構成を記録すると同時に、
部屋の位置やサイズを別に記憶しておく。


193:名前は開発中のものです。
04/06/14 19:18 HxZhdP5q
おっと、一部読み間違えた。

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

あと、条件チェックで部屋がないと判断されても、先に計算した部屋の位置・・・
つまり、小領域内での左上と右下の座標値を保存している。どうやら通路?を
生成する時に利用しているっぽい。

194:ぐぅ ◆Mn5mzn8hAQ
04/06/14 19:40 0lapHs9H
だいたいわかったんだが、
わからないのが
ペアの部屋を選定するコード。

add_maze/make_maze。
add_mazeは>>193の「部屋ではなく通路にする」場合の処理で
座標を保存して範囲を限定することで
どこまでも無駄に通路を延ばしてしまうことを避け
るためと読んだ。
月曜日は面白いテレビ番組がなくて退屈である。


195:名前は開発中のものです。
04/06/14 19:42 HxZhdP5q
部屋を作ったら、次は迷路の作成らしい。通路ではない。

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

迷路が生成される条件はゲームバランス的なので詳しい説明は略。
最初の階では絶対に迷路がない。16階以降は階を増やすごとに迷路が作られる確率が高まる。
迷路は1つの階につき1つっぽい。


196:名前は開発中のものです。
04/06/14 19:45 HxZhdP5q
>>195は、make_maze()の処理内容です。


197:名前は開発中のものです。
04/06/14 19:49 HxZhdP5q
>>195
また読み違えた。

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

掘る範囲は少領域内。
基点が、部屋サイズ内。

198:ぐぅ ◆Mn5mzn8hAQ
04/06/14 19:52 0lapHs9H
ははぁなるほど。
するってぇと通路への変更は別のコードか。


199:名前は開発中のものです。
04/06/14 19:57 HxZhdP5q
>>198
関数名だけみると、通路&ドア作成は、connect_rooms()内っぽいですよ。


200:名前は開発中のものです。
04/06/14 20:12 HxZhdP5q
迷路を作ったら、hide_boxed_passage()を実行してる。

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

隠し処理は3階以降にしか発生しない。あとはゲームバランス的な条件で。

201:名前は開発中のものです。
04/06/14 20:14 HxZhdP5q
というわけで、add_mazes()もおしまい。

>>197は間違いで、やっぱり掘る領域は部屋サイズだったけど、まぁいいや。

202:ぐぅ ◆Mn5mzn8hAQ
04/06/14 20:16 0lapHs9H
>>199
ああ、通常の部屋同士の通路掘りはそれなんだけど、
229行で部屋でも迷路でもないものははじかれるから
それ以外に部屋を通路にするロジックがあるのではないかと
おもて。

R_CROSSという定数がアヤシイ・・
fill_out_level()とfill_it()がアヤシイ・・
とかおもてました。
最後に調整してるんかな、とか。
でもなんか違う気もするし・・
まぁ割と瑣末な部分なので
この時点で突っ込まないでもいいのかもしれんが。

203:ぐぅ>腹ペコ ◆Mn5mzn8hAQ
04/06/14 20:29 0lapHs9H
>>200
ほほぅ。そうなんだ。ソース読むの早いなぁ。

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


204:名前は開発中のものです。
04/06/14 21:06 HxZhdP5q
連続投稿制限に引っかかって、ふてくされてた。

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

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

というわけで、そろそろ通路の処理に入りそうなんだけど、ここからが面倒っすね。
とりあえずアミュレットは26階以降にでるっつーことで。

205:ぐぅ>腹ペコ ◆Mn5mzn8hAQ
04/06/14 21:29 0lapHs9H
>>204
そうそう、mix_random_rooms()でしっちゃかめっちゃかと俺も悩んだw
でも冷静によむと、
mix_random_rooms()はrandom_roomsをシャッフルするだけで
肝心のroomsはいじられないので大丈夫だったりしる。
random_roomsはランダムに部屋選ぶのに参照しるだけの配列にゃり。

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

というか、細かい話抜きにしると
これでほぼ全容はわかったことになるんだなぁ。


206:名前は開発中のものです。
04/06/14 21:53 MkSJwU7k
ソースに 日本語コメントつけてうぷ汁

207:ぐぅ@満腹 ◆Mn5mzn8hAQ
04/06/14 21:59 0lapHs9H
>>206
なんかくれるか?

208:名前は開発中のものです。
04/06/14 22:10 HxZhdP5q
>>205
なるほど、そっちだったか~。
深読み&変数名勘違いのトラップひっかかってました。


209:ぐぅ@凍結 ◆Mn5mzn8hAQ
04/06/14 22:35 0lapHs9H
隣り合っていても部屋と部屋を繋ぐ通路がなかったりしるのは
どのような理屈であろうか。

210:名前は開発中のものです。
04/06/14 23:18 HxZhdP5q
>>200の続き。
部屋と部屋をつなぐ処理・・・は>>203ですが、ちょっと補足。

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

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

draw_simple_passage();
通路は2回曲がるように作成される。スタート地点の扉から
ランダムな長さまで直線をひいて、進行方向を変えて、そこからゴールの扉の
縦座標(or横座標)まで直線をひいて、進行方向を扉の方にして、
そこからゴールの扉まで直線をひくだけ。進行方向を変えるとかいうのは90度向きを...
とかではなく、部屋の位置関係が上下であれば、下にひいて、右か左にひいて、また下ひく
という、ただの条件分岐と線をひくためのfor()ループ三回。

211:名前は開発中のものです。
04/06/14 23:28 HxZhdP5q
通路を作成したら、12%の確率で通路の一部を隠す。
迷路作成時に呼び出した、hide_boxed_passage()と同じ。
そうそう、小領域をまたぐ場合...つまり、>>200の図でいうと、0から2とか、
0から6へ通路を作成した場合には、その中間の小領域(1 or 3)には、
R_CROSSという部屋扱いになるけど・・・これが何を意味するのか、今はわからない。
もちろん、1と3に部屋があったら、通路は作成されない。
あとは、is_all_connected()とfill_out_level()を読んだらオシマイ。


ナゾというか、勘違いかもしれないけど、隠し扉ってなかったっけ?
あれっていつ作ってるんだろう?

212:ぐぅ@凍結 ◆Mn5mzn8hAQ
04/06/14 23:42 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;
は隠しドアとは違うの?ちゃんと読んでないからわからんけど。

213:名前は開発中のものです。
04/06/14 23:46 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])) {
部屋だけでなく、迷路も部屋と同じ扱いになってる。

214:ぐぅ@氷解 ◆Mn5mzn8hAQ
04/06/14 23:51 0lapHs9H
おおお、謎がほぼすべて解けた
ヽ(`Д´)ノ うぉ~

あれ、部屋が通路になってしまう仕掛けはいったい・・

215:名前は開発中のものです。
04/06/14 23:51 HxZhdP5q
>>212
隠し扉それです、ThanX!

>>209
その1 ... 隠し扉
その2 ... is_all_connected();が真の場合、通路作成のfor()ループをbreakしてます。
つまり、ぐるっとまわって別の部屋へつながっている場合、直通路は作成されないのだと思います。


216:名前は開発中のものです。
04/06/14 23:59 HxZhdP5q
fill_out_level()ながーい!休憩。

217:ぐぅ@氷解 ◆Mn5mzn8hAQ
04/06/15 00:02 f1MiYXar
make_room()内の
if ((rn != r1) && (rn != r2) && (rn != r3) && rand_percent(40)) {
goto END;
}
の処理、必須の3部屋でなければ40%の確率で
通路に変貌すると見た。つぅか既出だったっけかな・・


218:ID変わっちゃった
04/06/15 01:58 aIwm2r1B
fill_out_level()はよくわからない。
部屋に扉がない場合(どこにもつながってない壁がある)、
行き止まりの通路を作成してる?
まぁ、ローグの部屋と通路の作成方法はこれでわかった、ということでいっかな。

このアルゴリズムのキモは“空間を3x3に分割する”ということに尽きますね。
これで部屋の重なりを防げるし、ある程度のばらつきを保証できるわけです。


219:ぐぅ@氷解 ◆Mn5mzn8hAQ
04/06/15 02:25 f1MiYXar
>>218
ウンウン
おれっちも3X3が肝とおもふさ~
あと、再帰して繋がりチェックしるやつ
あれないと全部の部屋がつながってしまうわけだけど
ランダムな部屋から通路つくるから絶妙に無駄な通路ができたりする。
必ずしも最低限の通路ではないちうとこもよくできてる。

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

ID変わっちゃったさんありがとう
おかげでかなりスムーズに解析できた。
というわけで、とりあえずどもおつかれさました~

220:名前は開発中のものです。
04/06/15 16:40 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のブロックに分けるロジックよりは、ダンジョンっぽい造りになると思う
後は、部屋を迷路状にしてしまうとか、ブロックをまたいだ中部屋をつくるとか、
隣り合わせのブロックに向かう通路を必ず作るとか(円形のフロアになる)、
適当に部屋や通路を加工していけば面白くなるかもね。

221:ぐぅ@夜更かし ◆Mn5mzn8hAQ
04/06/16 03:10 wguEk+iT
このようなものを生成できるようになりました。
らしくなってるじゃろうか?

URLリンク(namihei.zone.ne.jp)
URLリンク(namihei.zone.ne.jp)



222:名前は開発中のものです。
04/06/16 06:49 4vCvzbx3
>>221
おおっ、トルネコっぽい。グッド。

223:名前は開発中のものです。
04/06/16 17:06 wxXigfIi
>>221
いい感じだね。
しかも、ローグのソースをもとにちょこっと拡張しました?

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

意見等あればどうぞ。

224:名前は開発中のものです。
04/06/16 18:17 E0t6wJPT
いや、技術的な話は、もう特にないんだよ。
ここまでくるとあとはゲームバランスになってしまう。
1フロアに部屋をいくつ配置するのかっていうのは、
腹の減り具合とか、敵の強さとかに依存するし。


225:ぐぅ@腹ペコ ◆Mn5mzn8hAQ
04/06/16 18:30 wguEk+iT
>>222
さんくすこ
究極的ダンジョン生成エンジンを開発して
それはもう愉快なローグ系携帯アプリを作るのが夢ですの。
もちろん主人公はカシワモーチですわ。

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

ここまできて気づいたのだが
俺っちには今のところ
「どんなマップを生成したいのか」という具体的なビジョンがない。
究極的てなんやねん、て話。
夕飯買いに逝ってきます。

226:名前は開発中のものです。
04/06/16 19:21 7o6/4sW2
ローグ系アルゴリズムが落ち着いたところでこんなものを放り出してみるテスト
URLリンク(www.aarg.net)

227:ぐぅ@アイスクリーム ◆Mn5mzn8hAQ
04/06/16 19:31 wguEk+iT
>>226
むぅ
それすごいね。
それで生成したマップで内容がシレンだったら面白いのだろうか。

228:名前は開発中のものです。
04/06/16 19:37 7o6/4sW2
もともとD&D用だからシレンよりWizとか3D系の方が相性がいいだろう。
シレンとかはフィールドを巡るって感じだけどWizは部屋を漁るって感じだから。

229:名前は開発中のものです。
04/06/16 19:52 umWV/n6X
うむ、それみると、自動生成でWiz作れそうだね
よさげだ

230:名前は開発中のものです。
04/06/16 20:07 6hhIabkQ
URLリンク(www.vector.co.jp)

231:ぐぅ@満腹 ◆Mn5mzn8hAQ
04/06/16 20:24 wguEk+iT
そうか自動生成でウィザードリ~。
なるほど・・・

232:名前は開発中のものです。
04/06/16 21:20 MyHIRJr2
自動生成でWizといったらヘルドアか
RPGツクールだけど

233:223
04/06/17 09:19 gyW9IQUR
>>225
>現状1フロアは64x48。
だったか、スマソ 適当に書いたのが悪かった

ただ、ここは自動生成スレだし、いろんなロジックを考えるのは無駄じゃないと思うんだが・・・
シレンにしろ、明らかにひとつのロジックで書かれていないでしょ?
まぁ、いいけど( ゚Д゚)y─┛~~

234:ぐぅ@D言語研究中 ◆Mn5mzn8hAQ
04/06/17 14:17 loWtexz3
>>233
なんで謝ってるのかわかんないジョ
俺もいろんなロジックを考えるのは無駄じゃないと思うジョ

235:名前は開発中のものです。
04/06/17 17:10 ItiRVkb7
ローグ系のダンジョン自動生成だったら作ったことがある。実際やるかどうかはともかく考えてみる
ブロック単位で生成させるなら三次元のダンジョンも応用で出来そう
ただ完全にベクターというか、アリの巣のようなダンジョンを作るのはもうどうやったらいいのかわからん

236:223
04/06/17 18:09 gyW9IQUR
>>234
あ、うむ、読み返してみるとなんか変だ。
議論ばっかじゃあれなんで、漏れもなんか造ってみる

237:ぐぅ@裸ネクタイ ◆Mn5mzn8hAQ
04/06/18 18:00 q/zHUwKW
シレンにならって
①通路をなるべくグネグネしない
という方針で
マップ生成アルゴリズムに手を加えてみますた。
意見きかせてくださいまし
Javaアプレットで、クリックするたびに新しいマップを生成しる。
URLリンク(namihei.zone.ne.jp)


238:ぐぅ@裸ネクタイ ◆Mn5mzn8hAQ
04/06/18 18:01 q/zHUwKW
①と書いてあるのに②がないのは気のせい( ´_ゝ`)

239:名前は開発中のものです。
04/06/18 19:26 1IDEdqU+
>>1

それならツクール2003で作れ
ダンジョン自動作成機能あるぞw

240:名前は開発中のものです。
04/06/18 19:56 oZgvjvN9
>>239
物事の仕組みがどうなっているかを知ろうとしない奴にはプログラミングの素質はない。一生ツクールやってろ。

241:名前は開発中のものです。
04/06/18 20:22 A6zOKkuB
>>237
おーすげー。

けど、「ローカを極力直線的にする」という方針のせいで
「同じようなマップばかり」感が出来てしまっている気もしまつ

242:名前は開発中のものです。
04/06/18 22:10 Gazkyfw7
そういやトルネコ3では長方形以外の小部屋も生成されてたな
角が丸くなってるのとか

 □□□□
 □□□□
   □□

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

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

マップ生成のイメージができあがったので
もう一息で完成しる予定。

244:名前は開発中のものです。
04/06/19 01:47 eD4/Os/T
こういう自動生成型のダンジョンは、ローグ系以外にも使っていきたいね
でも具体的な使い方が思いつかない orz

245:ぐぅ@夜這い中 ◆Mn5mzn8hAQ
04/06/19 02:59 YWlxQVDJ
>>244
生成アルゴリズム学習の効能を考えてみた。

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

使えそうな場面てイッパイありそうだね。ららら。

246:名前は開発中のものです。
04/06/19 09:16 VrZX8wM9
ランダムなカルドセプトなんか面白そうだ

247:名前は開発中のものです。
04/06/19 16:54 TP5uiroQ
普通のRPGでやられるとどこ行っても変わり映えしないで飽きるだろう

248:名前は開発中のものです。
04/06/19 20:27 zNSAKAYY
ギリギリのバランスにしないと、単に面倒なだけのダンジョンになるよね。

249:名前は開発中のものです。
04/06/19 21:21 CFVCgowp
237とは違うアルゴリズムで作ってみた。
これだと通路がごちゃごちゃになりやすい罠。

URLリンク(namihei.zone.ne.jp)
窓用バイナリです。マカやウニな方すいません。
Rで再生成。起動時にオプションに"-nowait"付けるとウェイト無しになります。

250:ぐぅ@ディープブルー ◆Mn5mzn8hAQ
04/06/19 22:25 YWlxQVDJ
>>249
生成してる様子が見れて面白いねヽ(´ー`)ノ
んでアルゴリズムを想像してみた。
穴掘り系のアルゴリズムで(見たまんまだがw)
再帰的に通路を延ばして
既存の部屋や通路と重ならないことを条件に
部屋を配置しているとみた。

通路の問題と部屋の数とマップの大きさの
制御ができれば究極かもね~とおもた。


251:名前は開発中のものです。
04/06/20 10:48 IVN9/P8p
GBのドラクエモンスターズシリーズは、RPGで自動生成ダンジョンつかってたな。
ダンジョンに飽きが来る前に、あまりの作業ゲーっぷりに飽きたが。

252:249
04/06/21 19:22 Yt6BBulP
URLリンク(namihei.zone.ne.jp)
バージョンアップしてみたよ。
主な変更点は、
通路を作る時に周囲の壁比率を調べて、壁が多い方に向かって掘り進む様にしてみたぐらい。
起動オプションの内容が変わってるので一応readme読んどいて。

>>250
マップのサイズは一応引数で指定できる様になってまつ。
通路の問題も少しはよくなったはず。かな? 部屋の数はとりあえず放置。
とりあえずマップ生成はこの辺で中断して、
簡単なローグライクな物体を作ってみようかと思ってます。

253:名前は開発中のものです。
04/07/08 00:08 cqJ2IUqs
t

254:名無しさん@そうだ選挙に行こう
04/07/11 14:17 N5viEg7j
うわーん、おとせねー

255:名前は開発中のものです。
04/07/13 02:42 jJo7FGn+
自作ゲーム評価スレ
スレリンク(gamedev板)l50
ここの323が迷路自動生成のRPGつくってるよ

256:名前は開発中のものです。
04/08/01 15:21 usbW8wJj
今作ってるけど以外と難しいなこれ
通路2本がこんがらがったりしてる

257:名前は開発中のものです。
04/08/27 18:39 6G59GEgA
ダンジョン補修

258:名前は開発中のものです。
04/09/01 00:10 lhDgMKCu
220の書いてくれたロジックでとりあえず部屋作るまでは出来た。

URLリンク(gamdev.org)

259:名前は開発中のものです。
04/09/01 00:28 Gy9xIV4C
頑張ってるのは褒められることだが
おまいこんなただの白黒画像をJPGにすんなよ。
GIFのほうがよっぽど容量少ないぞ。


260:名前は開発中のものです。
04/09/01 01:02 lhDgMKCu
>>259
ゲムデヴのトコ、jpgで上げてるヒト多かったんで・・・
以後気を付けます。


261:名前は開発中のものです。
04/09/01 01:34 IwX3QeYN
しかもただの二色なのに、jpgつかうから劣化しちゃっているし。
むしろtxtでも良いくらいだ。

俺も現在作成中。廊下が上手くうごかん。

262:名前は開発中のものです。
04/09/10 15:25:48 BWQ15nVC
誰か面白いダンジョン生成アルゴリズム開発してない?。
このスレで挙げられたようなのとは違うやつ。

263:名前は開発中のものです。
04/09/10 16:20:26 TY6UsWtD
現在出ていた生成されるダンジョンタイプの種類は
1.単純な棒倒し法、穴掘り法等をそのまま利用した迷路のみのダンジョン
2.nethack、rouge等の部屋と通路に分けられるダンジョン

面白いアルゴリズムって言ってもなあ…

264:名前は開発中のものです。
04/09/10 16:54:00 +r9mwvZc
今考えてるのは円形のダンジョン
何重もの円を書いて適当にブッタ切る
そして内側の円から外側の円に向けて通路をわたす

265:名前は開発中のものです。
04/09/10 17:08:05 0YuGbAcl
手作業で作られた既存のダンジョンっぽいのを自動生成で作れるようになるには、
アルゴリズムというよりは様々な細かい要素を組み込むことが必要なのかな

266:名前は開発中のものです。
04/09/10 17:09:05 CkYRmAwD
まずは面白いダンジョンというのを定義したまえ

267:名前は開発中のものです。
04/09/10 19:14:10 FL6ftGDh
半裸の女の子が出てくるダンジョン

268:名前は開発中のものです。
04/09/10 19:27:32 oQTQ81fi
フォントデータを
ダンジョンデータにコンバートする
どの文字かはランダム
プレイヤーは予測しながら進む

269:名前は開発中のものです。
04/09/10 20:07:04 sRVfUITO
>>267
半裸の女の子を生成しないといけないわけか、今までのアルゴリズム
では確かに解決できないな…

期待させてもらいます。

270:名前は開発中のものです。
04/09/10 21:02:44 BWQ15nVC
実際に手作業でダンジョン作ってる人の、
指針というか、作り方がわかれば、自動生成にも応用できそうなんだけどね・・。

271:名前は開発中のものです。
04/09/10 21:05:40 u8u8k9wk
ぬるぽ堂
URLリンク(f25.aaacafe.ne.jp)

272:名前は開発中のものです。
04/09/11 00:07:12 qXK5hJcc
かわいい女の子の白黒ドット絵を
そのままダンジョンにコンバートしたらいい


273:名前は開発中のものです。
04/09/12 00:09:09 csUOVR/a
とりあえずダンジョン全体の構造とギミックは分けて考えようぜ。
このスレで重要なのは構造の方だよな。
例えば1つのフロアでもタクティクスみたいに山あり谷ありにするとか。

274:名前は開発中のものです。
04/09/12 00:14:29 6giDMfAq
構造を再現するためにギミックがあるんだから分けても分けれないと思うんだけどなー。
山アリ谷アリんを作るとしたら・・・
まったいらの床にてきとーに縦軸の起伏の最大値を設定して段々と・・・よくわかんね

275:名前は開発中のものです。
04/09/12 00:51:56 7YwXfMXJ
PSのアザーライフアザードリームスがローグライクで地面にブロック単位で高さがあったよ。
一定以上段差があると通行できない。

276:名前は開発中のものです。
04/09/12 04:11:27 5jJEqSKa
タクティクスオウガやFFTAのはごくわずかなパラメータからなかば自動生成のように山あり谷あり作れるシステムだと
どこかで見たおぼえがある

277:名前は開発中のものです。
04/09/12 16:27:13 DirlIiFv
今なにげにGems見てたが、ダンジョン自動生成載ってるな。
3ページくらいだけど・・・。

278:名前は開発中のものです。
04/09/13 01:02:22 /TWcsktV
オートメーション化によって生成されたダンジョンよりも、
職人デザイナが丁寧に作り上げたダンジョンの方がいいよ。

プログラマにできることは前者なんだけどさ。

279:名前は開発中のものです。
04/09/13 01:12:33 4vmv6GkS
職人デザイナががんがろうと思えるようなエディタを作ることもできる



・・・あれ?

280:名前は開発中のものです。
04/09/18 13:11:14 kb7Apco/
巧みなジャンジョンマップのサンプルを多数拾ってきて
そこから共通点を見つけ出し、アルゴリズム化…
うん、俺はやらない

281:名前は開発中のものです。
04/09/18 13:37:59 xT0CmM48
おまえにはムリだよ( ´_ゝ`) プッ

282:名前は開発中のものです。
04/09/27 18:01:27 4SFuLUec
ここの住人にできる人はいないらしい

283:名前は開発中のものです。
04/09/27 18:12:21 mSnDxcyL
そんなことはないぞー!!





・・・。

284:名前は開発中のものです。
04/09/28 00:22:03 GU2B02zv
人間の行動心理学を利用してワナにはめるダンジョンを作ってみたい
いや、そういうダンジョンを作って遊びあうのも面白そうだ。

・・・しまった、確か前にナムコが似たようなの出してた。

285:名前は開発中のものです。
04/09/28 04:45:49 Sc/T2jjq
右回りに出口を配置するとか?

286:名前は開発中のものです。
04/09/28 18:00:05 ofbRvjxB
出入り口の1歩先とか、2つの出入り口の最短ルート上とか、宝箱や階段の周囲なんか。
でもそういうところに罠が多いと覚えられたら逆に攻略が簡単になる罠。

287:名前は開発中のものです。
04/09/28 22:33:54 UcoBfAAY
プレイヤーの行動パターンを学習して一番効果的なポイントを割り出すとか

288:名前は開発中のものです。
04/09/29 19:45:00 376p4p/M
入口から必ず一歩踏み出すのを学習して罠配置

289:名前は開発中のものです。
04/09/29 21:02:10 gBf9GxrK
はじめっからイカサマで 一歩一歩調べてる時は出現させず 走り出した足元に罠生成

290:名前は開発中のものです。
04/09/30 14:32:14 0ISGzMLp
ダンジョンコンセプト設定
想定襲撃者設定
予想攻略順路設定
クライマックスシーン設定
くらいは内部で考えてほしいやん

291:名前は開発中のものです。
04/09/30 20:01:00 OuTCYL2U
スレを一通り読んだ。>>172からのRogue Clone IIの解析が熱いね。
この解説があれば簡易roguelikeを作って遊べるかな?
>>226のWiz風小部屋cgiもすごそう。

292:名前は開発中のものです。
04/10/03 23:00:30 QZ2qsdxk
現実世界見ても、ダンジョン(地下牢じゃなく)ってそんなに実在するわけじゃないからなあ。
遺跡に面倒な迷路作ったりしねーし、洞窟だってRPGに出てくるようなのとは全然違うし。

探鉱なんかは割とそっくしっぽいかな。

293:名前は開発中のものです。
04/10/03 23:15:43 8EPrF2Db
本物の鍾乳洞なんて、そこらのラストダンジョンよりも1億倍むずかしいつくりしてるからなぁ

294:名前は開発中のものです。
04/10/04 05:47:00 0YxQ3kRH
まず最初に、三次元だしな。右手法とか、すでに無力。

無計画に建て増しを重ねた家とか、ダンジョンっぽいけどね。
うちの大学の法経本館って建物が、まさしくそんな感じだった。

295:名前は開発中のものです。
04/10/04 08:08:55 KgUV+MGE
やったことある人間なら分かるが
三次元迷路の難しさ(作る方じゃなくて解く方)は並大抵じゃない
無重力だったら更に難易度アップ

296:名前は開発中のものです。
04/10/04 09:19:42 uBXpC+20
TV局もお客さんが迷うように出来てるよな

297:名前は開発中のものです。
04/10/04 09:44:56 tjHvNagT
視聴者が殴りこんできたときに目的地にたどりつけないようにするためという噂もあるが。

298:名前は開発中のものです。
04/10/05 00:05:27 yY4LedyX
>>295
昔、無重力三次元の迷路にハマってたことがある。解く方ね。

マス目状でできている限りは、三次元右手法というのを使えば
一応解けるか、または出発点に帰って来れるのだけど…。

299:名前は開発中のものです。
04/10/05 23:11:17 HWPrXU8U
ケイブダイバー万歳

300:名前は開発中のものです。
04/10/10 18:52:00 ztmRv9+O
>>298
詳細キボンヌ

三次元右手法でぐぐったらこのスレが一番上だった。

301:名前は開発中のものです。
04/10/10 21:51:28 hLLwP255
>>300
googleの検索ロボットって優秀だよなw

302:名前は開発中のものです。
04/10/11 00:16:28 yRIcbrcS
>>300
そういうときって、かなり鬱になるよな。
さらに 先が真っ暗にw

303:名前は開発中のものです。
04/10/11 14:19:33 JIBMCEks
ワロタ

304:名前は開発中のものです。
04/10/12 01:50:59 INg1LVSW
三次元右手法の解説まだ~? チンチン

305:名前は開発中のものです。
04/10/12 02:35:23 sUyOixh1
つーかなんなんだ、そのエロそうな方法は。

306:298
04/10/12 15:39:49 qEbFSq6q
えー、三次元右手法とか、リア工のときの漏れが勝手につけた名前だからなあ。

じゃあ長文になるけど書くよ。


そもそも右手法って何のためのものかって言えば、交差点でどっちへ進むかを
指し示すものなんだよね。で、この時肝心なのは、「今は北に向いてるから…」とか
考えなくても、目の前の情報だけから判断して行く方向を決めれるということ。

通常の右手法では、現在の進行方向と、伸ばしている手とに従って、交差点では
「手の側」「直進」「手の反対側」「戻る」というこの4方向を、この順に優先して選ぶ。

手の側が空いていればそっちへ、だめなら直進、それもだめなら手の反対側へ、
それもだめなら戻るという具合で。


ところで、三次元の迷路では、体の向きというのは「進行方向」だけでは決まらない。
たとえば同じ「北行き」でも、足元が地面方向のこともあれば、足元が東とか、西とか
天の方向になっていることがあるから。

307:名前は開発中のものです。
04/10/12 15:40:13 qEbFSq6q
で、それをふまえて結論だけど。
まず、常に一方の壁面に足をつけて歩くのと、片手を上げて歩いてることが前提で。

交差点で進行方向を選ぶときの優先順位は次のとおり。
「足元」「手の側」「直進」「頭上」「手の反対側」「戻る」

たとえば、右手を上げながら歩いている人は、まず足元が空いていれば必ず足元へ、
もし右側が空いていればそっちへ、それもだめなら直進、それもだめなら頭上へ、
それもだめなら左側へ、それもだめなら戻る、という具合になります。

それで、足元へ入るとか右へ曲がるとか言っても、曲がった後足元をどっちにするかが
問題になるわけですが、それはこうです。
「優先順位が一つ低かった進行方向が、頭上になるように」。
たとえば、手の側へ曲がるときは、直進方向が頭上になるようにしますから、つまり
今来た方向が足元になることになります。

それから、「手の側」「頭上」「戻る」を使ったときは、上げる手の左右を変えます。

このようにして歩けば、通常の右手法と同様に、ループのない迷路では必ず出口に
行けるし、ループのある迷路でも、最低でも入口に帰ってくることができます。

308:名前は開発中のものです。
04/10/12 23:41:46 anbCpzYg
>>306-307
解説どうも。進む方向をあらかじめ一定順序に決めておくのね。
しかし3Dだとややこしいな。

309:名前は開発中のものです。
04/10/20 15:45:07 OESpaijF
サンプル作ったけど、このスレ生きてるんかしれ・・

310:名前は開発中のものです。
04/10/20 16:09:17 EZg4Amvo
>>309
書き込まないだけでチェックはしてるぞ。

311:名前は開発中のものです。
04/10/20 19:52:07 DmOOtTYD
同じく

312:名前は開発中のものです。
04/10/21 07:49:28 7EH9XTP2
漏れも

313:309
04/10/21 13:57:49 W++eIQEI
俺が作ったのは一見トルネコ式にみえて全然別なやり方で
作ったサンプルなんだけど評価してくれるかい?
こんなもんでゲームに使えるかどーか。

314:名前は開発中のものです。
04/10/21 18:36:05 O9PQK3Ve
>>313
まずはうpよろ

315:309
04/10/21 19:47:21 LRTkBKUo
ここに仮設置済
テキトーにダウンして感想よろん
URLリンク(nanca.hp.infoseek.co.jp)

316:名前は開発中のものです。
04/10/21 20:02:15 O9PQK3Ve
>>315
内部エラーが発生しますた(13)

ヽ|・∀・|ノシ

317:名前は開発中のものです。
04/10/21 20:22:55 aFfvccIw
>>315
同じく内部エラー

318:309
04/10/21 21:27:11 LRTkBKUo
げふんw

319:309
04/10/21 21:38:38 LRTkBKUo
修正版再うp

URLリンク(nanca.hp.infoseek.co.jp)

320:名前は開発中のものです。
04/10/21 22:06:44 aFfvccIw
>>319
黒い三角と白い三角なに?

321:309
04/10/21 22:46:39 LRTkBKUo
上の階からの階段と下への階段です~
形だけできてもゴールできないと意味ないんで~


322:名前は開発中のものです。
04/10/21 23:17:15 YbvLPdmt
>>319
ス(゚д゚)ゲー

長方形じゃなくて角が凹んでたりしてるのがおもしろいかも。
太い通路とか2本通路があったりしてトルネコ3っぽい

できれば簡単な手順を…

323:名前は開発中のものです。
04/10/22 00:00:36 rykU18/g
かなり実用に近いと思った。
・複数の部屋の重なり :0~たくさん
・行き止まりの数 :0~たくさん
などを制御できてもいいかも。
あと、乱数の種を一つ指定して毎回同じ迷路を生成できるようにすれば、シレンシリーズの救助のようなことも。

324:名前は開発中のものです。
04/10/22 07:52:24 mUi+pZkQ
>>319
おー。すごいなコレ。アルゴリズム教えれ

325:名前は開発中のものです。
04/10/22 14:36:32 mA1KySzl
良い感じだな。あとはもうちょっと通路にクネクネ感が欲しいトコ。

326:名前は開発中のものです。
04/10/22 22:44:13 VMSWGRgR
確かにすごいけど一本道が多いような気がする

327:309
04/10/22 22:50:19 CFKkD0NF
>シレンシリーズの救助のようなことも。
スマン、シレンはやったことないから救助の意味がわからん・・・

クネクネと一本道回避かぁ。
修行してきまふ

328:名前は開発中のものです。
04/10/23 00:03:43 L29asmXm
救助は自分が死んだダンジョンとまったく同じダンジョンを他のプレイヤーに遊んでもらう機能
「シレン 救助」でぐぐるといろいろ出てくる
このスレの場合はそれだけでなく
 A いいダンジョンできたよー
 B 俺もそのダンジョン見たい
 A ほれ乱数種
 B 見られたーありがとー
というような用途から有効

329:309
04/10/23 22:33:14 PdomheLF
どうも串死んだみたいなんでラストカキコ
シレンの救助の件、サンクス
今後の開発に活かしますね
以後、自ページに潜伏します。みなさんありがとん!

330:名前は開発中のものです。
04/10/24 14:27:49 BuMdqiGY
>>329
【開発】ヾ(゚∀゚ )ノ=3    ヽ(´Д`;)ノ~マッテー、仕組みオシエテー

331:名前は開発中のものです。
04/11/03 22:28:15 95Rp/siN
トルネコとかシレン系の自動生成のソースってないですかね?

332:名前は開発中のものです。
04/11/03 23:21:17 HyRaP3me
あったら見てみたいな
それまではこのスレのを全部試して
トルネコやシレンに似てない点の報告と
どうやれば似るかの案を出してみたりするとよいか

333:名前は開発中のものです。
04/11/04 22:24:51 wvxk1hpD
>>332
自動的に似てる似てないを判断して係数を調整して
見本(シレンとかトルネコ?)に似たダンジョンが作れるようにするとか…。
まあ、そもそもアルゴリズム的に対応できなかったら、意味ないけど。

334:名前は開発中のものです。
04/11/14 12:06:02 zwJU6Kfx
ダンジョンの自動生成ってなかなか難しいですね。
部屋の配置まではすんなりできたけど、
部屋同士をどうやってうまいこと繋げようかと。
とても悩ましい秋です。

335:名前は開発中のものです。
04/11/14 16:40:15 kcTR4H2p
そうしてもう冬がやってきました
  ○y一~~
 (|,へ
  」 ○| ̄|_

336:名前は開発中のものです。
04/11/14 17:03:35 zwJU6Kfx
うそーん(p_q)
では春までにいっちょまえなダンジョンを目指します。

337:名前は開発中のものです。
04/11/14 22:46:02 kcTR4H2p
いや、むしろ俺も出来てないのよw
最初はドルアーガみたいな棒倒し系にしようかとも思ったけど
面白みに欠けるのでローグライク(シレン系?)っぽい感じに決定。
試行錯誤するがうまく行かないうちに、そろそろ中華マンが恋しい季節になりましたOTL

338:名前は開発中のものです。
04/11/14 22:51:00 kcTR4H2p
レスした瞬間にふと思ったんだけど…
ダンジョンが成長するってのはどうだろう?最初は単純で部屋数も少ないが
クリアされるごとにより広大になったりトラップが増加したり
モンスターの強さがクリア回数によって変わっていったり…


最終的に面倒なだけのダンジョンになりそうな悪寒…○| ̄|_
もしかしてこういう系のゲームって既出かな?

339:名前は開発中のものです。
04/11/15 00:02:32 NDaBfp6i
ファミマのトンポーローマンなんてどうでしょう。

こちらもローグライク系で頑張ってるのですが、
なにせシレンすらしたことがないもんで。うふ。
EZアプリでシレンありましたっけ?

最初のうちは簡単なダンジョンで
徐々に複雑になっていくってのはいいですね。
1ブロックを16x16でdefineして、自動生成関数の引き数に
縦横のブロック数と配置する部屋の数を渡すようにしているんですが、
あまり広くしすぎるとほんのりバランスが悪くなりそうな予感です。

まーお互いちまちま頑張りましょう。

340:名前は開発中のものです。
04/11/15 00:17:07 ZN/ZipLx
>>338
ダンジョン育成ゲームか。
・厳しく進化するタイプ
 足踏みで体力回復してる時間が長いと、次のフロアでは足踏みが不利になるように進化。
 それでも頑張って足踏みするとさらに進化。カモった敵は次のフロアでは減ってたりレベルupしてたり。
・無関係に進化するタイプ
 ランダムその他で
・甘く進化するタイプ
 次のフロアで食料や強い武器が出るような行動がある
どれがいいのかな。というよりバランス良く混ぜるのがいいのか。

341:名前は開発中のものです。
04/11/15 00:29:19 rJ8prcLE
>>340
>足踏みで体力回復してる時間が長いと、次のフロアでは足踏みが不利になるように進化。
>それでも頑張って足踏みするとさらに進化。カモった敵は次のフロアでは減ってたりレベルupしてたり。

これ面白いですね。構造以外にも環境に変化をつけるわけですね。
シレンで例えるならば風の吹くまでのターン数が減少してみたり
敵の初期配置数や出現するまでのターンが変化したり…

ダンジョンの進化の仕方によってはバランスの調整が難しいですね…
あんまり緩い進化だと長く単調になるし、急激すぎると詰まる可能性もあるし


342:名前は開発中のものです。
04/11/15 00:37:38 cKIxt0Ru
わざと空腹にして出る食料を増やす奴が出てくるな。
でも空腹時の食料放出をしないと初心者が苦しいし。難しいところだ。

343:名前は開発中のものです。
04/11/15 13:38:14 o1Vlbcad
理想論を言ってもむなしくなるだけだし、
段階的学習みたいに一番小さいものから順に発展させていくか?

344:名前は開発中のものです。
04/11/16 01:34:57 ipRZtLX5
EZアプリかどうかは忘れたがmobile rogue likeとかいうのが
あったはずだ

345:名前は開発中のものです。
04/11/16 19:54:46 CI9NO0tG
>>344
親切にありがとう。ゲットしましたー。

が、近々BREW端末に機種変する予定なのです(p_q)
auがJAVA ON BREW機を出してくれることを祈りつつ、
ダンジョン自動生成の実現に精進しまっす。

346:名前は開発中のものです。
04/11/16 21:57:42 P9enDA5f
>>343
みんなで作るつもりなのか?ただ、順序を示すだけ?

347:名前は開発中のものです。
04/11/17 14:34:04 IMseoB+W
>>345
BREWで開発しちゃったら勝手アプリは作れないんでないの?
Java on brewなんてもし開発されても配布元がKDDIのCPじゃないとアカンし
開発予定にもあがってないモン期待するんか?
作っても配布出来ないモン作ってどーするねん?あぁ売るのかw

348:名前は開発中のものです。
04/11/17 18:40:58 rA9IV7Dv
>>347
言葉足らずでした。

Java on BREWを望んだのは、
アプリを作ったり売ったりの話ではなく、
Javaアプリで遊びたいってことです。
mobile rogue likeをゲットしたのも束の間、
BREW機に機種変してしまうんで。
あくまで淡い希望です。
最後の1行を前の文とくっつけたんでややこしかったですね。
誤解招いてごめんなさいです。

349:347
04/11/17 23:37:37 UoSgUdN/
あぁ、なるほどね。こちこそ早とちりスマソ。
しかし、互換性がまるで無いっつーのもアレだよな。
お詫びにネタ投下。
URLリンク(www.doblog.com)

350:343
04/11/18 00:08:49 MJQO2PT5
>>346
手順を示すだけです。まぁいいや。なんか適当に作ってみます。

351:名前は開発中のものです。
04/11/20 19:25:46 qm4OblSH
つーわけでBREW端末に機種変してきました。
旧端末も手元に残ったんで一応mobile rogue likeできるっちゃできます。

352:名前は開発中のものです。
04/11/22 15:24:30 YKE/U/zA
機種変ご苦労!
というわけでBREW版トル●コ担当よろりん。


353:名前は開発中のものです。
04/11/22 19:28:33 ZU3vvTqD
えーっマジっすか!?Σ(゜□゜;)!!

BREWどころか、まだアルゴリズムの模索中なんで、
ゲームの体裁すら取ってないっす。
アルゴリズム完成したらEZアプリ(JAVA)でゲームにしよーかなーと。

できるのかな…

354:名前は開発中のものです。
04/11/22 20:11:16 bYbj4rLe
先生!ダンジョン自動生成どころかhello worldしかできません!

355:名前は開発中のものです。
04/11/22 20:35:27 IGs/J4HR
Hello World っていうダンジョンを作成しる

356:名前は開発中のものです。
04/11/22 21:30:17 Q0i9cxFu
トロルさまよう目レプラコーンレプラコーンオーク レイスオークジャイアントラットレプラコーン仔犬

357:名前は開発中のものです。
04/11/23 01:10:55 uQgOaJX3
353
そうやって人間育っていくのですよw

358:名前は開発中のものです。
04/11/23 18:21:14 r5d0JSDL
>356
おしいな。
最初はトロルじゃなくて巨人、そしてオークとレイスの間に幽霊が居る。

359:名前は開発中のものです。
04/11/25 16:53:11 eemIdysM
いまさらながら思うですが自動育成ダンジョン=シレンタイプみたいな
風潮があるような気がしますがそれが一番望まれてるって事なんでしょうか?
それとも難しいからでしょうか?

360:名前は開発中のものです。
04/11/25 19:04:45 bNN/YI6j
ほかにもいろいろ自動生成ものは発売されてるよね。
roguelikeをここまで遊びやすく換骨奪胎したかー、とシレンに衝撃を受けた俺の場合
シレン以外はあまり記憶にないけど。

361:名前は開発中のものです。
04/12/03 14:21:55 Qyr4NTOJ
そして今年も終わっていく…

362:名前は開発中のものです。
04/12/05 00:24:43 zmFRbU8M
343は作ってるんだろうか…密かに期待

363:名前は開発中のものです。
04/12/06 12:45:09 XGqr52Q8
>1
ダンジョン自動生成のところのコーディングを終えたところ。
こんな感じ。

URLリンク(www.geocities.jp)

開発報告スレに載せましたが、こっちのスレの方があってるかなと思って...。

このゲームで使ってるダンジョン生成のアルゴリズムは簡単に説明すると
下記の通り。

1) 2次元配列に適当に部屋を作る
2) 部屋を通路(Path)でつなげる
3) 通路が変になってないかを確認。変なところがあれば直す(例えば通路が
太くなって部屋くらいの大きさになったりしてるところ)
4) つながってない部屋がないかを、Recursive で確認。もしあれば最初から
作り直す

動作確認をしたブラウザは Winows XP の IE のみ。
JVMのバージョンは 1.4.2-b28。

テンキーで移動。斜め移動も可能。デバッグの情報が表示されてるけど
無視しちゃってください。絵は描けないんで、ネットで拾ったやつを使って
ます。

行き止まりの通路は作ってません。リリース版には入れるかも。リリース
予定は早くて2006年の年末くらい。

364:363
04/12/06 13:00:13 XGqr52Q8
訂正:
2006年の年末 -> 2005年の年末

365:名前は開発中のものです。
04/12/06 14:18:10 /tS/nbd7
>>363
Opera 7.5 + Sun Java Runtime Environment version 1.4 では
「Invalid Bytecode」のエラーになりますね。



366:363
04/12/07 11:56:57 NaF5wHrT
最新版の JRE でないと起動できないというバグがありました。
訂正版を今アップしました。Opera 7.5 の環境は持ってない
ので確認はできませんでしたが。

367:名前は開発中のものです。
04/12/07 12:21:39 pHcKCsp7
棒倒し式迷宮自動生成プログラム(Ver0.02)
URLリンク(www.geocities.co.jp)

368:名前は開発中のものです。
04/12/07 13:50:54 TS7A5yv3
>>366
Opera 7.5 で見ました。ちゃんと動いてる様子。

369:名前は開発中のものです。
04/12/07 22:06:04 RerrmthA
スクリーンセーバーにならんかなぁ…

370:名前は開発中のものです。
04/12/10 08:53:30 9nn+RPio
>>367
斬新な生成法ならともかく、棒倒し法なんて迷路生成アルゴリズムの中でも
広く認知されてる方だし、再帰処理無しで実現できるし、ガイシュツだし、
このスレで求められてるのは不思議なダンジョン系の
生成アルゴリズムだし今更ここにそれを貼る意図が判らん。

371:名前は開発中のものです。
04/12/10 08:55:39 oAhBbrDg
>このスレで求められてるのは不思議なダンジョン系の生成アルゴリズムだし
ここ以外は同意

372:名前は開発中のものです。
04/12/10 10:34:07 xXQCTLgm
つまり何をどうしろと?
なんなら俺がローグ系のアルゴリズムを説明しようか?


373:名前は開発中のものです。
04/12/10 10:39:09 YvKdmYqn
1から読め。

374:名前は開発中のものです。
04/12/12 15:35:10 wBr93c4E
>>372
この際ぜひ熱く語ってください

375:名前は開発中のものです。
04/12/12 16:07:27 AcpQbbvN
>>372
頼む

376:372
04/12/13 22:09:33 Rb5wRHew
373にムッと来て解説せんとこおもたけど、
このままじゃ年越せない香具師の為に希望者10人集まったらやったるよ。
あと8人な。
その前に何がわからんのか、解りやすく述べるよーに。
そこ詳しく解説したる。

377:名前は開発中のものです。
04/12/13 23:11:20 ZvpPKfOH
rogueのhack自体はスレの途中で行われているからrogueを作りたい人はそれを読めばよいとして。
トルネコやシレンにみられる、「rogueアルゴリズムだけでは作れないようなダンジョン」
の具体的な内容と、その作成方法、あたりが求められてた時期があったような。

でもrogueダンジョンをちゃんと作るのでもけっこう骨だし、作る途中で壁にぶつかった人のための
rogue解説が非常に有難いのはいうまでもない。

378:名前は開発中のものです。
04/12/14 07:28:23 poGq8Mnc
・部屋は 0 ~ n 本の通路を持つ。
・通路は部屋と枝分かれした通路を持つ。

以上の 2 ルールを再帰で書きましょう。
んで、部屋を1つ作れば勝手にニョキニョキっとローグダンジョン完成。

379:名前は開発中のものです。
04/12/15 22:31:04 lyT8gy6+
>>372
解悦キボンヌ

380:名前は開発中のものです。
04/12/15 22:57:06 axE7iVzD
>>372
解説を是非

381:名前は開発中のものです。
04/12/15 23:01:00 QSBnkci9
>>372
解説キボン

382:名前は開発中のものです。
04/12/16 00:44:06 qi/2VfrX
>>372
解説お願い
あと4人か

383:名前は開発中のものです。
04/12/16 01:09:17 vb9l5MzD
>>372
解説を所望いたす

384:名前は開発中のものです。
04/12/16 04:45:02 0Jr2pFyq
>>372
解説すればミンナ幸せというわけでキボン

385:名前は開発中のものです。
04/12/16 06:12:29 i5AsAUvc
>>372
解説気盆ぬ

386:名前は開発中のものです。
04/12/16 07:14:41 I5NiXAvz
解説きぼん

387:372
04/12/16 13:38:02 Fe46NDml
ちゃんとレスくれたのは377のみかよ

どーもオマエらが解らないで困ってる部分が俺には解らないので掻い摘んで書く

まず、考え方から。

頭の中に方眼を用意しる!これが、マップの全体だ。
15x15ぐらいのな。
つまり、225部屋のマスが有るわけだ
もちろん通路もこの中にしまう。
視覚的に部屋なのか通路なのかは捉える方の錯覚にしかすぎない。

これが通路に見えるタイプ(この場合は縦方向)
■■□■■
■■□■■
■■□■■
■■□■■
■■□■■

部屋(と錯覚してるのは)こんなタイプ

■■□■■
■□□□■
■□□□■
■□□□■
■■□■■
こういう風に5x5とかでテキトーに部屋のパーツを作れ
通路タイプで曲げた時はちゃんと接続できるようなパーツも作れ
複雑なダンジョンつくりたきゃ沢山つくれもちろん7x7や9x9の方がいいぞ

388:372
04/12/16 13:42:25 Fe46NDml
つまりこれらのパーツを繋がるよーに並べていけばいいわけだ

次に繋ぎ方。

まず最初に、全体マップにスタート位置を決めれ
そしたら、そこに部屋を置く
このとき次に通路タイプを置く向きを決めてそれにあったタイプを
となりに置いてやる



389:372
04/12/16 13:46:17 Fe46NDml
これで、1つの部屋と1つの通路が出来た訳だ

そしたら次は通路タイプに繋がる部屋を置いてやる
このとき選んだタイプの繋がる方にまた通路タイプを置いてやる
長い通路にしたいときは通路タイプを2回置いてやれ

以下、これの繰り返し。

ぶっちゃけ通路をどっちに延ばすのかはランダムできめれ


390:372
04/12/16 13:52:07 Fe46NDml
初代はどーかしらんがトルネコはいつのまにかこのタイプ
ローグ系とは作り方が全然違う。

もちろん、7x7の部屋もあり、15x15の部屋もありと混ぜてやれば
大部屋とか入り組んだのとか自由に作れる。

気が向いたら他の方法も教えてやるよ

これ読んで意味わかんなかったらあきらめれ
中古屋にトルネコ買いにいって観察しる!

391:372
04/12/16 13:57:00 Fe46NDml
書き忘れた。
通路タイプを置くときに1回置いたとこにまた置くと行けない部屋ができるから
交わる時にはちゃんと交差点タイプに置き換えること

もしくは、交差点が出来ないよーに通路を延ばす方向を選べ
大本になる全体マップをみればぶつかるかどーかはすぐわかるはず

392:名前は開発中のものです。
04/12/16 16:05:27 FUU0Kk70
がっかり

393:名前は開発中のものです。
04/12/16 16:28:52 UoUSh1EM
>>372
CかJavaで実装例見せてください。もしくはもう少し具体的な擬似コードお願いします。

394:名前は開発中のものです。
04/12/16 16:41:54 FMzVG2qN
そもそもパーツを組み合わせて生成してるってのは確定なのか?

395:名前は開発中のものです。
04/12/16 18:22:24 2Rv9bxWb
昔懐かしタイルパターン方式か

396:名前は開発中のものです。
04/12/16 20:40:25 0BfwHw88
棒倒し法や壁伸ばし法で考えたんだが、
内壁の厚さをランダムで変化させて、
平行に並ぶ通路と通路の間の距離を広くして、
その上に部屋を置いていくと少し簡単にならないだろうか?

分かりにくくてスンマソ

397:372
04/12/17 01:59:17 /jyWbHRK
これがスマートとは思わないが誰にでも理解できる方法だ
指定階数になったらあらかじめつくっておいた配列マップを
マップ配列にぶち込めばイベント起こしやすい
だから、トルネコもこの方式になったんでないか
トルネコは大きい輪っか(口みたいなの)もデータでもってるけどな

393
自分でトルネコ作るなら俺はこの方法とらないけど作り込めば
かなり良いマップは作れるよ バイトコードでデータもってくれば
自動生成以外にもそのまま使えるしな
大本のマップを作ってって概念とメリットが把握できないなら
でっかい配列作ってもいいよ[100][100]とかな
その中に等長サイズのパターンデータを入れるか、倍数のデータなら解りやすいだろ
晒した方法観てピンとこないならこの方が簡単かもな
地図をゲーム内で表示する際とか、部屋の数とかの事もこの時点から考えておけ
実際のソースを晒すにはこの板は狭すぎ

395
わかってるならやってみれ
やった上でデメリット、メリット語ってみれ

396
その方法で出来たマップをよくみてみろ
どーせRPGで使うんだろうが、ゲームとして面白味は皆無だ
パズルゲーならアリだけどな
RPG作るんなら、実際にリアルの洞窟なり鍾乳洞なりを妄想するか
実際に行ってこい 

別なロジックもまだまだあるが、まだ晒す気にはならん

393,396 ガンガレ

398:名前は開発中のものです。
04/12/17 09:48:20 FugbEZQk
だから1から読めっていったのに。

399:372
04/12/17 11:28:08 UZmelf3M
398
だって、読んでもまだ解らないヤツがいるからこのスレがあるんだろ?
それとも、オリジナルのルーチン晒せってスレか?ここはw


400:名前は開発中のものです。
04/12/17 11:32:14 s337jfOV
なんか詳しいようだから、トルネコみたいな簡単なルーチンじゃなく、
nethackのダンジョン生成を説明して欲しいな。
rogueなんかよりは遥かに高度なダンジョンを生成してくれてる。


401:名前は開発中のものです。
04/12/17 11:50:06 cLS59+MC
nethackのダンジョンいいなぁ。nethackでローグ風の階層あるけどあそこなんかつまらない。
目が肥えたせいかローグのダンジョンはなんか無味乾燥に見えてしまう。

402:372
04/12/17 13:44:18 N3mlXMLX
nethackのソースは晒されてるぞソース読んだか?


403:名前は開発中のものです。
04/12/17 17:00:28 cLS59+MC
ローグの方も完全に理解してないので読んでません。まずはローグをJavaで実装してみたい。

404:名前は開発中のものです。
04/12/17 19:48:15 W+xg7vzE
雑で大雑把な説明しかしてないのに態度のデカイひとがいるようですけど、
せめてこのスレに書かれているようなローグ解析&解説ぐらいのことは
してからエラそうなことをいってくださいよ。


405:名前は開発中のものです。
04/12/17 20:03:23 x2PDKPqI
もう実装されてる
URLリンク(www.hexatron.com)

406:名前は開発中のものです。
04/12/17 22:52:45 cLS59+MC
>>405
いや自分で実装したいんです。図入りで解説するんでそのときは見てください。

407:名前は開発中のものです。
04/12/18 04:26:54 Wo0srhjV
>>404
気にするな。彼はチェンSoftのProgrammerなんだ。それだけが彼の生きている印なのだから。

408:名前は開発中のものです。
04/12/18 07:28:19 VS/g54MY
結局372は何もわからないのか。

409:名前は開発中のものです。
04/12/18 17:07:08 6wvucy9y
ばかだからね

410:名前は開発中のものです。
04/12/18 17:35:23 NINQi9jk
ローグのソース読んでもやっぱりわからん・・・
ローグライクの開発(解説)しているサイトでおすすめなのあったら教えてくだあい。英語でいいです。

411:名前は開発中のものです。
04/12/18 17:36:20 NINQi9jk
とりあえず
Roguelike News
URLリンク(web.archive.org)
は知ってます。

412:名前は開発中のものです。
04/12/18 18:18:12 brPxtXDU
そんな難しいか?
脳内シミュレートしたけど、簡単にできそうだぞ

部屋を作って、部屋同士を通路でつないで
通路の長さと曲がり具合は、係数で制御して、それかr

413:名前は開発中のものです。
04/12/18 20:35:48 vqBa0na6
>>410
どこらへんの、なにがわからないのか、わかってる?

C言語がわからんというのはナシで

414:名前は開発中のものです。
04/12/18 20:57:46 NINQi9jk
>>412
ソース見ても細かいところで何やってるかわからないんですが。その大雑把にはわかります。
>>413
9つの領域に分けてランダムな大きさの部屋作るところまではできたんですが。
ドアつけて道でつなぐとこがよく分からない。ローグのソースコメントまったくないし・・・

415:名前は開発中のものです。
04/12/18 21:20:41 vqBa0na6
このスレの前の方でソース読みしてるけど。
通路については>>203あたりから。

416:名前は開発中のものです。
04/12/18 21:24:54 NINQi9jk
>>415

一応このスレ全部読んだんだけどね・・・
もう一回読み直して1日中考えてみます。いつかあっそうかってわかるときがあるかも

417:名前は開発中のものです。
04/12/19 02:06:47 cKlDBmlQ
説明してあげたいんだが、文字だけだと難しいな、以下、例ね
□ 空間
■ 土
■■■■■■■■■■■■■■■
■□■□■□■□■□■□■□■
■■■■■■■■■■■■■■■
■□■□■□■□■□■□■□■
■■■■■■■■■■■■■■■

1個飛ばしで空間を配列←初期状態
スタート地点の空間を決めて、隣(ランダム)とつなげる(=土を掘る)
ただし、つなげる先が4方を土で囲まれていなければならない
どこも掘れなくなったら、掘れる場所まで通路を戻っていく
(戻るために、掘るために通っていった通路の全座標を覚えておくこと)
戻るための座標の覚え方はスタックの概念を知らないと厳しいかも
スタート地点まで戻ってしまったら、それは掘れる場所は全部掘った場合のみなので終了
これで最初に1個飛ばしで存在した全空間がつながる
わかってもらえたかな?


418:生徒α
04/12/19 03:05:58 mkdjQU32
それは、つまり有名な穴掘り型ってやつと数分違わずな気がするんですが、先生!!

419:名前は開発中のものです。
04/12/19 03:47:15 kGW+p0Ld
しかし■□を1キャラ分の大きさではなくて1部屋1通路などとしたり、穴掘りにくわえて適度に通路をつけるといい感じにならなくもないぞ。

ローグ風なら
●部屋や通路や壁
■通路や壁
□壁
●■●■●
■□■□■
●■●■●
■□■□■
●■●■●
これを穴掘りで通路つくる(=全部の部屋がつながっている)。
行き止まりばかりになるので、通路をつけたす。
これを元に部屋を置いて通路をつなげて完成。

さらに簡単な棒倒しでもいけるっぽい
URLリンク(www.asahi-net.or.jp)


420:名前は開発中のものです。
04/12/19 12:18:39 ffh3rjeg
ローグの場合、横倒しだとか穴掘りだとか、そんな面倒なことしてないけどね。
単純に、2つの部屋をつなげるだけ。
それぞれの部屋の壁のランダムな位置に扉をつける。
その扉を通路でつなげる。

どの部屋&扉の組み合わせでも、クネクネと2回曲がればたどり着ける。それだけ。
だからローグの場合、基本的な通路にクネクネクネクネ...したものがない。

421:名前は開発中のものです。
04/12/19 15:00:58 P175sgFg
nethackだと、みっちりと通路や小部屋が詰まったダンジョンもあるよね。
洞窟のようなものもあるし、結構バリエーション豊富だ。

422:名前は開発中のものです。
04/12/19 18:13:08 cKlDBmlQ
ところで自動生成ロジックが完成した暁にはどうなるんだ?
なんか遊べるものウプしてくれるの?


423:名前は開発中のものです。
04/12/19 18:25:40 99IBDRAn
実際にコードないかなぁ

424:名前は開発中のものです。
04/12/19 19:16:46 P175sgFg
>>422
ここを見た誰かが作るでしょ。
俺も多分作る。
さらに共有化された知識は、将来の誰かにとっても有益になる。
情報の共有化は、より高度なゲームが作られることを期待できる。

425:名前は開発中のものです。
04/12/19 21:07:31 gAUF82dI
>>424
いいこと言うな。

426:名前は開発中のものです。
04/12/20 03:42:01 r12pJ3ea
>>423
あるよ。このスレでもいくつか紹介されてるし。

オレは>>226のリンク先で紹介されてるダンジョン(Wiz風)
に感動したんで、コード拾ってきて解析中。
つーか、このコード、ローグのより読みやすいわ。
コメントもしっかり書いてあるし。

しかも、ダンジョン生成ルーチンが、クラスで提供されてるから
自分のプログラムに組み込んで動かすだけならすぐにできるよ。

参考までに…

・組み込んでコンパイルするのに最低限、必要なファイル
 gameutil.h、gameutil.c、
 jbmazemask.h、jbmazemask.cpp、
 jbmaze.h、jbmaze.cpp、
 jbdungeon.h、jbdungeon.cpp

・主に利用するクラス
 JBDungeonOptions、JBDungeon
 必要に応じて、JBDungeonRoom、JBDungeonWall、JBDungeonDatumってとこか?

ライセンスとかは各自で確認ヨロ

427:名前は開発中のものです。
04/12/20 08:38:06 gXD9M5+e
>>426
このページ見たけどソースあるの気づかなかったorz
さっそくダウンしました。

428:名前は開発中のものです。
04/12/20 12:11:38 glvff/Ex
いつのまにかソース丸ごとパクリに落ち着いた訳だが。。。


429:名前は開発中のものです。
04/12/20 21:49:42 gXD9M5+e
いやソース見て勉強するだけですよ。

430:426
04/12/21 05:24:29 XvOexZq5
>>428
ん???

オレの書き方がまずかったか…

読み返してみると、後半部分
解析する際のヒントのつもりが、
パクって利用する手引きに読めんこともないな…

組み込みも簡単だし、これ使っときゃいいじゃん!
て言ってるわけじゃないんで、念のため。
基本スタンスは>>424さんが言ってるような感じでヨロシク

と言うことで、このダンジョン生成プログラムについて

ざっと見た感じ、アルゴリズムは>>124のアイデアに近い希ガス

1.オーソドックスな迷路生成アルゴリズムで通路を作成(この時点ではただの迷路)
2.通路を二段階で整形(部屋をイイ感じで配置するための下準備?)
3.迷路のサイズを2倍+1にして通路を引き伸ばす(>>128でビンゴか?)
4.部屋同士が重ならないように配置(この時点で>>127みたいな状態になることがある)
5.壁を生成(これにより>>127みたいな状態が回避される)

まだちゃんと読んでないけど、2の仕組みが良くできてるとおもた。

あと、これ三次元にも対応してるっぽい(Z座標が存在する)。
まだ試してないんでどういうダンジョンが生成されるのかわからんが

431:名前は開発中のものです。
04/12/21 12:49:36 JVBcPoT4
このWiz風ダンジョン生成。
1マスを3x3マス分として考えて、通路は1マス分に縮小。
んで、部屋と通路の扉部分を結合。
ってしたらrogue likeにも使えないかな?

432:426
04/12/22 06:03:37 M7D/hlJX
>>431
そのアイデア、試しに実装してみました。

結果としては、それなりに使えるんじゃないかな?と思います。

ただ通路に関しては、どうしても直線的になりがちで
また部屋に密接して作られちゃうので
見る人によっては、面白みに欠けるとみなすかも?

一応、生成オプション弄って使えそうなやつを作ってみたんで
興味のある方はどうぞ
URLリンク(up.isp.2ch.net)

433:名前は開発中のものです。
04/12/22 18:54:05 vtsQN5YF
なかなかイイね
ダンジョンゲーとしては各フロアにバリエーションがあったほうが楽しいから、
一味違うフロアを生成できるよういろいろなアルゴリズムを持つのは良いことだね

434:名前は開発中のものです。
04/12/22 21:18:29 OzD0Okhk
だね。俺は生成エンジンをプラグイン化してみたりしてる

435:名前は開発中のものです。
04/12/26 00:26:20 Exh1T9w9
このスレ参考に作成中。
まだ不具合あるので画像だけです。

URLリンク(tell-me.sakura.ne.jp)


436:名前は開発中のものです。
04/12/26 05:49:53 H6gPAOqH
おお、すげーすげー
そこを歩くだけのやつでもupしてん







・・・広いな・・・

437:名前は開発中のものです。
04/12/26 08:30:30 U7hutUIm
>>435
いいよいいよー

438:名前は開発中のものです。
04/12/26 11:36:20 4W3IAVrJ
>>435
広過ぎて従来のトルネコ&シレンの腹制度だと2Fで食料なくなりそうだなw

439:名前は開発中のものです。
04/12/26 18:40:24 U7hutUIm
angband系列だと同じくらい広くてもバランスとれてるから、
バランス取り方次第かと

440:名前は開発中のものです。
04/12/27 02:49:08 /qB0yEjo
*band*、少なくともvanillaでは食料事情、照明事情は無いに等しいからな。
NetHackとの差に泣ける。
NetHackだと照明屋に蝋燭しか無い事があるし。
まぁ蝋燭が足りないよりはマシなんだが。

441:名前は開発中のものです。
04/12/27 15:37:31 oLkGYQCR
ははは

NetHackだと蝋燭ないとイベントのせいでクリア不可能だし、
序盤は空腹が天敵だもんな。

その点、*bandは、初期の町で食糧や空腹の巻物が買い放題、
照明も買い放題の上、途中で消費なしの永久光源が拾えるしな

442:名前は開発中のものです。
04/12/27 21:44:09 7R5BsBxR
>>435
すげぇ。ただ、部屋が繋がりすぎのような・・・行き止まりの通路も欲しい

443:435
04/12/28 00:53:12 89xDDhd/
URLリンク(tell-me.sakura.ne.jp)

とりあえず歩けるようにしました。
マップの広さなど起動時にランダムで決まります。
描画にDirectX9.0cを使用しているので
ランタイムが必要です。
描画部分がかなり重いです。
マップが繋がってない、
永久ループするなど不具合が残ってます。


444:名前は開発中のものです。
04/12/28 01:50:03 9LMc91BV
いいよいいよー
こうやって実際に毎回違うmapを歩けると可能性を感じるなー

445:名前は開発中のものです。
04/12/28 04:19:44 eZh/IZfo
>>435
人工物っぽいダンジョンばかりでこれはこれで(・∀・)イイ!!
なんでこんなに重いの?

446:名前は開発中のものです。
05/01/02 21:08:00 VyyXW717
>>435
すごい!完成したらぜひソースを見せてほしいです。

447:名前は開発中のものです。
05/01/17 01:11:02 DxCkgefZ
ぬ・・・だ、誰もいないのか?

いまさらではあるが穴掘り方を応用したら、
こんな感じの生成できるようになった。
自分ではイケテルとおもうが、みんなどうよ?

URLリンク(namihei.zone.ne.jp)


448:名前は開発中のものです。
05/01/17 01:29:37 4Y3i3Bq7
>>447
真中の方にできてる丸っぽい部屋を見て「お?」って思ったけど、ループするような通路ができてないよね。
その辺をどうにかして、通路の太さを適当に拡張するようにしたら自然にできた洞窟っぽくなるかも?


449:447
05/01/17 07:38:51 /ZZCwhql
>>448
アドバイスさんくす!

ループした洞窟てのは、
URLリンク(namihei.zone.ne.jp)
の中央下の感じのことでいいのかな?
これなら一応実装済みなんだけどなぁ・・・
通路広くするのはちょいと考えてみる。

んでは、仕事いてくる~  (^ー^)ノ


450:名前は開発中のものです。
05/01/17 14:01:44 nHigXm2k
全体をn×n個のグリッドにわける方法使ったときの部屋が一直線に並ぶような現象も
回避できてるようだし、かなり良いね。

451:名前は開発中のものです。
05/02/05 17:19:23 T9zbJJCg
ルナティックドーンみたいな奴はどうよ?

452:名前は開発中のものです。
05/02/13 19:14:35 BfA7CsB3
???
ルナドンって、定型を使いまわしだと思う。

453:名前は開発中のものです。
05/02/13 19:37:52 YiLMMcfO
初代は穴掘り系ランダム生成だったような。


454:名前は開発中のものです。
05/02/26 18:16:56 XLBYmv/q
穴掘り法というのをやってみてるんですが、
4方向とも穴を掘れなくなったときに次にスタート地点として選ぶポイントはどうやって選ぶんでしょうか?
今まで掘った穴の中から次のスタート地点をランダムに選ぶとなると、掘った全ての座標の中から選ぶって事になりますよね。

今、map[56][64]という配列に穴か壁を入れてるんですが、
rand()で56*64の中の一つを選んでそれが穴ならそのポイントを選ぶっていう風にすると無駄が多すぎるし…
誰かご教授おねがいします。

455:名前は開発中のものです。
05/02/26 18:58:48 +BfzmYZO
今まで掘ってきた穴をさかのぼっていって
4方向の穴が空いていない地点から掘り出すというのはどう?


456:名前は開発中のものです。
05/02/26 19:41:56 XLBYmv/q
その場合、穴を掘る場所を新たな配列か何かに入れながら掘り進めるって事ですよね?
それだと掘り方がランダムだから配列の大きさが分からないし、
後半になるとさかのぼる量が増えてしまって時間がかかる様な気がするのですが…

457:名前は開発中のものです。
05/02/26 23:26:37 cBNZPZ5V
Cなら動的メモリ、C++ならSTLで解決。
マーカつけてればそんなに深くはならない。

458:名前は開発中のものです。
05/02/27 00:38:28 jOdBjCDc
STLは良く知らないのですが、
1.listに穴を掘った場所を追加しながら進んでいく
2.行き止まりになったらlistの要素数が上限のランダム数を発生させる
3.ランダム数番目の要素がスタートに出来るならそのまま1へ戻り、出来ない場合はその要素を削除し、2へ
こんな感じになるのでしょうか?取り敢えずやってみます。

459:名前は開発中のものです。
05/02/27 06:36:24 i5A/74X4
入れ子でやってないということか?

460:名前は開発中のものです。
05/02/27 13:10:28 jOdBjCDc
入れ子…何処の部分ですか?
理解が悪くてすいません。
ところでlist構造は一つの要素に付き二つ以上の内容を記憶出来るのでしょうか?
今、map配列が2次元配列なのでmap[y][x]のyとxを格納したいのですが…
list構造を二つ用いて同時に入れるしかないんでしょうか?

461:名前は開発中のものです。
05/02/27 14:31:32 jOdBjCDc
というか、list構造ってランダムアクセス出来ないんですね…
どうすれば良いか完全に分からなくなりました
vectorだと要素の追加・削除が出来ないし…

462:名前は開発中のものです。
05/02/27 15:10:01 G4Vo/2DV
URLリンク(www.shibu.jp)
vectorで要素の追加削除出来るべ
つうか出来なかったらどうやって使うのよ

463:名前は開発中のものです。
05/02/27 15:13:30 jOdBjCDc
>>462
ここを見ていたんですが、良く見たら適さないだけで追加も出来るんですね…
URLリンク(www5c.biglobe.ne.jp)
結局dequeというので今は試しているんですが、頭の中がごちゃごちゃになってきました

464:名前は開発中のものです。
05/02/27 16:50:19 JGXBjsxB
もう、解決しちゃったかもしれないが、書いとく。

>>460
コンテナには使用したい構造体を指定する。
struct POINT
{
    int x, y;
};
std::vector<POINT> data;
POINT p; p.x = 0; p.y = 0;
data.push_back(p);
if( map[data[0].y][data[0].x] == WALL ) ...

んで、vector を使ってランダムな要素を取り出す方法
int i = rand() % data.size();  // 1.適当な位置を求める
POINT temp = data[i];    // 2.要素を取り出す
data[i] = data.back(); // 3.取り出した要素の位置に終端の要素を入れる
data.pop_back(); // 4.終端の削除

vector は配列と同じ構造なので途中の要素を削除すると非効率。
でも、終端からの削除ならサイズを変更するだけで済むので簡単にできる。

んじゃ、頑張っとくれ。

465:名前は開発中のものです。
05/02/27 17:05:33 jOdBjCDc
>>464
なるほど。そんなやり方があるとは…
数時間挑んだのですが未だに解決してません。
その上ソースがぐちゃぐちゃになってもう駄目っぽいので、その方法でやり直してみます。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch