[過去ログ] 【ダンジョン】 自動生成 2 【地形】 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
10: 2007/06/22(金)00:53 ID:75RtLnUp(1) AAS
ワロタ
11(2): 2007/06/22(金)12:34 ID:sSnTAJt3(1) AAS
んじゃお題を一つ。
ローグのマップ作成は、長方形の分割から成り立っているが
必ず縦か横に真っ二つに分断されるラインがある。
こういう分断ラインの無い長方形分割を、ランダムにできないか?
12: 2007/06/22(金)13:36 ID:DWPFVMFv(1) AAS
お題じゃなく「教えてください」だろボケ。
13(1): 2007/06/22(金)16:54 ID:FZ1SN4S3(1) AAS
確かにお題とはちょっと違うみたいだが
いったん小さめの格子状に分割して、それを結合するってのはどうよ?
14(1): 2007/06/23(土)12:23 ID:HwqlnVzg(1/2) AAS
必ず縦か横に真っ二つってのがよくわからないんだが…もしかして俺は馬鹿?
15: 2007/06/23(土)12:42 ID:qIz7htbl(1) AAS
おれもわからんw
ローグのソースよまんとわからんのじゃ、面倒でやってられんw
16: 2007/06/23(土)14:26 ID:HwqlnVzg(2/2) AAS
ああ、長方形分割って、>>2 の一番上のサイトみたいな方法のことなのね。
こういう分割方式って、部屋が被らないことが簡単に保障できる代わりに
特定のパターンでの生成を諦めるって趣旨だと思うが……。
まともなの作ろうとすると、掘削していくとか、ボトムアップなやり方じゃないと無理があるだろう。
迷路の棒倒し法と穴掘り法をどちらも実装した経験があるが、
同じ経験をした奴ならこのイメージが分かると思う。
17: 2007/06/24(日)10:31 ID:6NHXjMln(1/2) AAS
>>14
俺は>>11をこんな感じに解釈してみた。
これで質問の意図と合ってるか、これがローグの方法かはわからないが。
マップを二つに縦か横の直線で分けて部屋を二つ作る。ここでは部屋A、Bとする。
部屋Aを同様に分割、これを新しく部屋C、Dとする。ここで部屋Aはなくなる。
同様に、[B→E、F]、[C→G、H]、[F→J、K]といった感じに分割していく。
で、こんなマップが出来るはず。ちなみにIが飛んでるのは図にする都合。
GGHHEEEE
GGHHEEEE
GGHHEEEE
省6
18: 2007/06/24(日)10:42 ID:UL6BJzHS(1) AAS
−20〜20度くらい傾けた縦横ラインで分割して、
部屋自体は分割線からはみ出ないように配置していけば、
ぱっと見判らないし比較的空間のロスも少ないんじゃね?
廊下が長めになるかもしれないけど。
19(5): 2007/06/24(日)10:45 ID:6NHXjMln(2/2) AAS
そこで、>>13の方法を提案してみる。
始めにマップを小さい格子状の部屋で分割しておく。部屋は多めにしておく。
AABBCCCDD
AABBCCCDD
EEFFGGGHH
EEFFGGGHH
EEFFGGGHH
JJKKLLLMM
JJKKLLLMM
これを[A=A+E][C=C+D][H=H+M][J=J+K+L]といった感じに結合。
省9
20(2): 2007/06/24(日)11:15 ID:R5Lvu8dk(1) AAS
ランダムに部屋を置いていく。すでに置いてあるのと重なるようなら縮小。
だと、細かいマス目があちこちできそうだな。
そういえばランダム室内割りは、まだ出てきてなかったよな?
>2 のD&D風だけど未使用空間が無いようなタイプ
21: 1/2 2007/06/24(日)16:31 ID:PG/TOCa7(1/2) AAS
#!/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
省2
22: 2/2 2007/06/24(日)16:32 ID:PG/TOCa7(2/2) AAS
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;
省20
23(2): SDL厨 ◆SDL/2aFg42 2007/06/25(月)15:37 ID:J2r3CUKy(1) AAS
外部リンク[html]:www.chukkysoft.com
JavaApplet製
外部リンク[html]:www.aarg.net
(↑リンク先にcgiが設置されています)
これをJavaで実装し直しました。
24(1): 2007/06/25(月)16:02 ID:c6qTjBeC(1) AAS
畜生良い仕事だ
25(1): 2007/06/26(火)09:34 ID:dcv1CRzJ(1) AAS
コレは3DをJavaで自前で実装してるのかな?
Wizの疑似3D表示ではないようだし。
すごいな。というか、めんどうそうだ。
26: SDL厨 ◆SDL/2aFg42 2007/06/26(火)13:11 ID:OiO3IbCX(1) AAS
>>24氏
ども。自分(描画周り・その他担当)と、
自分の上の人(ダンジョンジェネレータ移植・全体マップ描画担当)も喜んでおります。
>>25氏
[CodeZine:3Dモデルを表示するJavaアプレットの作成]
外部リンク[aspx]:codezine.jp
を参考にしました。
表示物はメタセコイア形式(*.mqo)のものを表示しています。
テクスチャとかは未対応。
27: 2007/06/27(水)19:57 ID:20eQoNFI(1) AAS
二人で作ってるのか。
28: 2007/06/28(木)10:30 ID:X6Tc3KBe(1) AAS
>>1おつ
華麗に28get
>>19の説明はわかり易いね
rogueはただ単に定量に6分割する方法だったと思う。
俺は>>20の方法で分割したなー、分割領域x, y, w, hを乱数で出す。
ただ、重なる時は分割せず、なにもせずcontinueしてループを200回くらい回すといい感じに分割できてるっていう力技
でも>19のほうがよさげだね
29: 2007/06/28(木)16:57 ID:0LCmgY9D(1) AAS
まぁ俺は >>2 のD&D風 = >>23 の2番目みたいな、
通路を先に書いて部屋を後で置くアルゴリズムをオススメする
上下前次1-新書関写板覧索設栞歴
あと 973 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.022s