Hallo,
gleich zur Sache:
zurzeit implementiere ich einen A* für eine Art RPG-Game zumindest versuch ich es.
Ich habe nur ein Problem mit der Ermittlung der Nachbarzellen bzw. Nachbartiles.
Folgende Methode gibt mir ein Array aus Knoten zurück:
Nach Überprüfung der Funktion durch Ausgabe der erzeugten Nachbarn ist mir aufgefallen, dass ständig neue Nachbarn erzeugt werden und zwar wild durcheinander.
Das Problem, das sich daraus für meine Abbruchbedingung des A*-Algorithmus ergibt ist, dass der current-Knoten nie gleich dem goal-Knoten wird und die Schleife nie abgebrochen wird geschweige denn der kürzeste Weg ausgegeben werden kann.
Nun hab ich überlegt.
Ich möchte ja letztendlich den A* auf einer Map anwenden.
Ich habe bereits eine Map und deren Daten in einem int-Array gespeichert:
levelMap[height][width];
Deshalb dachte ich, die neighbors irgendwie mit dem levelMap-Array in Verbindung zu bringen, bisher ohne Ergebnis.
Fragen: Wie kombiniert man den A* mit einer Map als int-Array?
Wie ermittelt man dann die entsprechenden Nachbarn?
Wäre für Hilfe dankbar
Gruß Eichelhaer
gleich zur Sache:
zurzeit implementiere ich einen A* für eine Art RPG-Game zumindest versuch ich es.
Ich habe nur ein Problem mit der Ermittlung der Nachbarzellen bzw. Nachbartiles.
Folgende Methode gibt mir ein Array aus Knoten zurück:
Java:
public Node[] getNeighbours(Node current){
Node[] neighbors = new Node[4];
//hier nur mal eine Evaluierungsrichtung
//left
int x = current.x;
int y = current.y;
int neighborx;
int neighbory;
neighborx = x - 32 // 32 ist die Tilebreite bzw.Laenge
neighbory = y;
if(neighborx >= 0){
neighbor[0] = new Node(neighborx,neighbory);
}
return neighbors;
}
Nach Überprüfung der Funktion durch Ausgabe der erzeugten Nachbarn ist mir aufgefallen, dass ständig neue Nachbarn erzeugt werden und zwar wild durcheinander.
Das Problem, das sich daraus für meine Abbruchbedingung des A*-Algorithmus ergibt ist, dass der current-Knoten nie gleich dem goal-Knoten wird und die Schleife nie abgebrochen wird geschweige denn der kürzeste Weg ausgegeben werden kann.
Nun hab ich überlegt.
Ich möchte ja letztendlich den A* auf einer Map anwenden.
Ich habe bereits eine Map und deren Daten in einem int-Array gespeichert:
levelMap[height][width];
Deshalb dachte ich, die neighbors irgendwie mit dem levelMap-Array in Verbindung zu bringen, bisher ohne Ergebnis.
Fragen: Wie kombiniert man den A* mit einer Map als int-Array?
Wie ermittelt man dann die entsprechenden Nachbarn?
Wäre für Hilfe dankbar
Gruß Eichelhaer