Hindernisrennen
Übersicht

![]() |
NoobyBetreff: Hindernisrennen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallihallo,
Ich will mal wissen, wie bei den ganzen Strategiespielen die Einheiten immer genau wissen, wo sie langgehen müssen um ein bestimmtes Ziel zu erreichen. Angenommen die Einheiten können nur auf Diagonalen, Waagerechten und Senkrechten laufen und das Spielfeldist ein 2d-Koordinatensystem (also nur Quadrate als felder für die Einheiten und keine 6-Ecke, wie bei Siedler). So ist es noch einfach: Code: [AUSKLAPPEN] ---------------- -----*---------- -----#---------- -----#---------- -----#---------- -----#---------- -----#---------- ------#--------- -------#-------- --------#------- ---------#------ ----------#----- -----------#---- ------------+--- Einheit "*" will zu Ziel "+". "#" ist der Weg. Es gibt natürlich zwei Wege (wenn man nicht im zickzack gehen will), aber wir geben mal vor, dass der "gerade" Weg Vorrang hat. Mein Code dafür ist: Code: [AUSKLAPPEN] Graphics 800,600,32,1 SetBuffer BackBuffer() Dim richtung(0,2) ;gibt an wohin der Punkt bewegt werden soll (Punktnummer,[x/y]) = [-1/0/+1] Dim position(0,1,1) ;Position eines Männeken und seines Ziels (Punktnummer,[Ziel/Typ],[x/y]) position(0,0,0)=40 position(0,0,1)=30 position(0,1,0)=40 position(0,1,1)=30 MoveMouse 400,300 Global anzpunkte=1 ms=MilliSecs() Repeat Delay 10 Cls If MouseHit(1) position(0,1,0)=Floor(MouseX()/10) position(0,1,1)=Floor(MouseY()/10) EndIf If MilliSecs()=>ms ms=MilliSecs()+100 punktebewegen EndIf Color 255,255,255 Oval position(0,0,0)*10,position(0,0,1)*10,10,10 Rect MouseX(),MouseY(),1,1 Color 255,0,0 Oval position(0,1,0)*10+2,position(0,1,1)*10+2,6,6 Flip Until KeyHit(1) End Function punktebewegen() ;rechnet die x- und y-Richtungen aus For a=0 To anztypen-1 xdif=position(a,1,0)-position(a,0,0) ydif=position(a,1,1)-position(a,0,1) xbewegen=0 ybewegen=0 If Abs(xdif)>Abs(ydif) xbewegen=1 ElseIf Abs(ydif)>Abs(xdif) ybewegen=1 Else xbewegen=1 ybewegen=1 EndIf If xdif=0 xrichtung=0 Else xrichtung=xbewegen*(xdif/Abs(xdif)) EndIf If ydif=0 yrichtung=0 Else yrichtung=ybewegen*(ydif/Abs(ydif)) EndIf position(a,0,0)=position(a,0,0)+xrichtung position(a,0,1)=position(a,0,1)+yrichtung Next End Function (keine Bilder erforderlich) ![]() Code: [AUSKLAPPEN] -------------- -----*##------ --------#----- ---------#---- ----------#--- -----------#-- %%%%%%%%%%%%#- ------------#- ------------#- ------------#- ------------#- -----------#-- ----------#--- ---------+---- Wie bringe ich das mit ein? Oder ist das vielleicht zu kompliziert? |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
![]() |
Nooby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Pardon
Fehler im Code... ![]() Code: [AUSKLAPPEN] Graphics 800,600,32,1 SetBuffer BackBuffer() Dim richtung(0,2) ;gibt an wohin der Punkt bewegt werden soll (Punktnummer,[x/y]) = [-1/0/+1] Dim position(0,1,1) ;Position eines Männeken und seines Ziels (Punktnummer,[Ziel/Punkt],[x/y]) position(0,0,0)=40 position(0,0,1)=30 position(0,1,0)=40 position(0,1,1)=30 MoveMouse 400,300 Global anzpunkte=1 ms=MilliSecs() Repeat Delay 10 Cls If MouseHit(1) position(0,1,0)=Floor(MouseX()/10) position(0,1,1)=Floor(MouseY()/10) EndIf If MilliSecs()=>ms ms=MilliSecs()+100 punktebewegen EndIf Color 255,255,255 Oval position(0,0,0)*10,position(0,0,1)*10,10,10 Rect MouseX(),MouseY(),1,1 Color 255,0,0 Oval position(0,1,0)*10+2,position(0,1,1)*10+2,6,6 Flip Until KeyHit(1) End Function punktebewegen() ;rechnet die x- und y-Richtungen aus For a=0 To anzpunkte-1 xdif=position(a,1,0)-position(a,0,0) ydif=position(a,1,1)-position(a,0,1) xbewegen=0 ybewegen=0 If Abs(xdif)>Abs(ydif) xbewegen=1 ElseIf Abs(ydif)>Abs(xdif) ybewegen=1 Else xbewegen=1 ybewegen=1 EndIf If xdif=0 xrichtung=0 Else xrichtung=xbewegen*(xdif/Abs(xdif)) EndIf If ydif=0 yrichtung=0 Else yrichtung=ybewegen*(ydif/Abs(ydif)) EndIf position(a,0,0)=position(a,0,0)+xrichtung position(a,0,1)=position(a,0,1)+yrichtung Next End Function sorry |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
![]() |
DCSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
---|---|---|
... wieso benutzt du nicht einfach die editier-Funktion?! | ||
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com | www.CarnageContest.com | www.Stranded3.com |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auf www.blitzbase.de gibts eine Pathfinding-Routine. Das sollte genau das sein was Du brauchst ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group