Also habe ich dieses Top-Down-2D-Java-Spiel in diesem Framework namens Greenfoot erstellt und an der KI für die Jungs gearbeitet, gegen die Sie kämpfen werden. Ich möchte, dass sie sich realistisch auf der ganzen Welt bewegen können, und erkannte bald, dass ich unter anderem eine Art Wegfindung benötigen würde.
Ich habe zwei A * -Prototypen hergestellt. Eine ist gitterbasiert, und dann habe ich eine erstellt, die mit Wegpunkten arbeitet. Daher muss ich jetzt einen Weg finden, um von einer 2D- "Karte" der Hindernisse / Gebäude zu einem Diagramm von Knoten zu gelangen, von denen ich einen Pfad erstellen kann. Die eigentliche Pfadfindung scheint in Ordnung zu sein, nur meine offenen und geschlossenen Listen könnten eine effizientere Datenstruktur verwenden, aber ich werde darauf zurückkommen, wenn und wann ich muss.
Ich beabsichtige, aus allen in diesem Beitrag auf ai-blog.net genannten Gründen ein Navigationsnetz zu verwenden . Das Problem, mit dem ich konfrontiert wurde, ist jedoch, dass A * den kürzesten Weg von den Polygonzentren / -kanten als nicht unbedingt den kürzesten Weg ansieht, wenn Sie durch einen Teil des Knotens fahren. Um eine bessere Vorstellung zu bekommen, können Sie die Frage sehen, die ich beim Stackoverflow gestellt habe .
Ich habe eine gute Antwort bezüglich eines Sichtbarkeitsgraphen erhalten. Ich habe das Buch ( Computational Geometry: Algorithms and Applications ) gekauft und lese weiter im Thema, bin jedoch immer noch für ein Navigationsnetz (siehe " Managing Complexity " in Amits Notes zum Path-Finding ). (Als Randnotiz: Vielleicht könnte ich Theta * verwenden, um mehrere Wegpunkte in eine gerade Linie umzuwandeln, wenn der erste und der letzte nicht verdeckt sind. Oder jedes Mal, wenn ich zum vorletzten Wegpunkt zurückkehre, überprüfe ich, ob ich direkt von dort ausgehen kann das dazu)
Ich möchte also im Grunde genommen ein Navigationsnetz, in dem ich, sobald ich es durch einen Trichteralgorithmus geführt habe (z. B. dieses von Digesting Duck ), den kürzesten Pfad erhalte, anstatt nur den kürzesten Pfad von Knoten zu Knoten. aber nicht die kürzeste, vorausgesetzt, Sie können einige Polygone durchlaufen und Knoten / Kanten überspringen.
Oh, und ich möchte auch wissen, wie Sie die Informationen zu den Polygonen speichern möchten. Für das von mir erstellte Wegpunkt-Prototyp-Beispiel hatte ich gerade jeden Knoten als Objekt und speicherte eine Liste aller anderen Knoten, zu denen Sie von diesem Knoten aus reisen konnten. und wie kann ich feststellen, ob ein Polygon offen / durchlässig ist oder ob es sich um ein festes Objekt handelt? Wie speichere ich, welche Knoten das Polygon bilden?
Zum Schluss noch ein Hinweis: Ich möchte dies von Grund auf selbst programmieren, obwohl bereits andere Lösungen zur Verfügung stehen, und ich beabsichtige nicht, diesen Code in etwas anderem als diesem Spiel (wieder) zu verwenden, es spielt also keine Rolle es wird unvermeidlich schlechte Qualität sein.