Autor Beitrag
MariaMaria
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Sa 25.06.05 17:30 
Hallo Leute!
Wie kann ich für ein Spiel für meine Spielfigur möglichst schnell und effektiv den Weg vom aktuellen Punkt zu einem Zielpunkt berechnen?

Das Spielfeld besteht aus einzelnen Rechtecken, die entweder passierbar sind oder nicht. Die Spielfigur kann sich auf dem Spielfeld jeweils ein Kästchen in eine beliebige Richtung bewegen.

Das ganze könnte etwa so aussehen:

ausblenden Delphi-Quelltext
1:
2:
3:
var Spielfeld : array[0..100,0..100of boolean; // false bedeutet das feld ist passierbar, true bedeutet Hindernis
    Figur : TPoint; // Die aktuelle Position der Figur auf dem Spielfeld
    Ziel : TPoint;  // Die Stelle wo meine Figur hinmuss


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 25.06.05 17:40 
Hallo und :welcome:

Eine Möglichkeit, einen Weg durch dieses 0-1-Array zu finden ist folgender:

1. Starte bei A und markiere es als 'begangen'.

2. Suche von dort ein Nachbarfeld, was noch nicht 'begangen' ist, aber passierbar ist.

3. Gibt es ein solches Feld, dann gehe dorthin und markiere es ebenfalls als 'begangen'.

4. Wenn du zu einem Feld kommst, von wo aus es nur zurückgeht (= Sackgasse) dann gehe zurück, und markiere das gerade verlassene Feld als 'Sackgasse'.

5. Wiederhole ab Punkt 2, bis man am Zielfeld ist.

_________________
We are, we were and will not be.
MariaMaria Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Sa 25.06.05 19:48 
Leider "rast" die Spielfigur so nur eine ewigkeit auf dem Spielfeld herum, bis sie schließlich nach langem Probieren den Weg findet.
Ich dachte eigentlich an eine Möglichkeit, den Weg bereits im Voraus zu berechnen, und zwar einen möglichst kurzen Weg sofort zum Ziel!?
I.MacLeod
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 109



BeitragVerfasst: Sa 25.06.05 21:43 
Da gibt es viele wundervolle Algorithmen für :mrgreen:

www.policyalmanac.or...es/aStarTutorial.htm

ach, hier gibts sogar direkt einen haufen Links:

www.gameai.com/pathfinding.html

_________________
{$APPTYPE CONSOLE}uses SysUtils;const a='{$APPTYPE CONSOLE}uses SysUtils;const a=%s;begin write(Format(a,[#39+a+#39]))end.';begin write(Format(a,[#39+a+#39]))end.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 26.06.05 00:52 
Für eine Implementierung (für eine nicht notwendigerweise Regelmäigen Wegeverlauf kannst Du Dir cvs.sourceforge.net/...e/OAIBacktracing.pas angucken. Die Wegebeschreibungen werden dort über Call-Back-Events realisiert. Für Regelmäßige Verlinkung reicht das Normal-Plane aus, was die Unit automatisch verwaltet.
ACHTUNG: Nutzung ATM nicht ganz trivial...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.