January 15, 2021, 06:19:55 PM

Author Topic: [bmx] Mouse controlled "spaceship" firing rockets which explode after a defined time by kronholm [ 1+ years ago ]  (Read 481 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Mouse controlled "spaceship" firing rockets which explode after a defined time
Author : kronholm
Posted : 1+ years ago

Description : Nothing fancy, just a fully commented code snippet written to help you understand basic movement, gravity, classes (types) etc.

Code :
Code: BlitzMax
  1. 'fire multiple rockets that blow up at a certain time
  2. Graphics 800,600,0                                              'init gfx window
  3.  
  4. Global rocketlist:TList = CreateList()                          'make a list for active rockets
  5. Global gravity# = -0.07                                         'gravity
  6. SeedRnd(MilliSecs())                                            'make a quick "random" seed
  7. HideMouse
  8.  
  9. Repeat                                                          'mainloop, runs until escape pressed
  10.         If MouseHit(1) Then trocket.fire(5)                     'fire 5 rockets on LMB click, change to mousedown for autofire
  11.         DrawRect MouseX(),580,10,40
  12.         For Local rocket:trocket = EachIn rocketlist    'run thru rocketlist
  13.                 rocket.drawandmove()                            'draw a rocket
  14.         Next                                                    'move to next object in rocketlist
  15.         GCCollect()                                                     'collect garbage
  16.         Flip ; Cls                                              'flip backbuffer and clear it
  17. Until KeyHit(key_escape)
  18.  
  19. Type trocket                                                                           
  20.         Field x#,y#                                             'position of the rocket
  21.         Field xvel#=Rand(-2,2),yvel#=Rand(5,8)                  'velocity of the rocket
  22.         Field timetolive = 0, timetodie = 100                   'a crude timer deciding when rocket dies
  23.         Function fire(number)                                   'the "fire x number of rockets function"
  24.                 For Local i=1 To number                         'simply creates x number of trockets and adds them to list
  25.                         Local newrocket:trocket = New trocket
  26.                         newrocket.x = MouseX()+5 ; newrocket.y = 580    'set coordinates to mouse
  27.                         rocketlist.addlast(newrocket)
  28.                 Next
  29.         EndFunction
  30.         Method drawandmove()                            'move and draw a rocket
  31.                 x:+xvel ; y:-yvel                                       'add the veloceties
  32.                 yvel:+gravity                                                           'add the gravity to the y velocity
  33.                 DrawOval x,y,1,1                                                        'draw the rocket itself
  34.                 timetolive:+1                                                           'add to the timetolive counter
  35.                 If timetolive >= timetodie Then die()           'counter check
  36.         EndMethod
  37.         Method die()                                                                    'death method
  38.                 DrawText "BOOM",x-20,y                                          ' :)
  39.                 Local rocket:trocket = Self                                    
  40.                 rocketlist.remove(rocket)                                       'remove rocket from list
  41.                 rocket = Null                                                           'die.
  42.         EndMethod
  43. EndType


Comments :


IKG(Posted 1+ years ago)

 Love this thing! Helped me learn so much more about Max. Thanks again!


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal