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

ダンジョン自動生成

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。02/07/19 22:06ID:o6Bp.wT2
「風来のシレン」みたいにランダムでダンジョンを作るのって
どうやるんですか
0360名前は開発中のものです。04/11/25 19:04:45ID:bNN/YI6j
ほかにもいろいろ自動生成ものは発売されてるよね。
roguelikeをここまで遊びやすく換骨奪胎したかー、とシレンに衝撃を受けた俺の場合
シレン以外はあまり記憶にないけど。
0361名前は開発中のものです。04/12/03 14:21:55ID:Qyr4NTOJ
そして今年も終わっていく…
0362名前は開発中のものです。04/12/05 00:24:43ID:zmFRbU8M
343は作ってるんだろうか…密かに期待
0363名前は開発中のものです。04/12/06 12:45:09ID:XGqr52Q8
>1
ダンジョン自動生成のところのコーディングを終えたところ。
こんな感じ。

ttp://www.geocities.jp/trashmexyz/roguex93/play.htm

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

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

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

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

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

行き止まりの通路は作ってません。リリース版には入れるかも。リリース
予定は早くて2006年の年末くらい。
036436304/12/06 13:00:13ID:XGqr52Q8
訂正:
2006年の年末 -> 2005年の年末
0365名前は開発中のものです。04/12/06 14:18:10ID:/tS/nbd7
>>363
Opera 7.5 + Sun Java Runtime Environment version 1.4 では
「Invalid Bytecode」のエラーになりますね。

036636304/12/07 11:56:57ID:NaF5wHrT
最新版の JRE でないと起動できないというバグがありました。
訂正版を今アップしました。Opera 7.5 の環境は持ってない
ので確認はできませんでしたが。
0367名前は開発中のものです。04/12/07 12:21:39ID:pHcKCsp7
棒倒し式迷宮自動生成プログラム(Ver0.02)
ttp://www.geocities.co.jp/Playtown-Queen/2574/down.html
0368名前は開発中のものです。04/12/07 13:50:54ID:TS7A5yv3
>>366
Opera 7.5 で見ました。ちゃんと動いてる様子。
0369名前は開発中のものです。04/12/07 22:06:04ID:RerrmthA
スクリーンセーバーにならんかなぁ…
0370名前は開発中のものです。04/12/10 08:53:30ID:9nn+RPio
>>367
斬新な生成法ならともかく、棒倒し法なんて迷路生成アルゴリズムの中でも
広く認知されてる方だし、再帰処理無しで実現できるし、ガイシュツだし、
このスレで求められてるのは不思議なダンジョン系の
生成アルゴリズムだし今更ここにそれを貼る意図が判らん。
0371名前は開発中のものです。04/12/10 08:55:39ID:oAhBbrDg
>このスレで求められてるのは不思議なダンジョン系の生成アルゴリズムだし
ここ以外は同意
0372名前は開発中のものです。04/12/10 10:34:07ID:xXQCTLgm
つまり何をどうしろと?
なんなら俺がローグ系のアルゴリズムを説明しようか?
0373名前は開発中のものです。04/12/10 10:39:09ID:YvKdmYqn
1から読め。
0374名前は開発中のものです。04/12/12 15:35:10ID:wBr93c4E
>>372
この際ぜひ熱く語ってください
0375名前は開発中のものです。04/12/12 16:07:27ID:AcpQbbvN
>>372
頼む
037637204/12/13 22:09:33ID:Rb5wRHew
373にムッと来て解説せんとこおもたけど、
このままじゃ年越せない香具師の為に希望者10人集まったらやったるよ。
あと8人な。
その前に何がわからんのか、解りやすく述べるよーに。
そこ詳しく解説したる。
0377名前は開発中のものです。04/12/13 23:11:20ID:ZvpPKfOH
rogueのhack自体はスレの途中で行われているからrogueを作りたい人はそれを読めばよいとして。
トルネコやシレンにみられる、「rogueアルゴリズムだけでは作れないようなダンジョン」
の具体的な内容と、その作成方法、あたりが求められてた時期があったような。

でもrogueダンジョンをちゃんと作るのでもけっこう骨だし、作る途中で壁にぶつかった人のための
rogue解説が非常に有難いのはいうまでもない。
0378名前は開発中のものです。04/12/14 07:28:23ID:poGq8Mnc
・部屋は 0 〜 n 本の通路を持つ。
・通路は部屋と枝分かれした通路を持つ。

以上の 2 ルールを再帰で書きましょう。
んで、部屋を1つ作れば勝手にニョキニョキっとローグダンジョン完成。
0379名前は開発中のものです。04/12/15 22:31:04ID:lyT8gy6+
>>372
解悦キボンヌ
0380名前は開発中のものです。04/12/15 22:57:06ID:axE7iVzD
>>372
解説を是非
0381名前は開発中のものです。04/12/15 23:01:00ID:QSBnkci9
>>372
解説キボン
0382名前は開発中のものです。04/12/16 00:44:06ID:qi/2VfrX
>>372
解説お願い
あと4人か
0383名前は開発中のものです。04/12/16 01:09:17ID:vb9l5MzD
>>372
解説を所望いたす
0384名前は開発中のものです。04/12/16 04:45:02ID:0Jr2pFyq
>>372
解説すればミンナ幸せというわけでキボン
0385名前は開発中のものです。04/12/16 06:12:29ID:i5AsAUvc
>>372
解説気盆ぬ
0386名前は開発中のものです。04/12/16 07:14:41ID:I5NiXAvz
解説きぼん
038737204/12/16 13:38:02ID:Fe46NDml
ちゃんとレスくれたのは377のみかよ

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

まず、考え方から。

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

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

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

■■□■■
■□□□■
■□□□■
■□□□■
■■□■■
こういう風に5x5とかでテキトーに部屋のパーツを作れ
通路タイプで曲げた時はちゃんと接続できるようなパーツも作れ
複雑なダンジョンつくりたきゃ沢山つくれもちろん7x7や9x9の方がいいぞ
038837204/12/16 13:42:25ID:Fe46NDml
つまりこれらのパーツを繋がるよーに並べていけばいいわけだ

次に繋ぎ方。

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

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

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

以下、これの繰り返し。

ぶっちゃけ通路をどっちに延ばすのかはランダムできめれ
039037204/12/16 13:52:07ID:Fe46NDml
初代はどーかしらんがトルネコはいつのまにかこのタイプ
ローグ系とは作り方が全然違う。

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

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

これ読んで意味わかんなかったらあきらめれ
中古屋にトルネコ買いにいって観察しる!
039137204/12/16 13:57:00ID:Fe46NDml
書き忘れた。
通路タイプを置くときに1回置いたとこにまた置くと行けない部屋ができるから
交わる時にはちゃんと交差点タイプに置き換えること

もしくは、交差点が出来ないよーに通路を延ばす方向を選べ
大本になる全体マップをみればぶつかるかどーかはすぐわかるはず
0392名前は開発中のものです。04/12/16 16:05:27ID:FUU0Kk70
がっかり
0393名前は開発中のものです。04/12/16 16:28:52ID:UoUSh1EM
>>372
CかJavaで実装例見せてください。もしくはもう少し具体的な擬似コードお願いします。
0394名前は開発中のものです。04/12/16 16:41:54ID:FMzVG2qN
そもそもパーツを組み合わせて生成してるってのは確定なのか?
0395名前は開発中のものです。04/12/16 18:22:24ID:2Rv9bxWb
昔懐かしタイルパターン方式か
0396名前は開発中のものです。04/12/16 20:40:25ID:0BfwHw88
棒倒し法や壁伸ばし法で考えたんだが、
内壁の厚さをランダムで変化させて、
平行に並ぶ通路と通路の間の距離を広くして、
その上に部屋を置いていくと少し簡単にならないだろうか?

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

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

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

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

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

393,396 ガンガレ
0398名前は開発中のものです。04/12/17 09:48:20ID:FugbEZQk
だから1から読めっていったのに。
039937204/12/17 11:28:08ID:UZmelf3M
398
だって、読んでもまだ解らないヤツがいるからこのスレがあるんだろ?
それとも、オリジナルのルーチン晒せってスレか?ここはw
0400名前は開発中のものです。04/12/17 11:32:14ID:s337jfOV
なんか詳しいようだから、トルネコみたいな簡単なルーチンじゃなく、
nethackのダンジョン生成を説明して欲しいな。
rogueなんかよりは遥かに高度なダンジョンを生成してくれてる。
0401名前は開発中のものです。04/12/17 11:50:06ID:cLS59+MC
nethackのダンジョンいいなぁ。nethackでローグ風の階層あるけどあそこなんかつまらない。
目が肥えたせいかローグのダンジョンはなんか無味乾燥に見えてしまう。
040237204/12/17 13:44:18ID:N3mlXMLX
nethackのソースは晒されてるぞソース読んだか?
0403名前は開発中のものです。04/12/17 17:00:28ID:cLS59+MC
ローグの方も完全に理解してないので読んでません。まずはローグをJavaで実装してみたい。
0404名前は開発中のものです。04/12/17 19:48:15ID:W+xg7vzE
雑で大雑把な説明しかしてないのに態度のデカイひとがいるようですけど、
せめてこのスレに書かれているようなローグ解析&解説ぐらいのことは
してからエラそうなことをいってくださいよ。
0405名前は開発中のものです。04/12/17 20:03:23ID:x2PDKPqI
もう実装されてる
ttp://www.hexatron.com/rogue/
0406名前は開発中のものです。04/12/17 22:52:45ID:cLS59+MC
>>405
いや自分で実装したいんです。図入りで解説するんでそのときは見てください。
0407名前は開発中のものです。04/12/18 04:26:54ID:Wo0srhjV
>>404
気にするな。彼はチェンSoftのProgrammerなんだ。それだけが彼の生きている印なのだから。
0408名前は開発中のものです。04/12/18 07:28:19ID:VS/g54MY
結局372は何もわからないのか。
0409名前は開発中のものです。04/12/18 17:07:08ID:6wvucy9y
ばかだからね
0410名前は開発中のものです。04/12/18 17:35:23ID:NINQi9jk
ローグのソース読んでもやっぱりわからん・・・
ローグライクの開発(解説)しているサイトでおすすめなのあったら教えてくだあい。英語でいいです。
0411名前は開発中のものです。04/12/18 17:36:20ID:NINQi9jk
とりあえず
Roguelike News
ttp://web.archive.org/web/20010405204554/www.skoardy.demon.co.uk/rlnews/devmain.html
は知ってます。
0412名前は開発中のものです。04/12/18 18:18:12ID:brPxtXDU
そんな難しいか?
脳内シミュレートしたけど、簡単にできそうだぞ

部屋を作って、部屋同士を通路でつないで
通路の長さと曲がり具合は、係数で制御して、それかr
0413名前は開発中のものです。04/12/18 20:35:48ID:vqBa0na6
>>410
どこらへんの、なにがわからないのか、わかってる?

C言語がわからんというのはナシで
0414名前は開発中のものです。04/12/18 20:57:46ID:NINQi9jk
>>412
ソース見ても細かいところで何やってるかわからないんですが。その大雑把にはわかります。
>>413
9つの領域に分けてランダムな大きさの部屋作るところまではできたんですが。
ドアつけて道でつなぐとこがよく分からない。ローグのソースコメントまったくないし・・・
0415名前は開発中のものです。04/12/18 21:20:41ID:vqBa0na6
このスレの前の方でソース読みしてるけど。
通路については>>203あたりから。
0416名前は開発中のものです。04/12/18 21:24:54ID:NINQi9jk
>>415
d
一応このスレ全部読んだんだけどね・・・
もう一回読み直して1日中考えてみます。いつかあっそうかってわかるときがあるかも
0417名前は開発中のものです。04/12/19 02:06:47ID:cKlDBmlQ
説明してあげたいんだが、文字だけだと難しいな、以下、例ね
□ 空間
■ 土
■■■■■■■■■■■■■■■
■□■□■□■□■□■□■□■
■■■■■■■■■■■■■■■
■□■□■□■□■□■□■□■
■■■■■■■■■■■■■■■

1個飛ばしで空間を配列←初期状態
スタート地点の空間を決めて、隣(ランダム)とつなげる(=土を掘る)
ただし、つなげる先が4方を土で囲まれていなければならない
どこも掘れなくなったら、掘れる場所まで通路を戻っていく
(戻るために、掘るために通っていった通路の全座標を覚えておくこと)
戻るための座標の覚え方はスタックの概念を知らないと厳しいかも
スタート地点まで戻ってしまったら、それは掘れる場所は全部掘った場合のみなので終了
これで最初に1個飛ばしで存在した全空間がつながる
わかってもらえたかな?
0418生徒α04/12/19 03:05:58ID:mkdjQU32
それは、つまり有名な穴掘り型ってやつと数分違わずな気がするんですが、先生!!
0419名前は開発中のものです。04/12/19 03:47:15ID:kGW+p0Ld
しかし■□を1キャラ分の大きさではなくて1部屋1通路などとしたり、穴掘りにくわえて適度に通路をつけるといい感じにならなくもないぞ。

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

さらに簡単な棒倒しでもいけるっぽい
ttp://www.asahi-net.or.jp/~kh4s-smz/midp/roguelike/random.html
0420名前は開発中のものです。04/12/19 12:18:39ID:ffh3rjeg
ローグの場合、横倒しだとか穴掘りだとか、そんな面倒なことしてないけどね。
単純に、2つの部屋をつなげるだけ。
それぞれの部屋の壁のランダムな位置に扉をつける。
その扉を通路でつなげる。

どの部屋&扉の組み合わせでも、クネクネと2回曲がればたどり着ける。それだけ。
だからローグの場合、基本的な通路にクネクネクネクネ...したものがない。
0421名前は開発中のものです。04/12/19 15:00:58ID:P175sgFg
nethackだと、みっちりと通路や小部屋が詰まったダンジョンもあるよね。
洞窟のようなものもあるし、結構バリエーション豊富だ。
0422名前は開発中のものです。04/12/19 18:13:08ID:cKlDBmlQ
ところで自動生成ロジックが完成した暁にはどうなるんだ?
なんか遊べるものウプしてくれるの?
0423名前は開発中のものです。04/12/19 18:25:40ID:99IBDRAn
実際にコードないかなぁ
0424名前は開発中のものです。04/12/19 19:16:46ID:P175sgFg
>>422
ここを見た誰かが作るでしょ。
俺も多分作る。
さらに共有化された知識は、将来の誰かにとっても有益になる。
情報の共有化は、より高度なゲームが作られることを期待できる。
0425名前は開発中のものです。04/12/19 21:07:31ID:gAUF82dI
>>424
いいこと言うな。
0426名前は開発中のものです。04/12/20 03:42:01ID: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ってとこか?

ライセンスとかは各自で確認ヨロ
0427名前は開発中のものです。04/12/20 08:38:06ID:gXD9M5+e
>>426
このページ見たけどソースあるの気づかなかったorz
さっそくダウンしました。
0428名前は開発中のものです。04/12/20 12:11:38ID:glvff/Ex
いつのまにかソース丸ごとパクリに落ち着いた訳だが。。。
0429名前は開発中のものです。04/12/20 21:49:42ID:gXD9M5+e
いやソース見て勉強するだけですよ。
043042604/12/21 05:24:29ID:XvOexZq5
>>428
ん???

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

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

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

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

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

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

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

あと、これ三次元にも対応してるっぽい(Z座標が存在する)。
まだ試してないんでどういうダンジョンが生成されるのかわからんが
0431名前は開発中のものです。04/12/21 12:49:36ID:JVBcPoT4
このWiz風ダンジョン生成。
1マスを3x3マス分として考えて、通路は1マス分に縮小。
んで、部屋と通路の扉部分を結合。
ってしたらrogue likeにも使えないかな?
043242604/12/22 06:03:37ID:M7D/hlJX
>>431
そのアイデア、試しに実装してみました。

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

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

一応、生成オプション弄って使えそうなやつを作ってみたんで
興味のある方はどうぞ
ttp://up.isp.2ch.net/up/2a3bb0ad177e.txt
0433名前は開発中のものです。04/12/22 18:54:05ID:vtsQN5YF
なかなかイイね
ダンジョンゲーとしては各フロアにバリエーションがあったほうが楽しいから、
一味違うフロアを生成できるよういろいろなアルゴリズムを持つのは良いことだね
0434名前は開発中のものです。04/12/22 21:18:29ID:OzD0Okhk
だね。俺は生成エンジンをプラグイン化してみたりしてる
0435名前は開発中のものです。04/12/26 00:26:20ID:Exh1T9w9
このスレ参考に作成中。
まだ不具合あるので画像だけです。

ttp://tell-me.sakura.ne.jp/test.gif
0436名前は開発中のものです。04/12/26 05:49:53ID:H6gPAOqH
おお、すげーすげー
そこを歩くだけのやつでもupしてん







・・・広いな・・・
0437名前は開発中のものです。04/12/26 08:30:30ID:U7hutUIm
>>435
いいよいいよー
0438名前は開発中のものです。04/12/26 11:36:20ID:4W3IAVrJ
>>435
広過ぎて従来のトルネコ&シレンの腹制度だと2Fで食料なくなりそうだなw
0439名前は開発中のものです。04/12/26 18:40:24ID:U7hutUIm
angband系列だと同じくらい広くてもバランスとれてるから、
バランス取り方次第かと
0440名前は開発中のものです。04/12/27 02:49:08ID:/qB0yEjo
*band*、少なくともvanillaでは食料事情、照明事情は無いに等しいからな。
NetHackとの差に泣ける。
NetHackだと照明屋に蝋燭しか無い事があるし。
まぁ蝋燭が足りないよりはマシなんだが。
0441名前は開発中のものです。04/12/27 15:37:31ID:oLkGYQCR
ははは

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

その点、*bandは、初期の町で食糧や空腹の巻物が買い放題、
照明も買い放題の上、途中で消費なしの永久光源が拾えるしな
0442名前は開発中のものです。04/12/27 21:44:09ID:7R5BsBxR
>>435
すげぇ。ただ、部屋が繋がりすぎのような・・・行き止まりの通路も欲しい
044343504/12/28 00:53:12ID:89xDDhd/
ttp://tell-me.sakura.ne.jp/map.zip

とりあえず歩けるようにしました。
マップの広さなど起動時にランダムで決まります。
描画にDirectX9.0cを使用しているので
ランタイムが必要です。
描画部分がかなり重いです。
マップが繋がってない、
永久ループするなど不具合が残ってます。
0444名前は開発中のものです。04/12/28 01:50:03ID:9LMc91BV
いいよいいよー
こうやって実際に毎回違うmapを歩けると可能性を感じるなー
0445名前は開発中のものです。04/12/28 04:19:44ID:eZh/IZfo
>>435
人工物っぽいダンジョンばかりでこれはこれで(・∀・)イイ!!
なんでこんなに重いの?
0446名前は開発中のものです。05/01/02 21:08:00ID:VyyXW717
>>435
すごい!完成したらぜひソースを見せてほしいです。
0447名前は開発中のものです。05/01/17 01:11:02ID:DxCkgefZ
ぬ・・・だ、誰もいないのか?

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

ttp://namihei.zone.ne.jp/upup/up/31422.gif
0448名前は開発中のものです。05/01/17 01:29:37ID:4Y3i3Bq7
>>447
真中の方にできてる丸っぽい部屋を見て「お?」って思ったけど、ループするような通路ができてないよね。
その辺をどうにかして、通路の太さを適当に拡張するようにしたら自然にできた洞窟っぽくなるかも?
044944705/01/17 07:38:51ID:/ZZCwhql
>>448
アドバイスさんくす!

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

んでは、仕事いてくる〜  (^ー^)ノ
0450名前は開発中のものです。05/01/17 14:01:44ID:nHigXm2k
全体をn×n個のグリッドにわける方法使ったときの部屋が一直線に並ぶような現象も
回避できてるようだし、かなり良いね。
0451名前は開発中のものです。05/02/05 17:19:23ID:T9zbJJCg
ルナティックドーンみたいな奴はどうよ?
0452名前は開発中のものです。05/02/13 19:14:35ID:BfA7CsB3
???
ルナドンって、定型を使いまわしだと思う。
0453名前は開発中のものです。05/02/13 19:37:52ID:YiLMMcfO
初代は穴掘り系ランダム生成だったような。
0454名前は開発中のものです。05/02/26 18:16:56ID:XLBYmv/q
穴掘り法というのをやってみてるんですが、
4方向とも穴を掘れなくなったときに次にスタート地点として選ぶポイントはどうやって選ぶんでしょうか?
今まで掘った穴の中から次のスタート地点をランダムに選ぶとなると、掘った全ての座標の中から選ぶって事になりますよね。

今、map[56][64]という配列に穴か壁を入れてるんですが、
rand()で56*64の中の一つを選んでそれが穴ならそのポイントを選ぶっていう風にすると無駄が多すぎるし…
誰かご教授おねがいします。
0455名前は開発中のものです。05/02/26 18:58:48ID:+BfzmYZO
今まで掘ってきた穴をさかのぼっていって
4方向の穴が空いていない地点から掘り出すというのはどう?
0456名前は開発中のものです。05/02/26 19:41:56ID:XLBYmv/q
その場合、穴を掘る場所を新たな配列か何かに入れながら掘り進めるって事ですよね?
それだと掘り方がランダムだから配列の大きさが分からないし、
後半になるとさかのぼる量が増えてしまって時間がかかる様な気がするのですが…
0457名前は開発中のものです。05/02/26 23:26:37ID:cBNZPZ5V
Cなら動的メモリ、C++ならSTLで解決。
マーカつけてればそんなに深くはならない。
0458名前は開発中のものです。05/02/27 00:38:28ID:jOdBjCDc
STLは良く知らないのですが、
1.listに穴を掘った場所を追加しながら進んでいく
2.行き止まりになったらlistの要素数が上限のランダム数を発生させる
3.ランダム数番目の要素がスタートに出来るならそのまま1へ戻り、出来ない場合はその要素を削除し、2へ
こんな感じになるのでしょうか?取り敢えずやってみます。
0459名前は開発中のものです。05/02/27 06:36:24ID:i5A/74X4
入れ子でやってないということか?
0460名前は開発中のものです。05/02/27 13:10:28ID:jOdBjCDc
入れ子…何処の部分ですか?
理解が悪くてすいません。
ところでlist構造は一つの要素に付き二つ以上の内容を記憶出来るのでしょうか?
今、map配列が2次元配列なのでmap[y][x]のyとxを格納したいのですが…
list構造を二つ用いて同時に入れるしかないんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています