引っ越しました

2010年03月27日

閉じない壁

『トラッポン2』製作中。

今回はステージ内に、コンクリ壁を配置しようと思った。

そこで問題になるのは、コンクリの配置が閉じる事。
“閉じる”とは、キャラクター(自機も敵も含め)がコンクリに囲まれる事。

なぜ、問題なのかというと、
自機の場合は身動きがとれなくなり、敵の場合は到達できず倒せない。
つまり、クリアできなくなる。

『トラッポン(1)』のレンガは“壊せる”ので、
単純にランダム配置でよかったが、コンクリは壊せないので
閉じない工夫が必要になるわけだ。

人力なら(静的なら)閉じないように配置すればいいだけの事。
でも、スクリプトで毎回ランダムに配置したい。(動的に配置したい)
また、点で配置するのではなく、なるべく線で配置したい。

というわけで、


今回使った簡単なアルゴリズムのメモ

迷路の自動生成アルゴリズムは基本的に、
棒倒し法・穴掘り法・壁伸ばし法の3つがある。

『ミーツインザダンジョン』の迷路では棒倒し法を使ったが、
今回は迷路を作るわけじゃないし、なるべく線にしたい。
ってわけで、今回は壁伸ばし法を応用。



1.ステージのX・Yは必ず奇数にしておく。

口口口口口口口口口
口口口口口口口口口
口口口口口口口口口
口口口口口口口口口
口口口口口口口口口
口口口口口口口口口
口口口口口口口口口
口口口口口口口口口
口口口口口口口口口


2.ステージの外周を壁(コンクリ)で囲む。

壁壁壁壁壁壁壁壁壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁壁壁壁壁壁壁壁壁


3.ステージ上のX・Yとも偶数かつコンクリじゃない点をランダムに選ぶ。
  (※座標は0から始まる)

壁壁壁壁壁壁壁壁壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口点口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁壁壁壁壁壁壁壁壁


4.その点から進む方向(上下左右)をランダムに選択。

壁壁壁壁壁壁壁壁壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口点→口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁壁壁壁壁壁壁壁壁


5.4で選択した方向の2マス先を調べる。

壁壁壁壁壁壁壁壁壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口点→調口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁壁壁壁壁壁壁壁壁


6.5が壁じゃないなら2マス伸ばす。

壁壁壁壁壁壁壁壁壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口壁壁壁口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁壁壁壁壁壁壁壁壁


7.基準点を更新する。

壁壁壁壁壁壁壁壁壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口壁壁点口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁壁壁壁壁壁壁壁壁


8.4〜7を繰り返し、5が既存壁なら間を補完して終了。
  今伸ばしてる壁ならそのまま終了。※補足

壁壁壁壁壁壁壁壁壁
壁口口口口口口口壁
壁口口口口口壁壁壁
壁口口口口口壁口壁
壁口口口壁壁壁口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁壁壁壁壁壁壁壁壁


8.3〜8を任意の回数繰り返し。

壁壁壁壁壁壁壁壁壁
壁口口口口口口口壁
壁口壁壁壁壁壁壁壁
壁口壁口口口壁口壁
壁口壁口壁壁壁口壁
壁口口口口口口口壁
壁口壁壁壁口口口壁
壁口口口壁口口口壁
壁壁壁壁壁壁壁壁壁


基本的にはこれで事足りる。

ステージ上のコンクリは1つも閉じないので、
どこにだって到達できるというわけ。

※補足
今伸ばしてる壁に到達した時に間を補完、終了すると
ロの字配置になってしまう可能性があるので…

壁壁壁壁壁壁壁壁壁
壁口口口口口口口壁
壁口口口壁壁壁口壁
壁口口口壁口壁口壁
壁口口口壁壁壁口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁壁壁壁壁壁壁壁壁


「現在、伸ばしている壁の場合は補完せず終了」という
条件を加える事で、コの字配置で止められる。

壁壁壁壁壁壁壁壁壁
壁口口口口口口口壁
壁口口口壁壁壁口壁
壁口口口口口壁口壁
壁口口口壁壁壁口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁口口口口口口口壁
壁壁壁壁壁壁壁壁壁









posted by さくらい | 制作 | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。