[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 10/26 21:58 / Filesize : 242 KB / Number-of Response : 964
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ダンジョン自動生成



1 名前:名前は開発中のものです。 [02/07/19 22:06 ID:o6Bp.wT2]
「風来のシレン」みたいにランダムでダンジョンを作るのって
どうやるんですか

101 名前:名前は開発中のものです。 [03/07/06 19:34 ID:9x9g4sJ5]
あなたが探してるのってこれだよね?この中にあったよ♪
alink3.uic.to/user/angeler.html

102 名前:名前は開発中のものです。 [03/07/09 12:58 ID:K3gy2NT0]
◆◇◆◇ 海外サイトだから安心無修正 ◇◆◇◆
upbbs.s2.x-beat.com/linkvp/linkvp.html

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

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

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

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


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

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

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


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

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


108 名前:ここみろよ mailto:sage [03/07/21 14:11 ID:g9ms6C2X]
ttp://www.informatics.tuad.ac.jp/tenji/tenji03/shiragami-lab/199970120/2.doc

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

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



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

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

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

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

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

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

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

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

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

119 名前:名前は開発中のものです。 [03/09/08 06:00 ID:1vyVKrgh]
user.auctions.yahoo.co.jp/jp/show/auctions?userID=tamagomaru1&u=tamagomaru1



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

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

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



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

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

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


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

 これでどう?


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

問題は通路の作り方だ。

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

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


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

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

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


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

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


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



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

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

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

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

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

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

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

アリの巣作り(画像紹介のみ)
ttp://acolyte.t.u-tokyo.ac.jp/~kaityo/ant2.html

巡回セールスマン問題を「アリのフェロモン」をシミュして解くアプレットらしい。
ttp://uk.geocities.com/markcsinclair/aco.html

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

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

136 名前:82 mailto:sage [03/10/24 23:55 ID:LUG2pqu0]
135に期待して保守

137 名前:名前は開発中のものです。 [03/12/03 22:01 ID:zSvX83Rw]
www.infoseek.livedoor.net/~koushi_okada/links/hsptips/hsptips5_2.html

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

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


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



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

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


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

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

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

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


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

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

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




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

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

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

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

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

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

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



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

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


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

54
43 987
32   6
21 345
1012


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

54
43 567
3234 6
21 345
1012

になる。

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

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

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

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

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

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



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

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

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

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

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

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

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


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

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

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


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




158 名前: ◆wvM6C8VLoU [04/06/09 23:09 ID:WBlL48ys]
あと掘る方向は」

159 名前: ◆wvM6C8VLoU [04/06/09 23:11 ID:WBlL48ys]
  ←□
↑ 

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



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

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

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

  □ □
  ┃ ┃
□━┛ ┗━□

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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


183 名前:2時間しか寝てませんよ? ◆Mn5mzn8hAQ mailto:sage [04/06/14 12:19 ID: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 mailto:sage [04/06/14 12:54 ID: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 名前:名前は開発中のものです。 mailto:sage [04/06/14 13:08 ID:HxZhdP5q]
>>183
まだ読みかけだから間違っているかもしれないけど補足すると・・・

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

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


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

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

#define MAXROOMS 9(rogue.h)

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

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


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




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

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

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

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

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

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


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

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

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

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

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


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

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

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


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


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

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

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

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


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




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

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

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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<242KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef