ゲームには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方向にしか行かないので、対角線が除外されます。私の他の考えはピタゴラスを使って距離を見つけることでした。
質問は次のとおりです。私はそれが示唆している(私の答えを参照してください)。それ以外の場合は、ここに完全なコードサンプルがあります(私の答えには結果の初期化についても参照してください)。 – Igor
@Igorはいそうです。ありがとう。しかし、私はそれに最適な解決策があるかどうかを知りたがっていました。私のやり方よりも良い。 – Kadir
Ok ...あなたのターゲットを「背後から」(フックを作る)ことができる場合を除いて、私はどのように見えません。この場合、距離の近いターゲットは、実際には他のターゲットよりも到達時間が長くなります。 – Igor