Automatische Bewegung von 2D Spielfiguren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag von GreyEnt »

Hi NG,

also das mit dem PathFind-algo würde mich Interessieren.
Habt ihr mal ein Tip oder denkanstoß für mich?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

JO :

Stichwort: Wasser, Wassertropfen

Stell dir vor am START Läuft Wasser in alle Richtungen.
Jeder Wassertopfen merkt sich sein Weg.
Der Wassertropfen der als erstes das Ziel erreicht, hat dann die INFO über den kürzesten weg.

Mein Tip: Versuch es selber zu erarbeiten, ist besser als ein COde zu bearbeiten.

Wenn du willst kann ich aber mein kleinen CODE posten
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag von GreyEnt »

@Stargate

Gratulation für Dune 2077. Hab ich mir mal angeschaut.
Toll.
Wenn Du ein Beispiel Code für mich hättest, wäre schön.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Ich habe die ne Mail geschickt (ZIP), ich hoffe du aknnst damit was anfangen ;-)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag von GreyEnt »

Danke Stargate,
Mail ist angekommen. Ich bin gerade bei einem Testprogramm dabei um zu schauen
ob ich ein altes Rundenbasiertes Strategiespiel clonen kann. bzw ob ich nicht besser die Finger davon lasse.
Das Spielfeld besteht aus Quadraten mit Land/Wasser/Bergen. Wie das bei Strategiespielen so ist. :)
Ich glaube da kommt mir dein Code gerade recht.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Ich hab die ganze Zeit auf meine Lösung geglotzt... /:->

Als Untergrund benutze ich eine Tile Engine. Nur zu optischen Zwecken. Das mit den Entities pro Tile ist eine gute Idee.

Kaeru hat mir schon wieder mal die Augen geöffnet! :lol:
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

tja... manchmal is altes eisen zu was gut... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
lassma-asma
Beiträge: 107
Registriert: 10.07.2007 09:14
Wohnort: Saarland

Beitrag von lassma-asma »

Hia leute,

@stargate ... ich interessiere mich auch für das thema und finde stargates demo auf seite 1 super .. ich versteh den code nur leider noch nich ganz ... wollte ma fragen ob ihn mir ma einer erklären könnte und dazuschreibt wozu welche variable da is ...


wäre echt toll

PS : SChon ma danke im Voraus

Gruß lassma-asma
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

OK, dann frische ich das mal auf :

Code: Alles auswählen

InitSprite() 
InitKeyboard() 
InitMouse() 

b.f = 3.14159265/180  ; Umrechnungsfaktor von Grad in Bogenmaß

OpenScreen(1024, 768, 32, "Bot 1.0") 

 Winkel.f ; Berechnungswinkel

 Bot_x.f = 512 ; X-Position vom Bot
 Bot_y.f = 386 ; Y-Position vom Bot
 Bot_v.f = 0 ; Geschwindigkeit vom Bot
 Bot_w.f = 0 ; Bewegungsrichtung (in Grad) vom Bot
 Bot_dw.f = 0 ; Rotationsgeschwindigkeit um sich selber vom Bot

 a = 1  ; Beschleunigungsfaktor
 max_v = 50 ; maximale Geschwindigkeit

 Repeat 

  ExamineMouse() 
   MouseX = MouseX() 
   MouseY = MouseY() 

  ClearScreen(0,0,0) 

  StartDrawing(ScreenOutput()) 

   ; Positionsänderung des Bots
   Bot_x = Bot_x + Cos(Bot_w*b)*Bot_v*0.1
   Bot_y = Bot_y + Sin(Bot_w*b)*Bot_v*0.1

   ; Richtungsänderung des Bots
   Bot_w = Bot_w + Bot_dw 
   While Bot_w < 0 : Bot_w + 360 : Wend 
   While Bot_w >= 360 : Bot_w - 360 : Wend 

   ; Abstand von Bot zu Maus
   deX = MouseX-Bot_x
   deY = MouseY-Bot_y 
   If deX = 0 : 
    If deY < 0 : Winkel = -90 : EndIf 
    If deY >= 0 : Winkel = 90 : EndIf 
   Else 
    Winkel = ATan(deY/deX)/b 
    If deX < 0 : Winkel + 180 : EndIf 
   EndIf 
   Unterschied = Winkel-Bot_w ; Winkelunterschied zwischen Bewegungsrichtung und Zielrichtung

   If Unterschied > 180 : Unterschied = Unterschied - 360 : EndIf 
   If Unterschied < -180 : Unterschied = Unterschied + 360 : EndIf 
   If Unterschied > 0 And Unterschied <= 180 : Bot_dw = Unterschied/10 : EndIf 
   If Unterschied < 0 And Unterschied >= -180 : Bot_dw = Unterschied/10 : EndIf 
   ; Richtungsänderung
   If Bot_dw > 45 : Bot_dw = 45 : ElseIf Bot_dw < -45 : Bot_dw = -45 : EndIf 
   ; Geschwindigkeitsänderung
   If Bot_v > Sqr((Sqr(Pow(deX,2)+Pow(deY,2)))*2*a) : If Bot_v > 0 : Bot_v = Bot_v - a : EndIf : EndIf 
   If Bot_v < Sqr((Sqr(Pow(deX,2)+Pow(deY,2)))*2*a) : If Bot_v < max_v : Bot_v = Bot_v + a : EndIf : EndIf 

   ;Bot 
   Circle(Bot_x, Bot_y, 10, RGB(255,255,255)) 
   LineXY(Bot_x, Bot_y, Bot_x+Cos(Bot_w*b)*20, Bot_y+Sin(Bot_w*b)*20) 

   ;Maus 
   Circle(MouseX, MouseY, 5, RGB(128,128,128)) 

  StopDrawing() 

  FlipBuffers() 

  ExamineKeyboard() 

 Until KeyboardReleased(#PB_Key_Escape) <> 0 

End 
Ich hoffe das Hilf weiter, wenn noch was Unklar ist, dann frag^^

WICHTIG: Es ist in 3.3 geschrieben, wenn als Fehler auftreten, musst du möglicherweise den ProcedurenSyntax ändern:
ClearScreen(0,0,0) >> bei dir >> ClearScreen(0)
usw...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
lassma-asma
Beiträge: 107
Registriert: 10.07.2007 09:14
Wohnort: Saarland

Beitrag von lassma-asma »

ja nee... danke schonma ... hab auch noch nich die 4.0 version ...

so ich versteh jetzt schon mehr aber leider noch nich alles ... wie lässt du denn den bot sich drehen ?? wie machst du das mit winkeln und so ...
und wofür setzt du die sin() und cos() funktionen ein ...
Antworten