Как остановить A* от бесконечного цикла, если между точками нет допустимого путиJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как остановить A* от бесконечного цикла, если между точками нет допустимого пути

Сообщение Anonymous »

Итак, я занимаюсь поиском пути для 2D-игры и сталкиваюсь с некоторыми проблемами, из-за которых реализация A* будет бесконечно зацикливаться, если между двумя точками на карте нет допустимого пути. Вот код, который я использую сейчас:

Код: Выделить всё

public static List getPath(EntityMob start, Vector2 end){
List openList = new ArrayList();
Set closedList = new HashSet();

Vector2 bounds = new Vector2(start.floor.floor_width,start.floor.floor_height);
openList.add(new Node(start.getX(),start.getZ()));
while(!openList.isEmpty()) {
openList.sort(Comparator.comparingInt(n->n.f));
Node current = openList.get(0);

if(current.x==end.x&&current.z==end.z) {
return reconstructPath(current);
}

openList.remove(current);
closedList.add(current);
for(Node neighbor : getNeighbors(current,bounds)) {

if(closedList.contains(neighbor)||!start.canIStepOn(neighbor.x, neighbor.z)) {

continue;
}

int tentativeG = current.g+1;
if(!openList.contains(neighbor)) {
openList.add(neighbor);
}else if(tentativeG>=neighbor.g) {
continue;
}
neighbor.parent=current;
neighbor.g=tentativeG;
neighbor.h=manhattanDistance(neighbor.asVector(),end);
neighbor.f=neighbor.g+neighbor.h;
}
}
return Collections.emptyList();
}

private static List getNeighbors(Node node, Vector2 bounds){
List neighbors = new ArrayList();
if(node.x>0) neighbors.add(new Node(node.x-1,node.z));
if(node.x0) neighbors.add(new Node(node.x,node.z-1));
if(node.z

Подробнее здесь: [url]https://stackoverflow.com/questions/79033420/how-to-stop-a-from-endlessly-looping-if-theres-no-valid-path-between-points[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»