2016-10-26 8 views
1

В моей игре есть 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 направлениям, поэтому диагонали исключены. Моя другая мысль заключалась в том, чтобы использовать Пифагора, чтобы найти расстояние.

+0

Итак, вопрос был: это работает? Я предлагаю это (см. Мой ответ). В противном случае у вас есть отличный пример кода (ну, посмотрите и на инициализацию результата в моем ответе тоже). – Igor

+0

@Igor Да. Благодарю. Но я хотел знать, было ли оптимальное решение для него. Лучше, чем мой способ сделать это. – Kadir

+0

Хорошо ... Я не вижу, как, если только вы не можете приблизиться к своей цели «сзади» (делая крючок). В этом случае цель на более близком расстоянии фактически может быть дольше, чем другая. – Igor

ответ

0

С небольшой модификацией ваш метод должен работать. Вы не хотите, чтобы принять абсолютное значение полного выражения, но каждый компонент:

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

Это называется Manhattan distance и является общим для измерения плитки поиска на основе, как ваша. Поскольку Breadth-First-Search - guaranteed to find the optimal solution, ваше решение будет работать.