2Dタワーディフェンスゲームを作っています。これまでのところ、ゲームのグリッドとして機能する2D配列があります。私はそれにタワーを配置し、敵を走らせ、ドラッグしてタワーを発射することができます。
今、私はタワー配置ロジックの問題に直面しています。敵が歩ける道が常にあることを望みます。つまり、ユーザーが塔を設置することで完全に道を塞ぐことができないようにする必要があります。例えば。ユーザーがマップ上にタワーを垂直に配置する場合、アルゴリズムは、垂直線を完成させるタワーの配置を防止する必要があります。または、他の方法では、敵が脱出できるように、少なくとも1つの空き(歩行可能な)スペースが必要です。
私の現在のロジックは、タワーが設置されるたびにすべての方向をチェックします。上方にタワーがある場合は、壁にぶつかるまで、その上部タワーで同じ関数を再度呼び出します。上向きの壁の場合は1を返し、下向きの壁の場合は5を返し、タワーがある場合は関数(アップ/ダウンタワー)を返します。ここにコードがあります:
int checkCollision(tower)
{
if( there is a tower up)
return checkCollision(up tower);
if(there is a tower down)
return checkCollision(down tower);
......all directions.....
if( there is a wall on UP )
return 1;
if( there is a wall DOWN )
return 5;
....all walls......
return 0;
}
今私が欲しいのは、北の壁と南の壁があるかどうかを同時に確認するか、他の可能性(上下、斜め、斜め下など)で他の方向を確認して、ユーザーに許可しないことです敵のために残された場所が1つあるはずなので、タワーを配置します。
現在、自分のコードに不満があります。私のコードは壁が見つかったことを示していますが、壁が一方向で見つかり、壁が別の方向でも見つかったことを確認するにはどうすればよいですか?私は次のような可能性に行きたくありません:
if(checkCollision(tower) == 1 && checkCollision(tower) == 5)
"You cannot place"
私は次のようなものが欲しい:
if( any combination of more than 2 wall found and there is entry/exit point in between) //so it is wall to wall
"You cant place"
また、2つの側面に壁がある場合(上下、斜めなど)、ユーザーがタワーを設置できないようにして、フラグを事前に計算してみましたが、それでも機能しません。