AStar A* Pathfinding Algorithmus - Umsetzungs Probleme
Übersicht

SchrolliBetreff: AStar A* Pathfinding Algorithmus - Umsetzungs Probleme |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schönen Guten Abend und ein Frohes Fest ![]() Follgendes Problem: http://www.policyalmanac.org/g...al_de.html Schöne Seite - Schön verständlich ... Nur an der Umsetzung hapert es ein wenig. Der Beispiel code der dort downloadbar ist entzieht sich völlig meinem Verständniss, daher würde ich das ganze gerne Stück für Stück selbst zusammenfrickeln. Es läuft ja alles nach einem sich immer wieder wiederholenden Muster ab. Vondaher sollte das auch für mich machbar sein. Nur am Arbeitskonzept hapert es ein wenig. Evtl könnte mir ja jmd ein wenig unter die Arme greifen. Im moment verzwifel ich an dieser rekursifen Funktion welche immer die Felder um das momentane durchsucht und mir die G,H und F Werte errechnet. Mir fehlt einfach ein Ansatz. Danke schonmal Basti ![]() |
||
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja nachdem Tutorial hab ich auch meinen A* geschrieben. Woran mangelst denn nun genau? Dir ist klar was eine rekursive Funktion ist und du verstehst wie der Algorithmus arbeitet? Dann wird das ganze solange ausgeführt, bis man am Ziel ist und dann werden die Alternativen überprüft. Ich helf würd dir gern helfen, aber ein bisschen mehr ansatz wäre schon gut. | ||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
Schrolli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oke
Ich habe mir erst mal 2 Types erstellt, eben diese offene und diese geschlossene Liste. Dann trag ich zu Beginn den Startpunkt in die offene ein... und ab hier müsste ja dann die rekursive funktion beginnen richtig? Umliegende Felder ermitteln. Prüfen ob begehbar. In offene Liste. Soweit auch Richtig? Aber bei der konstruktion dieser rekursiven funktion scheiter ich ein wenig BlitzBasic: [AUSKLAPPEN] For i = -1 To 1 Step 1 das wären jetzt erst mal alles außen rum. Ich übergeb an den Type seine Position und von wo das Feld angesprungen wurde... Ab da hört mein Ansatz dann ungf auf. Denkanstöße gewünscht ![]() Brauch jetzt ja noch diese Wegkosten. Also die geschätzte Entfernung zum Ziel und pro geprüften Feld die Wegkosten bis dahin um den besten Weg zu finden. Weis nicht wie ich das in der Schleife einbauen soll. Danke schon mal.... Basti |
||
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das problem wenn du es so löst ist, dass du nun in jedemfall einen neuen Type erstellst, egal ob du das feld kennst oder nicht. Es ist einfacher, wenn du ein Array von Types in größe und breite der felder anlegst.
BlitzBasic: [AUSKLAPPEN] Type Feld Nun verwendest du eine Funktion die die distance für jedes umliegende feld berechnet, falls es begehbar ist und nicht closelist = true ist und falls es Openlist = true hat, musst du noch überprüfen ob die distance nun geringer ist als vorher, wenn ja wird der verweis vorgaenger auf das aktuelle feld gestellt. Für den Fall, das es sich um ein unberührtes Feld handelt wird die distance ausgerechnet, vorgaenger wird auf die aktuelle position gesetzt. Nach dem alle felder überprüft wurden, wird das aktuelle auf die closelist gesetzt und das mit der geringsten distance, wird das neue aktuelle feld und drauf wird wieder die funktion angewendet. |
||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
Schrolli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ana hat Folgendes geschrieben: Es ist einfacher, wenn du ein Array von Types in größe und breite der felder anlegst.
An sich verständlich... Nur was das sein soll weis ich nicht? Was meinst du mir Array von Types? Evtl kleines Code bsp. dazu um funktionsweise deutlich zu machen? Danke Basti |
||
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hay. @Schrolli
Ich hatte damals mal ein Beispiel Programmiert wie mann A*Star Pathfinding einsetzen kann. Vieleicht hilft es dir weiter. ![]() https://www.blitzforum.de/foru...athfinding |
||
Schrolli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Könnte ich jetzt zwar verwenden, aber ganz nachvollziehen kann ichs nicht.
Am liebsten wäre es mit echt, das ganze mit eurer Hilfe Stück für Stück selbst zusammenm zu frickeln. Dann weis ich wenigsten was passiert und kann auch was ändern. Trotzdem danke Matthias Basti |
||
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja technisch gesehen ist ein Array genau wie eine Variable eine Adresse in deinem Speicher. Der Unterschied ist nur, dass ein Array dem Index entsprechend mehrfach den Speicher reserviert, und die Adressierung von "innen stehenden" Speicheradressen durch index * typelänge berechnet werden kann, und du keine liste oder keinen baum brauchst wenn du die types in einem eindeutigen Raster anordnest. Im klar Text wenn du den type auf der Position 4 runter 5 nach rechts haben willst, dann weißt du wo du im array suchen musst, und alle drum herumliegenden sind ebenfalls einfach zu erhalten. So kannst du die Types direkt adressieren, das ist bequemer und schneller.
Und als Code, gehen wir davon aus, dass du den Weg als String speichern müsstest und eine Funktion hast, die den Weg zurück gibt, wenn du ihr die beiden Felder-Types übergibst. Hier mal der Weg von 4,5 nach 8,9 BlitzBasic: [AUSKLAPPEN] Weg$ = Get_Way(Type_Array(4,5),Type_Array(8,9)) Dem Code fehlt natürlich noch einiges, z.B findet er so höchstens einen Weg nicht den kürzesten, aber du willst ihn ja selbst schreiben (find ich super!), sonst könntest du ja auch einfach wie mathias den von blitzbase kopieren. |
||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
Schrolli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich kann der ganzen Sache iwie nicht so ganz folgen, evtl ist es noch zu früh um über Pathfinding nachzudenken. Ich versteh den Ansatz Code technisch nicht ganz, etwas verwirrend alles...
Basti Trotzdem Danke für eure Bemühungen |
||
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eventuell, aber mit einer spezifischen Frage, kann ich dir auch eine spezifischere Antwort geben, bisher hab ich ja nur so halb geraten, was deine Probleme sein könnten. | ||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
Schrolli |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke ![]() ![]() Ich habe begonnen einfach mal eine kleine Tile-Engine zu schreiben und versuche dabei noch ein paar Erfahrungen zu sammeln, bevor ich mich dann evtl nochmal an pathfinding herran wage. Basti ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group