2016-10-26 1 views
1

ゲームには2つのターゲットがあります。私はBreadth First Searchを使用して、その1つのパスを見つけます。彼らの座標を使ってどれが最も近いターゲットであるかをどのように判断するのかを知りたい。私はターゲットのX座標とY座標を持っています(すべてint型です)。どのように開始点の座標を与えられた最も近いターゲットを見つけるのですか?

int result = 0; 
int target1dist = (playerX - target1x) + (playerY - target1y); 
int target2dist = (playerX - target2x) + (playerY - target2y); 

if (target1dist < target2dist){ 
    result = BFS(target1x,target1y,playerX ,playerY); 
} else { 
    result = BFS(target2x,target2y,playerX ,playerY); 
} 

これは、ターゲットの1つの距離が負の場合には有効ではありませんでした。そこで、絶対値関数を追加しました。したがって、target1distとtarget2distは負であってはなりません。

int target1dist =Math.abs ((playerX - target1x) + (playerY - target1y)); 

AIプレーヤーが最も近いターゲットを見つけるために有効な方法でしょうか? P.S:My Aiプレーヤーは4方向にしか行かないので、対角線が除外されます。私の他の考えはピタゴラスを使って距離を見つけることでした。

+0

質問は次のとおりです。私はそれが示唆している(私の答えを参照してください)。それ以外の場合は、ここに完全なコードサンプルがあります(私の答えには結果の初期化についても参照してください)。 – Igor

+0

@Igorはいそうです。ありがとう。しかし、私はそれに最適な解決策があるかどうかを知りたがっていました。私のやり方よりも良い。 – Kadir

+0

Ok ...あなたのターゲットを「背後から」(フックを作る)ことができる場合を除いて、私はどのように見えません。この場合、距離の近いターゲットは、実際には他のターゲットよりも到達時間が長くなります。 – Igor

答えて

0

少し修正すれば、あなたのメソッドはうまくいくはずです。あなたは完全な式の絶対値を取るようにしたいが、各コンポーネントはありません:これはManhattan distanceと呼ばれ、あなたとタイルベースの検索のための一般的な測定です

int traget1dist = Math.abs(playerX - target1x) + Math.abs(playerY - target1y); 

。幅優先検索がguaranteed to find the optimal solutionであるため、ソリューションが機能します。

関連する問題