ダンジョン自動生成
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
02/07/19 22:06ID:o6Bp.wT2どうやるんですか
0413名前は開発中のものです。
04/12/18 20:35:48ID:vqBa0na6どこらへんの、なにがわからないのか、わかってる?
C言語がわからんというのはナシで
0414名前は開発中のものです。
04/12/18 20:57:46ID:NINQi9jkソース見ても細かいところで何やってるかわからないんですが。その大雑把にはわかります。
>>413
9つの領域に分けてランダムな大きさの部屋作るところまではできたんですが。
ドアつけて道でつなぐとこがよく分からない。ローグのソースコメントまったくないし・・・
0415名前は開発中のものです。
04/12/18 21:20:41ID:vqBa0na6通路については>>203あたりから。
0416名前は開発中のものです。
04/12/18 21:24:54ID:NINQi9jkd
一応このスレ全部読んだんだけどね・・・
もう一回読み直して1日中考えてみます。いつかあっそうかってわかるときがあるかも
0417名前は開発中のものです。
04/12/19 02:06:47ID:cKlDBmlQ□ 空間
■ 土
■■■■■■■■■■■■■■■
■□■□■□■□■□■□■□■
■■■■■■■■■■■■■■■
■□■□■□■□■□■□■□■
■■■■■■■■■■■■■■■
1個飛ばしで空間を配列←初期状態
スタート地点の空間を決めて、隣(ランダム)とつなげる(=土を掘る)
ただし、つなげる先が4方を土で囲まれていなければならない
どこも掘れなくなったら、掘れる場所まで通路を戻っていく
(戻るために、掘るために通っていった通路の全座標を覚えておくこと)
戻るための座標の覚え方はスタックの概念を知らないと厳しいかも
スタート地点まで戻ってしまったら、それは掘れる場所は全部掘った場合のみなので終了
これで最初に1個飛ばしで存在した全空間がつながる
わかってもらえたかな?
0418生徒α
04/12/19 03:05:58ID:mkdjQU320419名前は開発中のものです。
04/12/19 03:47:15ID:kGW+p0Ldローグ風なら
●部屋や通路や壁
■通路や壁
□壁
●■●■●
■□■□■
●■●■●
■□■□■
●■●■●
これを穴掘りで通路つくる(=全部の部屋がつながっている)。
行き止まりばかりになるので、通路をつけたす。
これを元に部屋を置いて通路をつなげて完成。
さらに簡単な棒倒しでもいけるっぽい
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洞窟のようなものもあるし、結構バリエーション豊富だ。
0422名前は開発中のものです。
04/12/19 18:13:08ID:cKlDBmlQなんか遊べるものウプしてくれるの?
0423名前は開発中のものです。
04/12/19 18:25:40ID:99IBDRAn0424名前は開発中のものです。
04/12/19 19:16:46ID:P175sgFgここを見た誰かが作るでしょ。
俺も多分作る。
さらに共有化された知識は、将来の誰かにとっても有益になる。
情報の共有化は、より高度なゲームが作られることを期待できる。
0425名前は開発中のものです。
04/12/19 21:07:31ID:gAUF82dIいいこと言うな。
0426名前は開発中のものです。
04/12/20 03:42:01ID:r12pJ3eaあるよ。このスレでもいくつか紹介されてるし。
オレは>>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このページ見たけどソースあるの気づかなかったorz
さっそくダウンしました。
0428名前は開発中のものです。
04/12/20 12:11:38ID:glvff/Ex0429名前は開発中のものです。
04/12/20 21:49:42ID:gXD9M5+e0430426
04/12/21 05:24:29ID:XvOexZq5ん???
オレの書き方がまずかったか…
読み返してみると、後半部分
解析する際のヒントのつもりが、
パクって利用する手引きに読めんこともないな…
組み込みも簡単だし、これ使っときゃいいじゃん!
て言ってるわけじゃないんで、念のため。
基本スタンスは>>424さんが言ってるような感じでヨロシク
と言うことで、このダンジョン生成プログラムについて
ざっと見た感じ、アルゴリズムは>>124のアイデアに近い希ガス
1.オーソドックスな迷路生成アルゴリズムで通路を作成(この時点ではただの迷路)
2.通路を二段階で整形(部屋をイイ感じで配置するための下準備?)
3.迷路のサイズを2倍+1にして通路を引き伸ばす(>>128でビンゴか?)
4.部屋同士が重ならないように配置(この時点で>>127みたいな状態になることがある)
5.壁を生成(これにより>>127みたいな状態が回避される)
まだちゃんと読んでないけど、2の仕組みが良くできてるとおもた。
あと、これ三次元にも対応してるっぽい(Z座標が存在する)。
まだ試してないんでどういうダンジョンが生成されるのかわからんが
0431名前は開発中のものです。
04/12/21 12:49:36ID:JVBcPoT41マスを3x3マス分として考えて、通路は1マス分に縮小。
んで、部屋と通路の扉部分を結合。
ってしたらrogue likeにも使えないかな?
0432426
04/12/22 06:03:37ID:M7D/hlJXそのアイデア、試しに実装してみました。
結果としては、それなりに使えるんじゃないかな?と思います。
ただ通路に関しては、どうしても直線的になりがちで
また部屋に密接して作られちゃうので
見る人によっては、面白みに欠けるとみなすかも?
一応、生成オプション弄って使えそうなやつを作ってみたんで
興味のある方はどうぞ
ttp://up.isp.2ch.net/up/2a3bb0ad177e.txt
0433名前は開発中のものです。
04/12/22 18:54:05ID:vtsQN5YFダンジョンゲーとしては各フロアにバリエーションがあったほうが楽しいから、
一味違うフロアを生成できるよういろいろなアルゴリズムを持つのは良いことだね
0434名前は開発中のものです。
04/12/22 21:18:29ID:OzD0Okhk0435名前は開発中のものです。
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いいよいいよー
0438名前は開発中のものです。
04/12/26 11:36:20ID:4W3IAVrJ広過ぎて従来のトルネコ&シレンの腹制度だと2Fで食料なくなりそうだなw
0439名前は開発中のものです。
04/12/26 18:40:24ID:U7hutUImバランス取り方次第かと
0440名前は開発中のものです。
04/12/27 02:49:08ID:/qB0yEjoNetHackとの差に泣ける。
NetHackだと照明屋に蝋燭しか無い事があるし。
まぁ蝋燭が足りないよりはマシなんだが。
0441名前は開発中のものです。
04/12/27 15:37:31ID:oLkGYQCRNetHackだと蝋燭ないとイベントのせいでクリア不可能だし、
序盤は空腹が天敵だもんな。
その点、*bandは、初期の町で食糧や空腹の巻物が買い放題、
照明も買い放題の上、途中で消費なしの永久光源が拾えるしな
0442名前は開発中のものです。
04/12/27 21:44:09ID:7R5BsBxRすげぇ。ただ、部屋が繋がりすぎのような・・・行き止まりの通路も欲しい
0443435
04/12/28 00:53:12ID:89xDDhd/とりあえず歩けるようにしました。
マップの広さなど起動時にランダムで決まります。
描画にDirectX9.0cを使用しているので
ランタイムが必要です。
描画部分がかなり重いです。
マップが繋がってない、
永久ループするなど不具合が残ってます。
0444名前は開発中のものです。
04/12/28 01:50:03ID:9LMc91BVこうやって実際に毎回違うmapを歩けると可能性を感じるなー
0445名前は開発中のものです。
04/12/28 04:19:44ID:eZh/IZfo人工物っぽいダンジョンばかりでこれはこれで(・∀・)イイ!!
なんでこんなに重いの?
0446名前は開発中のものです。
05/01/02 21:08:00ID:VyyXW717すごい!完成したらぜひソースを見せてほしいです。
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真中の方にできてる丸っぽい部屋を見て「お?」って思ったけど、ループするような通路ができてないよね。
その辺をどうにかして、通路の太さを適当に拡張するようにしたら自然にできた洞窟っぽくなるかも?
0449447
05/01/17 07:38:51ID:/ZZCwhqlアドバイスさんくす!
ループした洞窟てのは、
ttp://namihei.zone.ne.jp/upup/up/31432.gif
の中央下の感じのことでいいのかな?
これなら一応実装済みなんだけどなぁ・・・
通路広くするのはちょいと考えてみる。
んでは、仕事いてくる〜 (^ー^)ノ
0450名前は開発中のものです。
05/01/17 14:01:44ID:nHigXm2k回避できてるようだし、かなり良いね。
0451名前は開発中のものです。
05/02/05 17:19:23ID:T9zbJJCg0452名前は開発中のものです。
05/02/13 19:14:35ID:BfA7CsB3ルナドンって、定型を使いまわしだと思う。
0453名前は開発中のものです。
05/02/13 19:37:52ID:YiLMMcfO0454名前は開発中のものです。
05/02/26 18:16:56ID:XLBYmv/q4方向とも穴を掘れなくなったときに次にスタート地点として選ぶポイントはどうやって選ぶんでしょうか?
今まで掘った穴の中から次のスタート地点をランダムに選ぶとなると、掘った全ての座標の中から選ぶって事になりますよね。
今、map[56][64]という配列に穴か壁を入れてるんですが、
rand()で56*64の中の一つを選んでそれが穴ならそのポイントを選ぶっていう風にすると無駄が多すぎるし…
誰かご教授おねがいします。
0455名前は開発中のものです。
05/02/26 18:58:48ID:+BfzmYZO4方向の穴が空いていない地点から掘り出すというのはどう?
0456名前は開発中のものです。
05/02/26 19:41:56ID:XLBYmv/qそれだと掘り方がランダムだから配列の大きさが分からないし、
後半になるとさかのぼる量が増えてしまって時間がかかる様な気がするのですが…
0457名前は開発中のものです。
05/02/26 23:26:37ID:cBNZPZ5Vマーカつけてればそんなに深くはならない。
0458名前は開発中のものです。
05/02/27 00:38:28ID:jOdBjCDc1.listに穴を掘った場所を追加しながら進んでいく
2.行き止まりになったらlistの要素数が上限のランダム数を発生させる
3.ランダム数番目の要素がスタートに出来るならそのまま1へ戻り、出来ない場合はその要素を削除し、2へ
こんな感じになるのでしょうか?取り敢えずやってみます。
0459名前は開発中のものです。
05/02/27 06:36:24ID:i5A/74X40460名前は開発中のものです。
05/02/27 13:10:28ID:jOdBjCDc理解が悪くてすいません。
ところでlist構造は一つの要素に付き二つ以上の内容を記憶出来るのでしょうか?
今、map配列が2次元配列なのでmap[y][x]のyとxを格納したいのですが…
list構造を二つ用いて同時に入れるしかないんでしょうか?
0461名前は開発中のものです。
05/02/27 14:31:32ID:jOdBjCDcどうすれば良いか完全に分からなくなりました
vectorだと要素の追加・削除が出来ないし…
0462名前は開発中のものです。
05/02/27 15:10:01ID:G4Vo/2DVvectorで要素の追加削除出来るべ
つうか出来なかったらどうやって使うのよ
0463名前は開発中のものです。
05/02/27 15:13:30ID:jOdBjCDcここを見ていたんですが、良く見たら適さないだけで追加も出来るんですね…
ttp://www5c.biglobe.ne.jp/~ecb/cpp/07_05.html
結局dequeというので今は試しているんですが、頭の中がごちゃごちゃになってきました
0464名前は開発中のものです。
05/02/27 16:50:19ID: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 は配列と同じ構造なので途中の要素を削除すると非効率。
でも、終端からの削除ならサイズを変更するだけで済むので簡単にできる。
んじゃ、頑張っとくれ。
0465名前は開発中のものです。
05/02/27 17:05:33ID:jOdBjCDcなるほど。そんなやり方があるとは…
数時間挑んだのですが未だに解決してません。
その上ソースがぐちゃぐちゃになってもう駄目っぽいので、その方法でやり直してみます。
0466名前は開発中のものです。
05/02/27 23:37:25ID:jOdBjCDcアドバイスしてくれた人、本当にありがとうございました。
0467名前は開発中のものです。
05/02/28 00:17:26ID:HqZ8iPxTおめでとう。役に立ったみたいで、こちらも嬉しいよ。
これからもゲーム制作を楽しみなー。
0468名前は開発中のものです。
2005/03/29(火) 09:50:20ID:Kg3P9ufG0469名前は開発中のものです。
2005/05/22(日) 17:32:21ID:lIm3yEmY0470名前は開発中のものです。
2005/05/23(月) 22:58:20ID:5z/chgyh0471名前は開発中のものです。
2005/06/03(金) 23:58:46ID:k+KD2UyV以前ここで、ローグの解析実況をした日は
なつかしい思い出だ・・・。
0472名前は開発中のものです。
2005/06/04(土) 00:50:39ID:j7+2UQCm0473名前は開発中のものです。
2005/06/04(土) 02:55:43ID:qAYKJL3rあっちの鍵を拾ってこっちの扉を開けて・・・という系統のパズルなやつ。
ちゃんとクリアできるような仕掛けをランダムで作るのはどうしたらいいのかわからんけど。
0474名前は開発中のものです。
2005/06/04(土) 03:33:42ID:j7+2UQCm0475名前は開発中のものです。
2005/06/04(土) 03:42:12ID:yByGcKlF「鍵をかけながら鍵を置いて回る人」を仮想的に動かせばいい
と思って今考えてるとこだ。
うまくやれば大がかりな仕掛けもできると思うんだけど。
0476名前は開発中のものです。
2005/06/04(土) 10:37:14ID:2Lx0HeyL0477名前は開発中のものです。
2005/06/04(土) 10:41:49ID:Mx0GDmAL0478名前は開発中のものです。
2005/06/04(土) 10:54:52ID:j7+2UQCmはっきり書くと、こんな感じかな。
ダンジョンはたとえばAからFまでの6つの区域に分かれている。
またこの世の中にはaからjまでの10この鍵がある。
ある区域から別の区域に移動するためには、
あらかじめ定められた鍵をすべて持っていないといけない。
たとえば、AからDへ移動するためには鍵aとgとhが必要。
各区域には、そこで得られる鍵が定められていて、
その区域に立ち入ることによって、その鍵を得ることができる。
たとえば、A区域では鍵aとbとcが得られる。
プレーヤは最初スタート地点と呼ばれるある特定の区域にいる。
ゴール地点と呼ばれる特定の区域に到達することをめざす。
それは可能であろうか。――
0479名前は開発中のものです。
2005/06/04(土) 15:26:07ID:qAYKJL3rそのアイテムを手に入れるには別なアイテムが・・・って話と似てるね。
0480名前は開発中のものです。
2005/06/04(土) 15:46:59ID:j7+2UQCmそうそれ、ずばりそれ
コンピュータがそういうシナリオを自分で作るとき、
絶対に抜けられないダンジョンになると困るから、どうしよう、みたいな話
0481名前は開発中のものです。
2005/06/04(土) 22:35:23ID:UmKVEftsの考え方でいけそうだけどなあ
0482名前は開発中のものです。
2005/06/14(火) 16:29:15ID:WjZVWI+e鍵一つ使って、扉の中の鍵を3つ取り出すような場合に
最後の一つをそこに使わず、別な扉に使ってしまったらクリアできなくなるな。
でも扉の奥には必ず鍵一つが原則、としたらつまらなくなりそうだし。
やっぱりこのシステムは固有鍵しか無理なのか?
それとも階段上り下りで内部構造リセットとかするべきか?
0483名前は開発中のものです。
2005/06/14(火) 17:21:49ID:+dyJFCQD0484名前は開発中のものです。
2005/06/15(水) 10:00:12ID:JLPVloti\ __ /
_ (m) _ピコーン
|ミ|
/ `´ \ そうだ!共通キーだけ非消耗品にすればいいんだ!
('A`)
ノヽノヽ
くく
0485名前は開発中のものです。
2005/06/17(金) 14:13:36ID:LQLcT/tA鍵を無くしてしまったときはどうするの?
0486名前は開発中のものです。
2005/06/17(金) 17:42:39ID:16kvVQkz鍵は特殊なあつかいのアイテムということで
「それを捨てるなんてとんでもない!」みたいな感じで
投げること自体をできなくする
(ぬすむ力をもった敵だとか、持ち物がさびる罠だとか、
そういったものがあればそれらも同様)
それか、世界から鍵が消えた時点で
「鍵の取れる場所」に鍵が再生成される
このどっちかじゃないかな
0487485
2005/06/17(金) 22:59:26ID:LQLcT/tA普通のRPGなら、特殊アイテム扱いで良いと思うけど、
ローグライクなら、
石に躓いてアイテム(鍵)を床にぶちまけて、
鍵を取ろうとしたらドラゴン・ブレスで鍵が燃えてしまったとか、
鍵を盗まれたので、その盗んだモンスターから鍵を取り返そうとして
追いかけていると、落とし穴に落ちて「うわーーーーーっ」とか、
○×仙人の目が光った! プレーヤーは混乱した!
プレーヤーは鍵を投げた! 鍵は○×仙人に1のダメージを与えた…orz
とかなるように一般アイテムと同じ扱いの方が良いと思ったので。
なので、鍵を再生成する方法の方が良いか。
0488名前は開発中のものです。
2005/06/17(金) 23:08:09ID:16kvVQkzまあ多分具体的には、その「鍵の取れる場所」に人が行ったときに
世界に(あるいは来た人の持ち物に)その鍵が無ければ、得られる、
とかそんな感じか。
「すねが光った! くめの仙人は混乱した!」
0489名前は開発中のものです。
2005/06/17(金) 23:30:09ID:Z+DUfmOd行動でも無くならないように出来てるし(たしか)、
そのカギが進む上で絶対に必要な物なら、上の例で言えば敵にぶつけてもそのカギのみは
無くならないようにするとか、盗まれないとかブレスで燃えないとかしたほうがいい気がする。
>>488の言う通り、Wiz風に、ゲームからそのアイテムが消滅したら取得イベント再復活でもいいけども。
でもネトハクのベルは5回充填して使い切るとハマルんだよな。
0490名前は開発中のものです。
2005/07/03(日) 21:19:00ID:jPpx4eRu0491名前は開発中のものです。
2005/07/20(水) 01:23:38ID:IONaYr2+0492名前は開発中のものです。
2005/07/21(木) 16:42:46ID:moDvbKPv参考にしたいのですが。。
0493名前は開発中のものです。
2005/07/21(木) 17:12:04ID:bKKYlRPWhttp://search.auctions.yahoo.co.jp/jp/search/auc?p=%B1%C7%B2%E8%BE%F0%CA%F3&auccat=0&alocale=0jp&acc=jp
0494名前は開発中のものです。
2005/07/22(金) 04:08:53ID:IbpJtLPMベーマガにそう言うコードが乗っかって説明されていたんやけどなぁ。
最近の若い者は どーやってそれを知るんやろ。
とか思ってみますた。
0495名前は開発中のものです。
2005/07/22(金) 05:35:31ID:lGFI0dtKしれんけど、今はなあ。
0497名前は開発中のものです。
2005/07/22(金) 20:54:26ID:rRyf+a+60498名前は開発中のものです。
2005/07/22(金) 21:09:56ID:p1EXMd0C0499名前は開発中のものです。
2005/07/22(金) 22:18:14ID:eBOgVrEi0500名前は開発中のものです。
2005/07/23(土) 02:43:43ID:35joZALW0501名前は開発中のものです。
2005/07/23(土) 11:21:52ID:ozDAdyD2「GK乙」
「妊娠乙」
「GK乙」
「妊娠乙」
「GK乙」
「妊娠乙」
0502名前は開発中のものです。
2005/07/24(日) 15:49:55ID:zoFI8ZSAたいていのことは解決するけど。
そもそも自分が考え付く疑問など当の昔に誰かが解答してることの方が多い。
0503名前は開発中のものです。
2005/07/24(日) 19:44:58ID:pCZEm45I0504名前は開発中のものです。
2005/07/30(土) 11:41:34ID:xQd4foTu0505名前は開発中のものです。
2005/08/10(水) 16:55:59ID:Mp7vk5CP通路を作る
終了
0506名前は開発中のものです。
2005/08/10(水) 22:07:44ID:EptwwJpdそれがムズい
0507名前は開発中のものです。
2005/08/10(水) 23:13:52ID:7umUvbw50508名前は開発中のものです。
2005/08/11(木) 21:23:09ID:nKOENxeI部屋を作るんじゃなくて壁を作るんだ
0509名前は開発中のものです。
2005/08/12(金) 03:04:47ID:jqER8Bv1全部のブロック(オール移動不能領域)をつくる
:たとえば8*8
ブロックに穴を開けていき、入り口と目的地を繋ぐ通路をつくる
あとは部屋を壁のある座標へランダムに配置
:ランダムする座標は7*7以内に納める
(部屋は罠が置いてあったり宝が置いてあったり)
終了。
欠点は目的地までの道に常に一定のルートがあること。
という初級ランダム迷宮の作成法じゃないのかね。
0510名前は開発中のものです。
2005/09/05(月) 15:06:03ID:2it76JrP何でも分かる。何でも揃う。英語で検索すると特にな。
むしろ最近はぐぐれば必要な情報、それもほぼ最高品質の情報がすぐでてくるから、
逆にやる気を削ぐような面すらある気がするよ。
俺みたいな愚民がいくら独力で考え抜いたところでピラミッドの下層か中層止まりってーか。
どっかで話題になってた、「ネットによっていきなり世界統一ランキングに放り込まれる」ってやつだ。
久しぶりに昔のベーマガやMSX-FANやOh!Xの解説記事読んでみたら、ヌルいのなんの。
0511名前は開発中のものです。
2005/09/05(月) 21:18:37ID:O8hfU7a+0512名前は開発中のものです。
2005/09/07(水) 02:00:21ID:M1zYQhTt■ このスレッドは過去ログ倉庫に格納されています