ランダムでダンジョンを自動作成する手法についてのスレです。
ローグタイプやシレンタイプのダンジョンや、街並みや地形など。
※過去スレ
ダンジョン自動生成
http://pc11.2ch.net/test/read.cgi/gamedev/1027084016/
関連サイトは>>2>>3
【ダンジョン】 自動生成 2 【地形】
■ このスレッドは過去ログ倉庫に格納されています
2007/06/19(火) 12:21:35ID:oqLsw/ra
2007/06/19(火) 12:22:20ID:oqLsw/ra
※参考サイト
★Racanhack コード解説 (日本語)
http://racanhack.sourceforge.jp/rhdoc/intromaze.html
★迷路の自動生成 「C言語によるアルゴリズム辞典」 (日本語)
http://www.matsusaka-u.ac.jp/~okumura/algo/
↓サンプルコード(src/maze.c)
ftp://ftp.matsusaka-u.ac.jp/pub/algorithms
★アリの巣作り(画像紹介のみ。日本語)
ttp://acolyte.t.u-tokyo.ac.jp/~kaityo/ant2.html
巡回セールスマン問題を「アリのフェロモン」をシミュして解くアプレットらしい。
ttp://uk.geocities.com/markcsinclair/aco.html
★ソース付ウィンドウズ版ローグクローン2 (日本語)
ttp://www.freak.ne.jp/HEPOPO/
★RogueLikeのマップの作り方 (英語)
Dungeondweller - www.roguelikedevelopment.org
http://www.roguelikedevelopment.org/php/category/showCategory.php?path=development/&category=MAP
★D&D用 (英語)
ttp://www.aarg.net/%7Eminam/dungeon.cgi
★ドラクエ風 進可 ◆Sinka1my5k (日本語)
ttp://www.interq.or.jp/moonstone/person/RRL/index.html
★Racanhack コード解説 (日本語)
http://racanhack.sourceforge.jp/rhdoc/intromaze.html
★迷路の自動生成 「C言語によるアルゴリズム辞典」 (日本語)
http://www.matsusaka-u.ac.jp/~okumura/algo/
↓サンプルコード(src/maze.c)
ftp://ftp.matsusaka-u.ac.jp/pub/algorithms
★アリの巣作り(画像紹介のみ。日本語)
ttp://acolyte.t.u-tokyo.ac.jp/~kaityo/ant2.html
巡回セールスマン問題を「アリのフェロモン」をシミュして解くアプレットらしい。
ttp://uk.geocities.com/markcsinclair/aco.html
★ソース付ウィンドウズ版ローグクローン2 (日本語)
ttp://www.freak.ne.jp/HEPOPO/
★RogueLikeのマップの作り方 (英語)
Dungeondweller - www.roguelikedevelopment.org
http://www.roguelikedevelopment.org/php/category/showCategory.php?path=development/&category=MAP
★D&D用 (英語)
ttp://www.aarg.net/%7Eminam/dungeon.cgi
★ドラクエ風 進可 ◆Sinka1my5k (日本語)
ttp://www.interq.or.jp/moonstone/person/RRL/index.html
2007/06/19(火) 12:23:12ID:oqLsw/ra
※参考論文
★自律的に変化する仮想都市の自動生成に関する研究 (日本語)
ttp://www.tulips.tsukuba.ac.jp/pub/dl/e_thesis/ko/honda2004.pdf
★時間変化する仮想都市における道路網の自動生成 (日本語)
ttp://www.cs.tsukuba.ac.jp/H15Syuron/200205246.pdf
★仮想都市のためのL-systemによる道路網生成手法の検討 (日本語。要登録)
ttp://fw8.bookpark.ne.jp/cm/ipsj/search.asp?from=&flag=6&keyword=IPSJ-CG98090003&page=&mode=PDF
★仮想都市の自動生成における建物形状の作成と表示 (日本語)
ttp://www.cs.tsukuba.ac.jp/H15Syuron/200205245.pdf
★自律的に変化する仮想都市の自動生成に関する研究 (日本語)
ttp://www.tulips.tsukuba.ac.jp/pub/dl/e_thesis/ko/honda2004.pdf
★時間変化する仮想都市における道路網の自動生成 (日本語)
ttp://www.cs.tsukuba.ac.jp/H15Syuron/200205246.pdf
★仮想都市のためのL-systemによる道路網生成手法の検討 (日本語。要登録)
ttp://fw8.bookpark.ne.jp/cm/ipsj/search.asp?from=&flag=6&keyword=IPSJ-CG98090003&page=&mode=PDF
★仮想都市の自動生成における建物形状の作成と表示 (日本語)
ttp://www.cs.tsukuba.ac.jp/H15Syuron/200205245.pdf
2007/06/20(水) 04:29:57ID:1JxlmVuR
>1
乙
乙
2007/06/20(水) 10:25:21ID:Nps2Ve2S
>>1お疲れ様。
2007/06/21(木) 12:21:35ID:Cyq5Fmkt
いちおつ
2007/06/21(木) 22:23:53ID:axqwFqko
5代目住職 ジュウシマツ和尚はわかないのかwww
8名前は開発中のものです。
2007/06/21(木) 22:47:19ID:xkoA9L90 ________
| |
| / ̄ ̄ ヽ, |
| / ', |
| {0} /¨`ヽ {0}, !
|.l ヽ._.ノ ', |
リ `ー'′ ',|
| |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
5代目住職 ジュウシマツ和尚
| |
| / ̄ ̄ ヽ, |
| / ', |
| {0} /¨`ヽ {0}, !
|.l ヽ._.ノ ', |
リ `ー'′ ',|
| |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
5代目住職 ジュウシマツ和尚
9名前は開発中のものです。
2007/06/21(木) 22:48:29ID:xkoA9L90 糞スレ以外にはあんまり貼らないんだがな。
呼ばれたので貼っておく
呼ばれたので貼っておく
2007/06/22(金) 00:53:20ID:75RtLnUp
ワロタ
2007/06/22(金) 12:34:51ID:sSnTAJt3
んじゃお題を一つ。
ローグのマップ作成は、長方形の分割から成り立っているが
必ず縦か横に真っ二つに分断されるラインがある。
こういう分断ラインの無い長方形分割を、ランダムにできないか?
ローグのマップ作成は、長方形の分割から成り立っているが
必ず縦か横に真っ二つに分断されるラインがある。
こういう分断ラインの無い長方形分割を、ランダムにできないか?
2007/06/22(金) 13:36:30ID:DWPFVMFv
お題じゃなく「教えてください」だろボケ。
2007/06/22(金) 16:54:03ID:FZ1SN4S3
確かにお題とはちょっと違うみたいだが
いったん小さめの格子状に分割して、それを結合するってのはどうよ?
いったん小さめの格子状に分割して、それを結合するってのはどうよ?
2007/06/23(土) 12:23:19ID:HwqlnVzg
必ず縦か横に真っ二つってのがよくわからないんだが…もしかして俺は馬鹿?
15名前は開発中のものです。
2007/06/23(土) 12:42:24ID:qIz7htbl おれもわからんw
ローグのソースよまんとわからんのじゃ、面倒でやってられんw
ローグのソースよまんとわからんのじゃ、面倒でやってられんw
2007/06/23(土) 14:26:04ID:HwqlnVzg
ああ、長方形分割って、>>2 の一番上のサイトみたいな方法のことなのね。
こういう分割方式って、部屋が被らないことが簡単に保障できる代わりに
特定のパターンでの生成を諦めるって趣旨だと思うが……。
まともなの作ろうとすると、掘削していくとか、ボトムアップなやり方じゃないと無理があるだろう。
迷路の棒倒し法と穴掘り法をどちらも実装した経験があるが、
同じ経験をした奴ならこのイメージが分かると思う。
こういう分割方式って、部屋が被らないことが簡単に保障できる代わりに
特定のパターンでの生成を諦めるって趣旨だと思うが……。
まともなの作ろうとすると、掘削していくとか、ボトムアップなやり方じゃないと無理があるだろう。
迷路の棒倒し法と穴掘り法をどちらも実装した経験があるが、
同じ経験をした奴ならこのイメージが分かると思う。
2007/06/24(日) 10:31:59ID:6NHXjMln
>>14
俺は>>11をこんな感じに解釈してみた。
これで質問の意図と合ってるか、これがローグの方法かはわからないが。
マップを二つに縦か横の直線で分けて部屋を二つ作る。ここでは部屋A、Bとする。
部屋Aを同様に分割、これを新しく部屋C、Dとする。ここで部屋Aはなくなる。
同様に、[B→E、F]、[C→G、H]、[F→J、K]といった感じに分割していく。
で、こんなマップが出来るはず。ちなみにIが飛んでるのは図にする都合。
GGHHEEEE
GGHHEEEE
GGHHEEEE
GGHHJKKK
DDDDJKKK
DDDDJKKK
DDDDJKKK
今回問題になってるのは、HとE、DとJの境目。最初にAとBの境界線になっていたライン。
できたマップ全体がこのラインで分断されている。
俺は>>11をこんな感じに解釈してみた。
これで質問の意図と合ってるか、これがローグの方法かはわからないが。
マップを二つに縦か横の直線で分けて部屋を二つ作る。ここでは部屋A、Bとする。
部屋Aを同様に分割、これを新しく部屋C、Dとする。ここで部屋Aはなくなる。
同様に、[B→E、F]、[C→G、H]、[F→J、K]といった感じに分割していく。
で、こんなマップが出来るはず。ちなみにIが飛んでるのは図にする都合。
GGHHEEEE
GGHHEEEE
GGHHEEEE
GGHHJKKK
DDDDJKKK
DDDDJKKK
DDDDJKKK
今回問題になってるのは、HとE、DとJの境目。最初にAとBの境界線になっていたライン。
できたマップ全体がこのラインで分断されている。
2007/06/24(日) 10:42:22ID:UL6BJzHS
−20〜20度くらい傾けた縦横ラインで分割して、
部屋自体は分割線からはみ出ないように配置していけば、
ぱっと見判らないし比較的空間のロスも少ないんじゃね?
廊下が長めになるかもしれないけど。
部屋自体は分割線からはみ出ないように配置していけば、
ぱっと見判らないし比較的空間のロスも少ないんじゃね?
廊下が長めになるかもしれないけど。
2007/06/24(日) 10:45:32ID:6NHXjMln
そこで、>>13の方法を提案してみる。
始めにマップを小さい格子状の部屋で分割しておく。部屋は多めにしておく。
AABBCCCDD
AABBCCCDD
EEFFGGGHH
EEFFGGGHH
EEFFGGGHH
JJKKLLLMM
JJKKLLLMM
これを[A=A+E][C=C+D][H=H+M][J=J+K+L]といった感じに結合。
AABBCCCCC
AABBCCCCC
AAFFGGGHH
AAFFGGGHH
AAFFGGGHH
JJJJJJJHH
JJJJJJJHH
このとき結合の仕方により、図のように全体を分断するラインがないマップが出来る、ってわけ。
ちなみに最終的なマップは、ここで決めた部屋の中に空洞(実際の部屋)と通路を配置する形で行えばいい。
始めにマップを小さい格子状の部屋で分割しておく。部屋は多めにしておく。
AABBCCCDD
AABBCCCDD
EEFFGGGHH
EEFFGGGHH
EEFFGGGHH
JJKKLLLMM
JJKKLLLMM
これを[A=A+E][C=C+D][H=H+M][J=J+K+L]といった感じに結合。
AABBCCCCC
AABBCCCCC
AAFFGGGHH
AAFFGGGHH
AAFFGGGHH
JJJJJJJHH
JJJJJJJHH
このとき結合の仕方により、図のように全体を分断するラインがないマップが出来る、ってわけ。
ちなみに最終的なマップは、ここで決めた部屋の中に空洞(実際の部屋)と通路を配置する形で行えばいい。
2007/06/24(日) 11:15:44ID:R5Lvu8dk
ランダムに部屋を置いていく。すでに置いてあるのと重なるようなら縮小。
だと、細かいマス目があちこちできそうだな。
そういえばランダム室内割りは、まだ出てきてなかったよな?
>2 のD&D風だけど未使用空間が無いようなタイプ
だと、細かいマス目があちこちできそうだな。
そういえばランダム室内割りは、まだ出てきてなかったよな?
>2 のD&D風だけど未使用空間が無いようなタイプ
211/2
2007/06/24(日) 16:31:00ID:PG/TOCa7 #!/usr/bin/perl -w
my ($width, $height) = (60, 25);
my (@x, @y);
my ($i, $j, $k) = (0, 0, 0);
# x 方向に適当に分割
push @x, $j += (int rand 5) + 2 while $j < $width; # 2 - 6
delete $x[-1];
($i, $j, $k) = (0, 0, 0);
# y 方向に適当に分割
push @y, $j +=(int rand 5) + 2 while $j < $height; # 2 - 6
delete $y[-1];
print +(join ', ', @x), " [", scalar @x, "]\n", +(join ', ', @y), " [", scalar @y, "]\n";
my ($width, $height) = (60, 25);
my (@x, @y);
my ($i, $j, $k) = (0, 0, 0);
# x 方向に適当に分割
push @x, $j += (int rand 5) + 2 while $j < $width; # 2 - 6
delete $x[-1];
($i, $j, $k) = (0, 0, 0);
# y 方向に適当に分割
push @y, $j +=(int rand 5) + 2 while $j < $height; # 2 - 6
delete $y[-1];
print +(join ', ', @x), " [", scalar @x, "]\n", +(join ', ', @y), " [", scalar @y, "]\n";
222/2
2007/06/24(日) 16:32:33ID:PG/TOCa7 my %no_wall;
# 適当に結合
for (1 .. (int rand 15) + 15) { # 15 - 29
my ($x, $y) = (int rand scalar @x, int rand scalar @y);
print "$x : $y (";
my $dir = int rand 4;
if ($dir == 0) {
print $x . "," . ($y - 1) . "-" . $y . ")\n"; $no_wall{$x . "," . ($y - 1) . "-" . $y} = 1;
} elsif ($dir == 1) {
print $x . "-" . ($x + 1) . "," . $y . ")\n"; $no_wall{$x . "-" . ($x + 1) . "," . $y} = 1;
} elsif ($dir == 2) {
print $x . "," . $y . "-" . ($y + 1) . ")\n"; $no_wall{$x . "," . $y . "-" . ($y + 1)} = 1;
} elsif ($dir == 3) {
print +($x - 1) . "-" . $x . "," . $y . ")\n"; $no_wall{($x - 1) . "-" . $x . "," . $y} = 1;
}
}
my (@x_wall, @y_wall) = (map { 0 } 1 .. $width, map { 0 } 1 .. $height);
$x_wall[$_] = 1 for @x; $y_wall[$_] = 1 for @y;
my (@x_room, @y_room);
$i = 0; @x_room = map { ++$i if $x_wall[$_]; $i; } 0 .. $width - 1;
$i = 0; @y_room = map { ++$i if $y_wall[$_]; $i; } 0 .. $height - 1;
for my $y (0 .. $height - 1) {
for my $x (0 .. $width - 1) {
my ($xr, $yr) = ($x_room[$x], $y_room[$y]);
$x_wall[$x] and (!$no_wall{($xr - 1) . "-" . $xr . "," . $yr} and ($y_wall[$y] and print "+" or print "|") or print ".");
$y_wall[$y] and !$no_wall{$xr . "," . ($yr - 1) . "-" . $yr} and print "-" or print ".";
} print "\n";
}
----
ごめん俺は投げた
# 適当に結合
for (1 .. (int rand 15) + 15) { # 15 - 29
my ($x, $y) = (int rand scalar @x, int rand scalar @y);
print "$x : $y (";
my $dir = int rand 4;
if ($dir == 0) {
print $x . "," . ($y - 1) . "-" . $y . ")\n"; $no_wall{$x . "," . ($y - 1) . "-" . $y} = 1;
} elsif ($dir == 1) {
print $x . "-" . ($x + 1) . "," . $y . ")\n"; $no_wall{$x . "-" . ($x + 1) . "," . $y} = 1;
} elsif ($dir == 2) {
print $x . "," . $y . "-" . ($y + 1) . ")\n"; $no_wall{$x . "," . $y . "-" . ($y + 1)} = 1;
} elsif ($dir == 3) {
print +($x - 1) . "-" . $x . "," . $y . ")\n"; $no_wall{($x - 1) . "-" . $x . "," . $y} = 1;
}
}
my (@x_wall, @y_wall) = (map { 0 } 1 .. $width, map { 0 } 1 .. $height);
$x_wall[$_] = 1 for @x; $y_wall[$_] = 1 for @y;
my (@x_room, @y_room);
$i = 0; @x_room = map { ++$i if $x_wall[$_]; $i; } 0 .. $width - 1;
$i = 0; @y_room = map { ++$i if $y_wall[$_]; $i; } 0 .. $height - 1;
for my $y (0 .. $height - 1) {
for my $x (0 .. $width - 1) {
my ($xr, $yr) = ($x_room[$x], $y_room[$y]);
$x_wall[$x] and (!$no_wall{($xr - 1) . "-" . $xr . "," . $yr} and ($y_wall[$y] and print "+" or print "|") or print ".");
$y_wall[$y] and !$no_wall{$xr . "," . ($yr - 1) . "-" . $yr} and print "-" or print ".";
} print "\n";
}
----
ごめん俺は投げた
23SDL厨 ◆SDL/2aFg42
2007/06/25(月) 15:37:54ID:J2r3CUKy http://www.chukkysoft.com/m-bara/My3D/main.html
JavaApplet製
http://www.aarg.net/~minam/dungeon_design.html
(↑リンク先にcgiが設置されています)
これをJavaで実装し直しました。
JavaApplet製
http://www.aarg.net/~minam/dungeon_design.html
(↑リンク先にcgiが設置されています)
これをJavaで実装し直しました。
2007/06/25(月) 16:02:01ID:c6qTjBeC
畜生良い仕事だ
25名前は開発中のものです。
2007/06/26(火) 09:34:24ID:dcv1CRzJ コレは3DをJavaで自前で実装してるのかな?
Wizの疑似3D表示ではないようだし。
すごいな。というか、めんどうそうだ。
Wizの疑似3D表示ではないようだし。
すごいな。というか、めんどうそうだ。
26SDL厨 ◆SDL/2aFg42
2007/06/26(火) 13:11:17ID:OiO3IbCX >>24氏
ども。自分(描画周り・その他担当)と、
自分の上の人(ダンジョンジェネレータ移植・全体マップ描画担当)も喜んでおります。
>>25氏
[CodeZine:3Dモデルを表示するJavaアプレットの作成]
http://codezine.jp/a/article/aid/38.aspx
を参考にしました。
表示物はメタセコイア形式(*.mqo)のものを表示しています。
テクスチャとかは未対応。
ども。自分(描画周り・その他担当)と、
自分の上の人(ダンジョンジェネレータ移植・全体マップ描画担当)も喜んでおります。
>>25氏
[CodeZine:3Dモデルを表示するJavaアプレットの作成]
http://codezine.jp/a/article/aid/38.aspx
を参考にしました。
表示物はメタセコイア形式(*.mqo)のものを表示しています。
テクスチャとかは未対応。
27名前は開発中のものです。
2007/06/27(水) 19:57:28ID:20eQoNFI 二人で作ってるのか。
2007/06/28(木) 10:30:11ID:X6Tc3KBe
2007/06/28(木) 16:57:41ID:0LCmgY9D
30名前は開発中のものです。
2007/06/29(金) 23:57:27ID:/p5LguVV >>23のやつ、アプレットのコンソール見ると面白いぞ。
生成過程がテキストで表示されてる。
生成過程がテキストで表示されてる。
2007/06/30(土) 01:03:39ID:/+SdN5yY
ほんとだ、生成方法も1つじゃなくて色々あるね。おもしろー
2007/07/04(水) 17:19:27ID:aaRt4w6S
2007/07/05(木) 10:20:47ID:0KprI8jr
>>32
GJ!
たしかに通路が縦か横方向に端から端まで一直線にのびて
分断されている感じのマップができる傾向にあるな。
でも、ちゃんとウィザードリィ系3DダンジョンRPG風のマップが生成されているね。
あと、今時、MS-DOS用のプログラムだと、一瞬でウィンドウが閉じてしまって
意味が分からんっていう人もいると思うから、
a.exe > a.txt
pause
みたいなバッチファイルを同梱しといた方が良かったんじゃないかと思う。
GJ!
たしかに通路が縦か横方向に端から端まで一直線にのびて
分断されている感じのマップができる傾向にあるな。
でも、ちゃんとウィザードリィ系3DダンジョンRPG風のマップが生成されているね。
あと、今時、MS-DOS用のプログラムだと、一瞬でウィンドウが閉じてしまって
意味が分からんっていう人もいると思うから、
a.exe > a.txt
pause
みたいなバッチファイルを同梱しといた方が良かったんじゃないかと思う。
2007/07/05(木) 11:44:11ID:KBujyH/D
エクステンダにog32使っちゃうとXPのDOS環境と互換性がなくなる、と最近気づいた俺が言ってみる。
他にフリーのあったかしらw
他にフリーのあったかしらw
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【高市首相】「日本人が日本各地を旅行するのも大切」 中国からの渡航自粛巡り [ぐれ★]
- ファミマ「遊べるコンビニ」へ ゲーム機を5000店舗に設置方針 IP強化 [七波羅探題★]
- 【野球】WBC、録画放送含め地上波中継なし (ネットフリックス) ★3 [阿弥陀ヶ峰★]
- 町山智浩「日本のパンダ経済効果は308億円」…「…いらない」と言ってる人達は、パンダで暮らす人々の損害補填してくれるのか…と問う★4 [少考さん★]
- 町山智浩氏の「パンダ中国への返還」めぐって私見述べるも共感集まらず「『パンダで暮らす人々』って誰?」「上野でグッズ売ってる人?」 [muffin★]
- 【東京・赤坂の“個室サウナ店夫婦死亡火災”】 タオルがサウナストーンに触れたことで発火したか 警視庁 [ぐれ★]
- レ オナル ドダヴィンチ
- アリスって名前は可愛い子しかいないよな
- ガチで日本の衰退やばくねって思った、身近な出来事 [943688309]
- 寒いけど風呂入ってくる
- 高市早苗(おさな)、外国メディアの質問を受け付けなかった模様wwwwwwwwwww [834922174]
- 煽り抜きで『進撃の巨人』って日本人の漫画史上でもトップレベルの傑作じゃねぇか? [339035499]
