Tutorial Pathfinding
Wilkommen zu meinen Tutorial zum Pathfinding.
Geeignete Welten
Diese Methode geht davon aus das sich unsere virtuelle Welt aus lauter Quadraten zusammensetzt. Jedes dieser Felder wird für die Wegberechnung erstmal vereinfacht, in dem davon ausgegangen wird, das ein Feld entweder begehbar ist, oder nicht. (Oder sogar Felder haben die zwar begehbar sind aber gemieden werden solten.)
Nun wird weiter davon ausgegangen, dass eine Einheit von einen Feld nur in 8 (bzw. 4) Richtungen, nämlich in die 8 (4) benachbarten Felder bewegen kann.
Von dem nächsten Feld kann sich die Einheit logischerweise weiter in ein nächstes Feld bewegen allerdings immer nur in 8 Richtungen. Wer sich so manches 2D Strategie-Spiel genau anschaut dem fällt sicher auf, dass es dort genauso ist.
Wir wollen zum Beispiel aus einer solchenso Karte,
eine "PathMap" erzeugen,
um zu wissen wie das Objekt auf die andere Seite kommt.
Wichtige Tastur Befehle des Beispiel Programmes(mit Quelltext):
- F1: Pathmap vor dem füllen anzeigen
- F2: Pathmap anzeigen
- F3: Draufsicht mit Gitter;
Aufbau des Beispiel-Programmes:
Alles wesentliche bis auf das Pathfinding befindt sich in der SpielFeldUnit. Hier haben wir unser Feld definiert.
TPlayer=(plnone,pl1,pl2,plNeutral); TFeld= object public Owner:TPlayer; end;
Und unser gesamtes Spielfeld welche einen Zweifachen Array davon enthält.
TSpielFeld=class(TPersistent) private FWidth:Word; FHeight:Word; procedure ZeichneSpielFeld; procedure ZeichneEinheiten; public Feld: array of array of TFeld; Einheit:array of TEinheit; SelectedUnitIndex:Integer; function ErstelleEinheit(const EinheitenTyp:TEinheitenTyp;const NewOwner:TPlayer;const XPos,YPos:Word):Boolean;