2017-01-21 18 views
1

私は小さなゲームを作成しています。世界を生成するために、ルームオブジェクトをワールドオブジェクトに追加する必要があります。私のジレンマは、ルームを追加するための特別な方法が必要なため、すべての部屋がつながる(つまり、対角線や「島」の部屋はありません)ということです。下の写真。これを行うための最善の方法だろう何2次元配列の周囲の要素を確認する

Ignore Colors

(色を無視し、灰色の色は部屋あり、空のスペースですか)?有効が真であるならば、それは余裕が置かれることが可能であることを意味する現在、私は

if (this.board[posx-1][posy].isOcc()) 
    valid == true; 
if (this.board[posx][posy-1].isOcc()) 
    valid == true; 
if (this.board[posx][posy+1].isOcc()) 
    valid == true; 
if (this.board[posx+1][posy].isOcc()) 
    valid == true; 

の線に沿って何かを持っています。 これが問題になるのは境界から外れていくエッジです。

私は2D配列の一番上の行のランダムな列に1つのルームを配置する初期基底を持っています。したがって、常に構築するものがあります。いうだけのものより、2パスであることにあなたのマップジェネレータを切り替え、その後

class Room { 
    bool isTraversable = false; 
    Room rooms = new Room[4] 
} 

:すなわち -

答えて

1

は許容通過のための彼らの周囲のノードへの参照を使用して「部屋」のオブジェクトを設定します。だから、第1世代(無効な設定になる可能性があります)を実行し、次にこれを2回実行して、入力する有効な部屋があるかどうかを確認します。そうでない場合は、有効な部屋を作成してください。

したがって、これの基本的なバージョンは次のとおりです。

これは、接続壁/空白領域の1つが保持されるランダムな移動可能な部屋を作成します。 「別の島」を作成しただけではないことを確認したい場合は、有効なパスが見つかるまで、同じスクリプトを新しく移動可能なタイル上で実行します。

関連する問題