В моей игре есть 2 цели. Я использую Breadth First Search, чтобы найти путь к одному из них. Я хочу знать, как я могу определить, какая ближайшая цель использует их координаты. У меня есть координаты 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);
}
Это недействительно, когда расстояние от одной из целей было отрицательным. Поэтому я добавил функцию абсолютного значения. Таким образом, target1dist и target2dist не могут быть отрицательными.
int target1dist =Math.abs ((playerX - target1x) + (playerY - target1y));
Будет ли это эффективным способом найти ближайшую цель, чтобы мой игрок AI мог направлять его? P.S: Мой игрок Ai может двигаться только по 4 направлениям, поэтому диагонали исключены. Моя другая мысль заключалась в том, чтобы использовать Пифагора, чтобы найти расстояние.
Итак, вопрос был: это работает? Я предлагаю это (см. Мой ответ). В противном случае у вас есть отличный пример кода (ну, посмотрите и на инициализацию результата в моем ответе тоже). – Igor
@Igor Да. Благодарю. Но я хотел знать, было ли оптимальное решение для него. Лучше, чем мой способ сделать это. – Kadir
Хорошо ... Я не вижу, как, если только вы не можете приблизиться к своей цели «сзади» (делая крючок). В этом случае цель на более близком расстоянии фактически может быть дольше, чем другая. – Igor