Zielgesteuerte Bewegung auf Tilemap

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

gochx

Betreff: Zielgesteuerte Bewegung auf Tilemap

BeitragSo, Sep 02, 2007 10:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

ich hab mal wieder eine Frage:

Ich will, das ein Spieler bzw. Gegner auf einer Tilemap sein Ziel selbst findet. Die Tilemap besteht dabei zunächst aus einem zweidimensionalen Array, der zwei Zustände kennt: Weg frei oder Hindernis (=3).

Das Problem ist natürlich, dass manche Hindernisse im Weg zu Orientierungslosigkeit führen.
Eigentlich ist das ja so ne KI-Sache, ich hab aber irgendwie das Gefühl, dass man das auch mit wenigen Variablen und Abfragen lösen kann. Denke dabei an den alten Labyrinth-Trick, also "immer rechts abbiegen" in Verbindung mit dem Wissen ob ich mich rechts oder links bzw. oben oder unten vom meinem Ziel befinde.

Hier mal ein Ausschnitt aus meinem Code:
Code: [AUSKLAPPEN]

If (zielx>x) And tilemap[(x+1),y]<>3 And x<14 And direction<>4
   x:+1
   direction=2
Else If (ziely>y) And tilemap[x,(y+1)]<>3 And y<14 And direction<>1
   y:+1
   direction=3
Else If (zielx<x) And tilemap[(x-1),y]<>3 And x>0 And direction<>2
   x:-1
   direction=4
Else If (ziely<y) And tilemapt[x,(y-1)]<>3 And y>0 And direction<>3
   y:-1
   direction=1
Else If (zielx=x) And tilemap[(x+1),y]<>3 And x<14 And direction<>4
   x:+1
   direction=2
Else If (ziely=y) And tilemap[x,(y+1)]<>3 And y<14 And direction<>1
   y:+1
   direction=3   
End if


Direction sollte eigentlich verhindern, dass der gleiche Weg wieder zurückgelaufen wird. Also 1 ist oben, 2 rechts, 3 unten, 4 links (im Uhrzeigersinn).

Das Ganze funktioniert in manchen Fällen ganz gut. Wenn ich aber beispielsweise eine Mauer von oben nach unten ziehe und der Spieler von links nach rechts laufen soll, dann läuft meine Figuer (logischerweise) im Kreis.
Sagen wir's so: Ich weiß warum's mit meinem Code noch nicht funktioniert. Aber wie geht's besser?

Hat jemand ne Idee dafür, oder stell ich mir das ganze vielleicht auch zu einfach vor?

Gruß
Gochx
 

Dreamora

BeitragSo, Sep 02, 2007 11:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Dafür brauchst du eine Wegfinde Methode auf deiner Tilemap.

Gängige Methoden sind da A* (A-Star) oder Potential Fields.
Für A* wirst du jedoch hier im Forum Implementationen im Code Archiv finden und es ist auch bedeutend einfacher zu verstehen, darum empfehle ich dir, dich damit auseinander zu setzen. (Potential Fields basieren auf Vektorfeld Theorie und ihre praktische Anwendung -> höhere Mathe)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

ChristianK

BeitragSo, Sep 02, 2007 12:35
Antworten mit Zitat
Benutzer-Profile anzeigen
In den BlitzMax-Samples ist auch ein AStar-Beispiel drin.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

BladeRunner

Moderator

BeitragSo, Sep 02, 2007 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/foru...hp?t=19214
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

gochx

BeitragMo, Sep 03, 2007 7:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, genau das hab ich gesucht. bin zwar noch nicht ganz durchgestiegen, aber das Prinzip ist mir klar.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group