【ダンジョン】 自動生成 2 【地形】
■ このスレッドは過去ログ倉庫に格納されています
ランダムでダンジョンを自動作成する手法についてのスレです。 ローグタイプやシレンタイプのダンジョンや、街並みや地形など。 ※過去スレ ダンジョン自動生成 http://pc11.2ch.net/test/read.cgi/gamedev/1027084016/ 関連サイトは>>2 >>3 >>100 氏 通路が分かりやすいように壁と床のテクスチャをてきとーに代えてみた。 テクスチャの横線がガクガクしてる事に気付いた。 もっと軽くする工夫を思いついたけどあんまり時間が無い。 まとまった時間欲しい・・・ 初めて遊んでみたけどz(扉を開ける)で前進するのがいいね。 WizでK(Kick)で進んでたの思い出した。 敵と宝箱、そしてレベルアップがあればブラウザのタブを切り替えて、ちょこちょこっと遊んでしまいそうだ。 ただそれはすれ違いになってしまうけど。ともかく頑張ってください。 >>103 これは地上マップ生成かな? 実行ファイルもあげてほしい >>104 ダンジョン自動生成 まだ未完成なので、出来上がったら再度来ます このスレっぽい話題だったので ttp://www.inside-games.jp/news/258/25833.html >107 シナリオを自動生成ってどうやるんだろうね? 誰が何をどうしたのランダムぐらいしか思いつかない。 ダンスで、アフロを、でかくしろ!とか。 >>108 物語の流れにはいくつか基本的な組み合わせがあるので、 その流れの組み合わせをランダムに繋げる方法があるよ。 その組み合わせ方について書かれている本としては、 ウラジミール・プロップの『昔話の形態学』が有名だね。 詳しくは↓のサイトでも読んでくれ。 ttp://www.trpg.net/user/el./fct/labo/u_p.htm ttp://gumina.sakura.ne.jp/CREATION/OLD/STORY/OLDTALE.htm ttp://gumina.sakura.ne.jp/CREATION/OLD/STORY/OLDTALE2.htm 俺好みの話題になってきた 前スレでもシナリオの話題は出てたね でも、あれはドラクエタイプのシナリオだったけど (金の鍵を設置→金の扉の向こうに次の世界への入り口を設置、とか) TRPGには前からノウハウがあって、俺もサイコロを振ってシナリオ作ったりしてたよ こことか詳しい http://www.trpg-labo.com/modules/article/index.php?articleid=38 >>109 の方法論と組み合わせれば、結構実用的なものができるかも? そこまで凝ると、小説のあらすじメーカーができそうだな。 央華封神ってTRPGがあったんだけど、それをもとにしたTCGも作られてたんですよ。 そのTCGが「物語を作って得点を競う」っていうものだったそうなんで、ちょっと関係あるかもしれませんね。 なんでこの話題で、ティルナノーグが出てこないんだ。 つーか、PC98の頃の話なんてしてもだれもわからんか・・・・。orz. ティルナノーグはドラクエタイプのシナリオ生成だよね。 物語主体のシナリオ生成ではなかったような・・・? つWikipedia これを読む限りでは>109なのかな。 Elonaというゲームが、自動生成っぽい感じ・・・ Elona http://homepage3.nifty.com/rfish/elona_top.html シナリオといっても、基本、おつかいだけど そういう自動小説の物語の確信に関わる部分で ○○は××だと思っていたが、実は真相は△△だった! みたいなどんでん返しが欲しいところだけど まさかそこまで実装できてるものはないよなぁ。 自動小説だとまた違うだろ どちらにしろテンプレートを考えれば実装は難しくもない 需要が無いだけ ストーリーの自動生成という話に関して 水声社から出ている 「可能世界・人工知能・物語理論」 マリー=ロール・ライアン 著 岩松正洋 約 ISBN4-89176-550 …を先日入手したが、まだ読む時間がとれない。・゚・(ノД`)・゚・。 ランダムで4コマというのがあってだな。なかなかカオスだぞ。 この話題は、実装は簡単だけど手間はかかるから現物が出てこないのが難だね そういや、思いだした。 昔出てた、天国から来た男というゲーム?が、 シナリオ自動生成だった気がする しかし、当時、クソ高くて手が出なかった orz 天国から来た男 http://www.electricsheep.co.jp/amfh.shtml 思ったんだが、RPGのシナリオとノベルゲームのシナリオの話題がごっちゃになってるなw 物語理論か…… 俺のところの教授の分野じゃないか…… ジャンルどこよ?文学かな?それともコンピューター系かな? 俺も学生のころウラジーミルプロップにはまりかけたよ だとしたら文系の膨大な資料が必要になってくるだろうけど たぶん文系教授はものごっつ嫌がりそうだ。 文系教授がネット上に公開している↓のような資料はあった。 物語要素事典 ttp://www.agu.ac.jp/~kamiyama/index.html SCIgen - An Automatic CS Paper Generator http://pdos.csail.mit.edu/scigen/ 論文自動生成機らしい 英語なので、評価できんけど いいんじゃない? 前スレもダンジョン以外をやって今回スレタイ変わったんだし でも、新スレ立てようとしたとたん、こちらに誘導されるだろうなw 言いたいことはわかるが、別スレ立てたって見るメンバー同じだろ ■ダンジョン自動生成アプリ ttp://gamdev.org/up/img/10938.zip ttp://gamdev.org/up/img/10939.png ■動作環境 ・.NetFrameWork 2.0 が動くこと ■操作方法 ReadMe読んでください 自然窟っぽいダンジョン生成を目標に作りました。 >>140 いいね! 部屋だけの生成だったのか 繋がってない部屋にはうねうねした通路を 渡してやると完璧かも ヘルプにあるのは矩形のことだよね。 小さい四角を重なり合うように配置している? 大きくすると時間かかるのはコリジョンチェックのため? どういうアルゴリズムでやっているのか興味がある。 >>143 あー恥ずかしい、ずっと たんけい って読んでた そりゃ変換できないわな ■アルゴリズム 1)フィールド(200x200のマップの描画先)からランダムで一点選び、基点とする 2)左右、上下をそれぞれランダムでどちらかに絞り、矩形サイズ定数内の値をランダムに取得して矩形のX,Yを得る 3)基点から 2) で求めた値を使って矩形を生成。このとき、矩形がフィールドからはみ出すことがあれば、 2) からやり直す 4) 3) で生成した矩形内からランダムで一点選び、基点とする。矩形数が設定値に達していなかったら 2) へもどる Mキーを1回押すと、これが実行される。 矩形が大きいと時間がかかるのは、 3) で処理戻りが発生しやすいからだと思うけど、とてもトレースできないので定かではない。 矩形サイズ下限を100とかにすると、基点によっては無限ループが発生する ■ダンジョン自動生成アプリ(誤字修正版) ttp://gamdev.org/up/img/10940.zip どうせ1も2もランダムなら、2を先にしたらどうかな そうすれば戻りはなくせる もちろん結果は変わってしまうけど >>140 GJ Shash&Hack系のダンジョンに合いそう つながらねーと思って繰り返すと、それっぽくなるんだよなー。 面白い ■ダンジョン自動生成アプリ ttp://gamdev.org/up/img/10989.zip ■動作環境 ・.NetFrameWork 2.0 が動くこと ■操作方法 ReadMe読んでください 部屋の連結などを実装 処理時間が猛烈にかかるのは、私が言語仕様をしっかり理解していないから、な気がする 異常にページフォルトが頻発してるね(暴走してるのかと思って一瞬焦ったお・・) プロファイラでメモリ使用状況見てみたけど(個=インスタンス数) ・全体 - 5.670.000個 - 約117M ・Dictionary<T,U>.Entry - 270,000個 - 41M(34.2%) ・DungeonAutoCreate.Data.arrow - 3,300,000個 - 38M(32.2%) ・Int32 - 1,600,000個 - 18M(15.5%) ・Int32[] - 270,000個 - 13M(10.5%) ・Dictionary<T,U> - 90,000個 - 4.5M(3.8%) これで全体の96.2%を占めている。 ・DungeonAutoCreate.Block - 90,000個 - 1.7M(1.5%) ・DungeonAutoCreate.Block[] - 10,000個 - 1.7M(1.4%) ここまで入れると99.1% 330万インスタンスあるData.arrowってのも気にはなるけど、何で辞書がこんなに大量に使われてるの? GCも何度か発生して殆どのインスタンスがGEN2になっている辺りも改善の余地がある(=無駄なGCが発生している) 処理速度に関しては明らかにボトルネックは別なので見ていない。 あと、ReadMeに書いてあるサイズ変更した場合に大量のメモリが消費される問題だけど 「古いフィールドを破棄→新しいフィールドを作成」の間で手動でGCを実行してやるのが効果的だと思う。 既存のコードを極力変更せずに対処してみた Dictionary<Data.arrow, Block> 互換の辞書クラスを作成 ・IDictionary<Data.arrow, Block>を実装 > ArrowDict.cs ・Dictionaryとして使えるが、実態は配列として実装されている internal class ArrowDict : IDictionary<Data.arrow, Block> ttp://gamdev.org/up/img/10994.zip ↑実際のコード例(ちょっと手抜き) > Block.cs ・ArrowDictを使うように修正 // public Dictionary<Data.arrow, Block> arw = new Dictionary<Data.arrow, Block>(); public ArrowDict arw = new ArrowDict(); これでメモリ使用量が激減(117M→10M)して、処理速度が大幅に改善する筈。 これ以上の最適化が必要なら、自分でパフォーマンス計測して頑張ってくださいな。 疑似生命体に掘らせるアイデア。 最初は部屋一つとそこの主である親が一つ。親は通路を掘る子供を作る。 子供はある程度通路を掘ると、エネルギーが貯まって親になり そこに新しく部屋を作り、動かなくなる。そして通路を掘る子供を作る。 別な部屋に突き当たった子は、その部屋の主に吸収されて消滅。 吸収した親は増えたエネルギーのぶん部屋を大きくする。 全部壁の状態から 掘り進めるってアルゴリズムはあったけど >吸収した親は増えたエネルギーのぶん部屋を大きくする。 ってのはいいな >>149-150 占有メモリがかなーり減りました。サンクス。 Dictionaryのパフォーマンスがよろしくない、というよりenumの使い方がまずかったんだろうか。 >330万インスタンスあるData.arrowってのも気にはなるけど、何で辞書がこんなに大量に使われてるの? もうお察しかもわかりませんが、Data.Arrowは方向を示すenumです。(ナナメ有り上下左右の8つ) マップチップ(Block)のインスタンスに Dictionary<Data.Arrow,Block> を持たせて、マップチップの隣接を表現しよう、という考えです。 >>154 お役に立てたようで嬉しいです。 # 解決の為にコードを覗き見したのはすまなかった。 enumの使い方は特に間違ってないと思いますよ。 今回のケースでは"大量の辞書を使用した"のが直接の問題ですかねぇ ・辞書自体がインデックスを管理したりするためにメモリを消費する ・後から追加するために余分な領域を確保する(コレクション全般) (ただし、最初に大きさを指定してやれば必要以上に確保してしまう事はない) この辺が影響してるのかな?とは思うけどあまり詳しくは分からない。 (実際に>>149 で使用状況見た時に「こんなに使うのか?!」と衝撃を受けました) 最後に何かの時に役に立つかも知れないので、>>149 で使ったツールを貼っておきま CLR Profiler 2.0 ttp://www.microsoft.com/downloads/details.aspx?familyid=A362781C-3870-43BE-8926-862B40AA0CD0&displaylang=en シナリオ生成で思い出したが、少女漫画の恋愛ものの話が どれもこれも似たり寄ったりすぎるので、恋愛ストーリーを 自動で作成できないかと考えてた時期があったな。 しかも物理的なシミュレーションを使用www 線で結んだ距離で縁を、好き嫌いを引力斥力に設定。 さすがに他のパラメーターが多すぎて諦めたが。 恋愛ストーリー自動生成だったら 18禁ノベルの濡れ場シーン自動生成のほうがまだ簡単そうだな。 あれって制限版以外入手できるの? どっかで必ず打ち砕かれるのには笑った。 >>162 なんとかの賞を取ったシナリオと、シナリオと独立して動作するリーダーがダウンロードできた気がする。 そのシナリオだと18禁シーンもそれなりに描写があったような。 ダンジョンゲームプログラミング ttp://www.amazon.co.jp/dp/4797346280/ 内容分からんがとりあえず買ってみるわ。 どうやらここの分野+αっぽいけどレポお願いします。 |┃三 , -.―――--.、 |┃三 ,イ,,i、リ,,リ,,ノノ,,;;;;;;;;ヽ |┃ .i;}' "ミ;;;;:} |┃ |} ,,..、_、 , _,,,..、 |;;;:| |┃ ≡ |} ,_tュ,〈 ヒ''tュ_ i;;;;| |┃ | ー' | ` - ト'{ |┃ .「| イ_i _ >、 }〉} _________ |┃三 `{| _;;iill|||;|||llii;;,>、 .!-' / |┃ | ='" | < 同志>>166 。シベリアが君を待っている |┃ i゙ 、_ ゙,,, ,, ' { \ 一日中 木でも数えていたまえ |┃ 丿\  ̄ ̄ _,,-"ヽ \ |┃ ≡'"~ヽ \、_;;,..-" _ ,i`ー-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |┃ ヽ、oヽ/ \ /o/ | ガラッ http://etc7.2ch.net/siberia/ >>164 買ったわ。 生成に関してはここ見てる人には目新しいことはないかもしれない。 ここで生成関連ってRogueとあと他にあったっけ。 >>168 ローグライクのゲームを作ってみたいって人に薦めるのは適当? >>170 いいんじゃね? ダンジョン、敵、移動方法、アイテムなんかに触れてたし、 ダンジョンゲームをこれから作りたいって人には導入としていいと思う。 こういう本ではあたりまえだけど、最低限のプログラムの知識があるのは前提ね。 >>164 のダンジョン生成のアルゴリズム何だった? そのうち立ち読みしてみるが… >>172 ・全ての区画に壁がある状態を始めに作って、 そこから各区画から壁を一枚取り除く ・一つの大きい部屋を半分に区切る。 一方の部屋をさらに半分に区切る。 何回か繰り返す。 区切った時の境界に向かって道を作る 余談だけど、流石にランダム生成ってだけあってMT法の紹介はあった。 ひょっとしてその2種類だけ? 洞窟風ダンジョンの作り方とかそういうのとか無かったの。 移動方法ねぇ。 斜め移動は判定を加えないとすり抜けちゃうから気をつけてね、位か。 穴床 床穴 だったらすり抜けOKだけど 壁床 床壁 だったらすり抜けは不可。 壁床 床穴 だったら・・・・どうしよう? 171も多分そうだと思うけど敵の移動よ(泣)。 未読だからひょっとすると本当に@の移動かもしれないけど。 あー。 馬鹿のように@に寄っていくのではなく ときどきは乱数的に動くとよいとかそういう話か >>183 自キャラも敵キャラも扱ってるよ。 トラッキングアルゴリズムを利用して自キャラに近づいたり、体力が減ったら逆に自キャラから離れたり。 ページ数的に何種類も掲載できないのかもしれないし、作者が単に知らないのかもしれない。 やっと立ち読みできたけどなんか物足りない。 出だしからRogueのヘビは's'とか書いてあるし、まぁ気持ちは分かる。 これいいな でもここまでリアルだと逆に この無秩序で均等なスプロールぶりが薄気味悪くなってくる ロボットがあまりにリアルだと逆に薄気味悪くなるのと同じか 適当に蛇行させてある程度でストップさせればいいかも JavaじゃなくてProcessingじゃん 手軽さが素敵よね このコード自体は、大きさに意味付けしにくそうだよな ある段階で建物の単位固定して埋め尽くすロジックに切り替えないとゲーム転用は無理かなー なんか昔ちょっと作って放置してたやつがあったから 改造して自動生成にしてみた ttp://www11.axfc.net/uploader/20/so/He_104434.html pass: @ Wizardry系のゲームでこの中を歩きまわったら 楽しいかもなって思ってる オートマッピングありでも無意味になるのが、ちょっと楽しそう。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる