J'essaie de comprendre l'algorithme de recherche A * et j'ai un carré qui traverse un labyrinthe, mais le carré traverse deux carreaux qui touchent aux coins. Voici un exemple:A * Pathfinding - Arrêter de déplacer la diagonale à travers les carreaux
est-il de toute façon d'arrêter l'algorithme d'ajouter ceci au chemin
public List<Node> findPath(Vector2i start, Vector2i goal){
List<Node> openList = new ArrayList<Node>();
List<Node> closeList = new ArrayList<Node>();
Node current = new Node(start, null, 0, getDistance(start, goal));
openList.add(current);
while(openList.size() > 0){
Collections.sort(openList, nodeSorter);
current = openList.get(0);
if(current.tile.equals(goal)){
List<Node> path = new ArrayList<Node>();
while(current.parent != null){
path.add(current);
current = current.parent;
}
openList.clear();
closeList.clear();
return path;
}
openList.remove(current);
closeList.add(current);
for(int i = 0; i < 9; i++){
if(i == 4) continue;
int x = current.tile.getX();
int y = current.tile.getY();
int xi = (i % 3) - 1;
int yi = (i/3) - 1;
Tile at = getTile(x + xi, y + yi);
if(at == null || at == Tile.voidTile) continue;
if(at.isSolid()) continue;
Vector2i a = new Vector2i(x + xi, y + yi);
double gCost = current.gCost + getDistance(current.tile, a);
double hCost = getDistance(a, goal);
Node node = new Node(a, current, gCost, hCost);
if(vecInList(closeList, a) && gCost >= current.gCost) continue;
if(!vecInList(openList, a) || gCost < node.gCost) openList.add(node);
}
}
closeList.clear();
return null;
}
Pouvez-vous envoyer les parties pertinentes de votre code, s'il vous plaît? – ostrichofevil