zufälliges Bewegen vom Gegner [gelöst]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

damagerII

Betreff: zufälliges Bewegen vom Gegner [gelöst]

BeitragMi, Dez 02, 2009 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
kann mir jemand vielleicht helfen das sich das objekt gegner zufällig auf der x achse im bild bewegt?:

Code: [AUSKLAPPEN]
Global Hero  = LoadImage("shuttle.bmp")
Global laser = LoadImage("shot2.bmp")
Global gegner = LoadImage("hero2.bmp")
MaskImage hero,0,0,0
MaskImage laser,255,255,255
MaskImage gegner,0,0,0

Global hero_x = 500, hero_y = 600, shot_counter = 0
Global gegner_x = 500, gegner_y = 50
Global time1
Global time2


Type shot         
 Field shot_x     
 Field shot_y     
End Type

time1=MilliSecs()

Repeat
Cls

time2=MilliSecs()
 
 moveHero()
 createLaser()

Flip
Until KeyHit(1) 
Function moveHero()
 
   If KeyDown(203) Then hero_x = hero_x - 3
   If KeyDown(205) Then hero_x = hero_x +3

 ;rauf und runter

  If KeyDown(200) Then hero_Y = hero_y -3
  If KeyDown(208) Then hero_y = hero_y +3

 DrawImage hero, hero_x, hero_y

End Function

Function createlaser()

   If KeyHit(57) Then
        shot_counter = shot_counter +1
   End If

    If shot_counter = 1 Then
     
       info.shot = New shot           
         info\shot_x = hero_x  +40     
         info\shot_y = hero_y         
   
        shot_counter = 0             
     End If


 For info.shot = Each shot                             
     info\shot_y = info\shot_y -8                       
     DrawImage laser,info\shot_x,info\shot_y           
  Next

 DrawImage gegner, gegner_x, gegner_y

End Function

Danke schonmal im vorraus
mfg damagerII Smile
  • Zuletzt bearbeitet von damagerII am Fr, Dez 04, 2009 15:52, insgesamt 2-mal bearbeitet
 

BBPro2

BeitragMi, Dez 02, 2009 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
niemand wird dir hier code schreiben...

schau dir die befehle

SeedRnd und Rand bzw Rnd an

der Rest sollte dann klar sein.

ozzi789

BeitragMi, Dez 02, 2009 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

bitte benütze die Codetags!
Code: [AUSKLAPPEN]
[code]Hier kommt Code[/code]



Schau dir mal Rnd / Rand / Seedrnd an, so kann man zufällige Werte berechnen.
Pseudocode

Code: [AUSKLAPPEN]
if millisecs()>time+300 ;wenn 300 millisecs vergangen sind
time=millisecs()
richtung=rand(1,2) ; die Richtung bestimmen
endif

speed=rand(1,5) ;Zufällige Geschwindigkeit errechnen
if richtung=1
playerx=playerx+speed ;Falls vor 300 ms richtung=1 war den player nach rechts bewegen
endif
if richting=2
playerx=playerx-speed ; Falls vor 300 ms richtung=2 war den player nach links bewegen
endif


Edit: Zu spät Very Happy


mfg ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

damagerII

Betreff: thx

BeitragMi, Dez 02, 2009 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke Smile
 

damagerII

BeitragMi, Dez 02, 2009 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe es ausprobiert aber leider nicht hinbekommen... Shocked wenn man sich meinen code anguckt wie mus ich das dann einbauen???

Zitat:
if millisecs()>time+300 ;wenn 300 millisecs vergangen sind
time=millisecs()
richtung=rand(1,2) ; die Richtung bestimmen
endif

speed=rand(1,5) ;Zufällige Geschwindigkeit errechnen
if richtung=1
playerx=playerx+speed ;Falls vor 300 ms richtung=1 war den player nach rechts bewegen
endif
if richting=2
playerx=playerx-speed ; Falls vor 300 ms richtung=2 war den player nach links bewegen
endif

mpmxyz

BeitragMi, Dez 02, 2009 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
"richting"?
Ich empfehle dir, IDEal zu nutzen.
Dann merkst du nämlich schnell, ob alles richtig geschrieben ist.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

damagerII

BeitragMi, Dez 02, 2009 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ich werde es ausprobieren könnte von vorteil sein Wink
naja mein problem ist das ich nicht verstehe wie ich den code:

Zitat:
if millisecs()>time+300 ;wenn 300 millisecs vergangen sind
time=millisecs()
richtung=rand(1,2) ; die Richtung bestimmen
endif

speed=rand(1,5) ;Zufällige Geschwindigkeit errechnen
if richtung=1
playerx=playerx+speed ;Falls vor 300 ms richtung=1 war den player nach rechts bewegen
endif
if richting=2
playerx=playerx-speed ; Falls vor 300 ms richtung=2 war den player nach links bewegen
endif


in mein game einzubauen:

Code: [AUSKLAPPEN]
Global Hero  = LoadImage("shuttle.bmp")
Global laser = LoadImage("shot2.bmp")
Global gegner = LoadImage("hero2.bmp")
MaskImage hero,0,0,0
MaskImage laser,255,255,255
MaskImage gegner,0,0,0

Global hero_x = 500, hero_y = 600, shot_counter = 0
Global gegner_x = 500, gegner_y = 50
Global time1
Global time2


Type shot         
 Field shot_x     
 Field shot_y     
End Type

time1=MilliSecs()

Repeat
Cls

time2=MilliSecs()
 
 moveHero()
 createLaser()

Flip
Until KeyHit(1) 
Function moveHero()
 
   If KeyDown(203) Then hero_x = hero_x - 3
   If KeyDown(205) Then hero_x = hero_x +3

 ;rauf und runter

  If KeyDown(200) Then hero_Y = hero_y -3
  If KeyDown(208) Then hero_y = hero_y +3

 DrawImage hero, hero_x, hero_y

End Function

Function createlaser()

   If KeyHit(57) Then
        shot_counter = shot_counter +1
   End If

    If shot_counter = 1 Then
     
       info.shot = New shot           
         info\shot_x = hero_x  +40     
         info\shot_y = hero_y         
   
        shot_counter = 0             
     End If


 For info.shot = Each shot                             
     info\shot_y = info\shot_y -8                       
     DrawImage laser,info\shot_x,info\shot_y           
  Next

 DrawImage gegner, gegner_x, gegner_y

End Function


ich weiß nicht genau was ich anstatt richtung oder player einsetzen muss, wenn man es in mein game einbauen will??? Shocked
 

Lion

BeitragMi, Dez 02, 2009 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
wie wärs mit gegner_x, gegner_y?
Und richtung kannste doch so lassen, verwendest die variable doch nirgends anders. abgesehen von meiner empfehlung für types bei den gegnern kannste das doch einfach übernehmen und in die hauptschleife packen
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x

Nicdel

BeitragMi, Dez 02, 2009 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Wär glaube ich ganz gut, wenn du dir mal ein paar Grundlagentutorials anschauen würdest Wink
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

damagerII

BeitragMi, Dez 02, 2009 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
danke euch beiden Smile
ich habe den code jetzt eingebaut:

Code: [AUSKLAPPEN]
Global Hero  = LoadImage("shuttle.bmp")
Global laser = LoadImage("shot2.bmp")
Global gegner = LoadImage("hero2.bmp")
MaskImage hero,0,0,0
MaskImage laser,255,255,255
MaskImage gegner,0,0,0

Global hero_x = 500, hero_y = 600, shot_counter = 0 
Global gegner_x = 500, gegner_y = 50
Global time1
Global time2
Global leben = 0
Global leben2 = 0

Type shot         
 Field shot_x     
 Field shot_y     
End Type

time1=MilliSecs()

Repeat
Cls

time2=MilliSecs()
 
 moveHero()
 createLaser()
 collidegegner()
 moveFeind()

Flip
Until KeyHit(1)   
Function moveHero()
 
   If KeyDown(203) Then hero_x = hero_x - 3
   If KeyDown(205) Then hero_x = hero_x +3

  If KeyDown(200) Then hero_Y = hero_y -3
  If KeyDown(208) Then hero_y = hero_y +3

 DrawImage hero, hero_x, hero_y

End Function

Function moveFeind()

   If MilliSecs()>time+300 ;wenn 300 millisecs vergangen sind
   time=MilliSecs()
   richtung=Rand(1,2) ; die Richtung bestimmen
   EndIf

   speed=Rand(1,5) ;Zufällige Geschwindigkeit errechnen
   If richtung=1
   gegner_x=gegner_x+speed ;Falls vor 300 ms richtung=1 war den player nach rechts bewegen
   EndIf
   If richting=2
   gegner_x=gegner_x-speed ; Falls vor 300 ms richtung=2 war den player nach links bewegen
   EndIf
   
End Function


Function createlaser()

   If KeyHit(57) Then
        shot_counter = shot_counter +1
   End If

    If shot_counter = 1 Then
     
       info.shot = New shot           
         info\shot_x = hero_x  +40     
         info\shot_y = hero_y         
        shot_counter = 0             
     End If


 For info.shot = Each shot                             
     info\shot_y = info\shot_y -8                       
     DrawImage laser,info\shot_x,info\shot_y           
  Next

 Text 0,0, leben2 + "%"
 DrawImage gegner, gegner_x, gegner_y

End Function

Function collidegegner()

    For info.shot = Each shot

   If ImagesCollide(gegner, gegner_x, gegner_y, 0, laser, info\shot_x, info\shot_y, 0) Then
   leben2=leben2+5
   EndIf
   
   If leben2=150 Then
   End
   EndIf
   
   Next

End Function


und es klappt, der gegner bewegt sich...
nur hat sich dadurch folgendes problem ergeben:
der gegner bewegt sich die ganze zeit in eine richtung (bis jetzt immer nach rechts) und verlässt dann auch das fenster (also ist nicht mehr zu sehen). Wie bekomme ich das hin das er vor dem map ende stoppt und sich auch nach links bewegt???? Wink

mpmxyz

BeitragMi, Dez 02, 2009 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
1. mpmxyz hat Folgendes geschrieben:
"richting"?
->IDEal + immer lokale Variablen mit Local deklarieren
2. Wenn der Gegner zu weit rechts bzw links ist und er aber in diese Richtung geht, sollte die Richtung geändert werden
3. "Richtung" und "time" müssen Global sein, da sie nämlich sonst nur temporär bzw. lokal in der Funktion erstellt werden und danach wieder verschwinden.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

damagerII

BeitragMi, Dez 02, 2009 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
hey danke jetzt klappts perfekt Very Happy

ozzi789

BeitragMi, Dez 02, 2009 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Nach dem Bewegen schaust du einfach ob player_x kleiner ist als zmb 800 und grösser als 0, falls dem nicht so ist setzt du den Player zurück und änderst die Variable Richtung!

Achja vermeide doubbleposts, benutze den Editieren Button.

mfg ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

damagerII

Betreff: okay

BeitragDo, Dez 03, 2009 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
ok Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group