Forum: Object-Pascal / Delphi-Language
by Luckie,
18. Dez 2005
@AmatuerProfi: Ich habe mal deinen Code kommentiert. Stimmt das so:
////////////////////////////////////////////////////////////////////////////////
// FindPath
// Comment: A* Algorithmus
// Zusammenfassung der A*-Methode
//
// 1) Füge das Startquadrat der offenen Liste hinzu.
// 2) Wiederhole das Folgende:
// a) Suche in der offenen Liste nach dem Quadrat mit dem niedrigsten...
Forum: Object-Pascal / Delphi-Language
by Luckie,
18. Dez 2005
Sprich, was mich ins Schleudern gebracht hat, war die Tatsaxhe, dass ich mich nicht genau an die Anleitung gehalten habe. :gruebel:
Forum: Object-Pascal / Delphi-Language
by Luckie,
18. Dez 2005
Danke, das war mehr als ich erwartet habe :P , nur jetzt habe ich es ja wieder nicht selber geschrieben. Wo lag denn mein eigentlicher Denkfehler? Desweiteren wollte ich den Code für einen Artikel nehmen, da es für Delphi, da wohl so wa snoch nicht gibt. Und dazu müsste ich den Code natürlich verstehen, deine Kommentare sind aber etwas kurz geraten. ;)
Kennst du zufälligerweise auch noch einen...
Forum: Object-Pascal / Delphi-Language
by Luckie,
18. Dez 2005
Auf 6/4 ja aber auf 6/3 nicht mehr:
function FindPath(Maze: TMazeArray; Start, Dest: TPoint): TPoint;
var
i, j : Integer;
List : TOpenList;
dx, dy : integer;
begin
for i := Start.X - 1 to Start.X + 1 do
begin
Forum: Object-Pascal / Delphi-Language
by Luckie,
18. Dez 2005
Hm, danke. Für diese eine Situation scheint es zu klappen. Aber wenn ich das Ziel auf 6,4 versetze oder die Mauer oben zu mache, dann geht es schon nicht mehr. :gruebel:
Im ersten Posting jetzt noch mnal mein aktueller Code.
Forum: Object-Pascal / Delphi-Language
by Luckie,
17. Dez 2005
Habe ich auch schon versucht, das klappt auch nicht. Im obigen Code war ein Fehler. So stimmt es:
if Dest.X > i then
begin
dx := Dest.X - i;
end
else if Dest.X < i then
begin
dx := i - Dest.X;
end
Forum: Object-Pascal / Delphi-Language
by Luckie,
17. Dez 2005
Ja, da suche ich auch gerade den Fehler. Ich habe es jetzt so:
if Dest.X > Start.x then
begin
dx := Dest.X - i;
end
else if Dest.X < Start.X then
begin
dx := i - Dest.X;
end
Forum: Object-Pascal / Delphi-Language
by Luckie,
17. Dez 2005
Ich habe jetzt auch den horizontalen Abstand für die geschätzte Entfernung zum Ziel mit einbezogen:
List.H := (Abs(Abs((Dest.X - i)) + (Abs(Dest.Y - j)))) * 10;
Jetzt hängt er gleich beim ersten mal in einer Endlosschleife. :gruebel:
Forum: Object-Pascal / Delphi-Language
by Luckie,
17. Dez 2005
Ich habe mich heute Nachmittag mal drangesetzt und habe versucht den obigen Algorithmus zum Finden eines Pfades zu implementieren. Also so halb funktionieren tut es schon mal. Ich habe mich an die Beschreibung von dieser Seite gehalten: http://www.policyalmanac.org/games/aStarTutorial_de.html .
Nur irgendwie bleibt mein Algorithmus auf halben Weg stecken, das heißt, er landet in einer...