AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

wegsuche in delphi?

Ein Thema von sweetmusic · begonnen am 18. Mai 2004 · letzter Beitrag vom 19. Mai 2004
Antwort Antwort
sweetmusic

Registriert seit: 15. Apr 2004
Ort: Stralsund
3 Beiträge
 
#1

wegsuche in delphi?

  Alt 18. Mai 2004, 12:59
Hallo,

ich habe vor einiger Zeit begonnen ein Spiel zu programmieren und möchte es nun erweitern.
Dazu bräuchte ich aber eine Wegsuche, so wie man sie zB mit Prolog programmieren kann.
Habt ihr einen Tipp für mich, wie ich das in Delphi umsetzen kann?

Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#2

Re: wegsuche in delphi?

  Alt 18. Mai 2004, 13:03
Was ist denn

Zitat von sweetmusic:
so wie man sie zB mit Prolog programmieren kann.
? (Ja ich kenne Prolog) Zur not schreibst du einfach einen Prolog Intepreter in Delphi
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: wegsuche in delphi?

  Alt 18. Mai 2004, 13:54
Warum sollte da snichta uch mit Delphi gehen?

Da aber viele Spiele in C/C++ geschrieben sind, würde ich mich bei der Suche mit Google (Bei Google suchendelphi wegsuche) nach Codeschnippslen nicht unbedingt auf Delphi beschränken.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
sweetmusic

Registriert seit: 15. Apr 2004
Ort: Stralsund
3 Beiträge
 
#4

Re: wegsuche in delphi?

  Alt 19. Mai 2004, 10:13
mh, das heißt also, dass ihr mir auch keinen direkten Vorschlag machen könnt...

Habt ihr schon mal etwas von A*-Pathfinding gehört?
Scheint eine ziemlich verbreitete Methode zu sein...
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#5

Re: wegsuche in delphi?

  Alt 19. Mai 2004, 14:09
Hätten wir schon, aber du sagst ja nicht wie du das in Prolog gemacht hast :-)

Das A*-Pathfinding ermittelt dir aus einer Menge von Knoten und Kantenbewertungen die kürzeste Strecke zu jedem Knoten von einem Startknoten aus. Ob du das verwenden kannst hängt davon ab wie dein Spielfeld aussieht (ich meine im Rechner).
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Nicodius

Registriert seit: 25. Apr 2003
Ort: Graz
2.234 Beiträge
 
Delphi 2006 Architect
 
#6

Re: wegsuche in delphi?

  Alt 19. Mai 2004, 14:58
do machst ne procedure (die nen Timer zu hilfe nimmt .... --> dann berrechnest du den kürzesten weg ... das umzusetzen ist ja nict so schwer oder?
Nico Müller
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#7

Re: wegsuche in delphi?

  Alt 19. Mai 2004, 19:19
Hier findst Du ein recht gutes Tutorial zum A*-Algorithmus, auf dessen Basis hab ich selber auch erfolgreich eine Wegsuche realisiert. Falls Du danach festgestellt hast das der Algorithmus für Dich brauchbar ist hilft Dir das folgende vielleicht etwas weiter.

Der A* Algorithmus an sich ist eine Kombintion verschiedener anderer Algorithmen, er hat den Vorteil recht schnell zu sein und findet den Weg zum Ziel auf jeden Fall (so es denn einen gibt). Wenn er einen Weg findet dann ist das auf jeden Fall auch der günstigste Weg (entsprechend der Definition der Wegkosten).

Durch die Reihenfolge in der man neue potentielle Wegpunkte während der Suche aufnimmt lässt sich in gewissem Rahmen die Form des Weges (mgl. eckig (handlich für Browsergames), mgl. diagonal, ..) beeinflussen.
Die Übernahme neuer potentieller Wegpunkte ist der Knackpunkt des Algorithmus. Hier lassen sich auch leicht Erweiterungen wie z.B. Wurmlöcher oder Strassen (k.A. was Du für ein Spiel proggst)mit einpflegen die dann in die Berechnung des optimalen Weges mit einfliessen.

Du solltest in jedem Fall dem Hinweis im Tutorial folgen und einen binären Suchbaum (BinHeap) für die offenen Wegpunkte verwenden, das bringt einiges an Performance.
Wenn zu einem Zeitpunkt immer nur ein Weg gesucht werden soll dann bietet es sich an innerhalb der Map auch sofort die Daten für die Wegsuche mit abzulegen, das kostet zwar Speicherplatz aber es beschleunigt die Suche nochmal enorm da nicht immer wieder Referenzen zwischen Kartendaten und Wegdaten hergestellt werden müssen.

Ich habs bei mir so realisiert:
Delphi-Quellcode:
  TCoords = packed record
    case LongInt of
     0: (Y, X: Word);
     1: (XY: DWord);
  end;

  PPMapItem = ^PMapItem;
  PMapItem = ^TMapItem;
  TMapItem = record
    Parent: PMapItem; // Feld von dem dieses Feld erreicht wurde (>Weg<)
    Coord: TCoords; // Map-Koordinaten (entspricht Array-Index)
    GCost: Byte; // Fixe Einflugkosten für dieses Feld (Terrainkosten)
    GWCost: LongWord; // Flugkosten vom Start zu diesem Punkt
    HCost: LongWord; // angenommene Flugkosten bis Ziel (Heuristic)
    Region: Byte; // Durchflugberechtigung?
    BinHeapPos: LongWord; // Position im BinHeap (für schnelleres ReSort nach Änderung von GWCost)
    IsClosed: Boolean; // Feld als Wegpunkt übernommen?
  end;

  TMapArray = array of array of TMapItem;
Durch das "IsClosed" spare ich mir zusätzlich auch die Liste der übernommenen Wegpunkte, das bringt nochmal einiges an Performance da ich bei neu übernommenen Wegpunkten nicht suchen muss ob diese bereits einmal erreicht wurden.

MfG,
Tryer
  Mit Zitat antworten Zitat
sweetmusic

Registriert seit: 15. Apr 2004
Ort: Stralsund
3 Beiträge
 
#8

Re: wegsuche in delphi?

  Alt 19. Mai 2004, 19:58
danke für die tipps!

Ich hab nun auch schon ein paar Seiten im Netz gefunden, die mir helfen könnten..
Jetzt muss ich nur noch meine Kenntnisse in der Listenprogrammierung auffrischen
ich hoffe, dass es jetzt alles klappt.

Liebe Grüße
Ohne Musik ist das Leben ein Irrtum. - F.N.
  Mit Zitat antworten Zitat
DaFox

Registriert seit: 1. Aug 2003
Ort: Kippenheim
90 Beiträge
 
#9

Re: wegsuche in delphi?

  Alt 19. Mai 2004, 21:20
Hi,

zum Thema A*: Der Entwickler, Ausgabe 03.2002 bzw. gleich Der Weg ist das Ziel - Pathfinding mit A*

Gruß,
Markus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz