November 24, 2020, 09:29:21 AM

Author Topic: [bb] 2d Space Invaders example by Pakz [ 1+ years ago ]  (Read 581 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] 2d Space Invaders example by Pakz [ 1+ years ago ]
« on: June 29, 2017, 12:28:40 AM »
Title : 2d Space Invaders example
Author : Pakz
Posted : 1+ years ago

Description :

Here a video of it : <a href="" target="_blank">[/url]

Space invaders example. Uses no external media. Only the bare version of it. +/-250 lines long.


Code :
Code: BlitzBasic
  1. ; Space invaders example by Pakz (Rudy van Etten)
  2.  
  3. Graphics 640,480,32,2
  4. SetBuffer BackBuffer()
  5. SeedRnd MilliSecs()
  6.  
  7. Global wavetime,wavemx#
  8. Global alienlaserfallspeed# = 2
  9. Global playerbulletrisespeed# = -3
  10.  
  11. Type alien
  12.         Field x,y
  13. End Type
  14.  
  15. Type barrier ; destructable barriers
  16.         Field x,y,image
  17. End Type
  18.  
  19. Type player
  20.         Field x,y,score
  21. End Type
  22.  
  23. Type pbullet ; player bullets
  24.         Field x#,y#
  25. End Type
  26.  
  27. Type abullet ; alien bullets
  28.         Field x#,y#
  29. End Type
  30.  
  31. Global p.player = New player
  32. px = GraphicsWidth()/2-16/2
  33. py = GraphicsHeight()-32
  34.  
  35. initbarriers()
  36. initaliens()
  37. wavemx = 1
  38.  
  39. timer = CreateTimer(60)
  40. While KeyDown(1) = False
  41.         WaitTimer timer
  42.         Cls
  43.         updateplayer
  44.         updateplayerbullets
  45.         updatealiens
  46.         updatealienbullets
  47.         updatebarriers
  48.         drawaliens
  49.         drawalienbullets
  50.         drawbarriers
  51.         drawplayerbullets
  52.         drawplayer
  53.         ; Restart if aliens are all gone
  54.         restart =  True
  55.         For this.alien = Each alien
  56.                 restart = False : Exit
  57.         Next
  58.         If restart = True
  59.                 Delete Each abullet
  60.                 Delete Each pbullet
  61.                 initaliens()
  62.                 wavemx = 1
  63.                 px = GraphicsWidth()/2-16              
  64.         End If 
  65.         Color 255,255,255
  66.         Text 0,0,"Press cursors to move shipblock and space to fire"
  67.         Flip
  68. Wend
  69. End
  70.  
  71. Function updatebarriers()
  72.         For this.pbullet = Each pbullet
  73.                 delbullet = False
  74.                 For that.barrier = Each barrier
  75.                         If ImageRectCollide(thatimage,thatx-32,thaty-24,0,thisx-4,thisy-6,8,12)
  76.                                 SetBuffer ImageBuffer(thatimage)
  77.                                 Color 0,0,0
  78.                                 ;location in image to erase
  79.                                 x1 = thisx
  80.                                 x2 = thatx
  81.                                 y1 = thisy
  82.                                 y2 = thaty
  83.                                 x3 = x1-x2
  84.                                 y3 = y1-y2
  85.                                 Oval x3+ImageWidth(thatimage)/2-6,y3+16-6,12,12,True
  86.                                 SetBuffer BackBuffer()
  87.                                 delbullet = True
  88.                         End If
  89.                 Next
  90.                 If delbullet = True Then Delete this
  91.         Next
  92.         For a1.abullet = Each abullet
  93.                 delbullet = False
  94.                 For a2.barrier = Each barrier
  95.                         If ImageRectCollide(a2image,a2x-32,a2y-24,0,a1x-4,a1y-6,8,12)
  96.                                 SetBuffer ImageBuffer(a2image)
  97.                                 Color 0,0,0
  98.                                 ;location in image to erase
  99.                                 x1 = a1x
  100.                                 x2 = a2x
  101.                                 y1 = a1y
  102.                                 y2 = a2y
  103.                                 x3 = x1-x2
  104.                                 y3 = y1-y2
  105.                                 DebugLog x3+","+y3
  106.                                 Oval x3+ImageWidth(a2image)/2-6,y3+28-4,12,12,True
  107.                                 SetBuffer BackBuffer()
  108.                                 delbullet = True
  109.                         End If
  110.                 Next
  111.                 If delbullet = True Then Delete a1
  112.         Next
  113.  
  114. End Function
  115.  
  116. Function initbarriers()
  117.         For x=64 To GraphicsWidth()-64 Step 96
  118.                 this.barrier = New barrier
  119.                 thisx = x
  120.                 thisy = GraphicsHeight()-128
  121.                 If thisimage = 0 thisimage = CreateImage(64,48)
  122.                 SetBuffer ImageBuffer(thisimage)
  123.                 Color 200,200,200
  124.                 Rect 0,0,ImageWidth(thisimage),ImageHeight(thisimage),True
  125.         Next
  126.         SetBuffer BackBuffer()
  127. End Function
  128.  
  129. Function drawbarriers()
  130.         For this.barrier = Each barrier
  131.                 DrawImage thisimage,thisx-ImageWidth(thisimage)/2,thisy-ImageHeight(thisimage)/2
  132.         Next
  133. End Function
  134.  
  135. Function updateplayerbullets()
  136.         For this.pbullet = Each pbullet
  137.                 thisy = thisy + playerbulletrisespeed
  138.                 If thisy+6 < -32 Then Delete this
  139.         Next
  140. End Function
  141.  
  142. Function drawplayerbullets()
  143.         Color 255,255,0
  144.         For this.pbullet = Each pbullet
  145.                 Oval thisx-2,thisy-6,4,12,True
  146.         Next
  147. End Function
  148.  
  149. Function updateplayer()
  150.         If KeyDown(205)
  151.                 If px < GraphicsWidth()-16
  152.                         px = px + 3
  153.                 End If         
  154.         End If
  155.         If KeyDown(203)
  156.                 If px > 16
  157.                         px = px - 3
  158.                 End If
  159.         End If
  160.         If KeyDown(57) = True
  161.                 fire = True
  162.                 nothing = True         
  163.                 For this.pbullet = Each pbullet
  164.                         nothing = False
  165.                         d = distance(thisx,thisy,px,py)                
  166.                         DebugLog d+","+MilliSecs()
  167.                         If d < 64
  168.                                 fire = False
  169.                         End If
  170.                 Next
  171.                 If fire = True Or nothing = True Then
  172.                         that.pbullet = New pbullet
  173.                         thatx = px
  174.                         thaty = py-16
  175.                 End If
  176.         End If
  177.         For a1.abullet = Each abullet
  178.                 If RectsOverlap(px-16,py-16,32,32,a1x-4,a1y-6,8,12) = True
  179.                         pscore = 0
  180.                         px = GraphicsWidth()/2-16
  181.                         py = GraphicsHeight() - 32
  182.                         Delete a1
  183.                 End If
  184.         Next
  185. End Function
  186.  
  187. Function updatealienbullets()
  188.         For this.abullet = Each abullet
  189.                 thisy = thisy + alienlaserfallspeed
  190.                 If thisy-2 > GraphicsHeight() Then Delete this
  191.         Next
  192. End Function
  193.  
  194. Function drawalienbullets()
  195.         Color 0,0,255
  196.         For this.abullet = Each abullet
  197.                 Oval thisx-6,thisy-6,6,12,True
  198.         Next
  199. End Function
  200.  
  201. Function updatealiens()
  202.         For this.alien = Each alien
  203.                 removecurrentalien = False
  204.                 If thisx + 32 > GraphicsWidth() Then wavemx = -1
  205.                 If thisx - 32 < 0 Then wavemx = 1
  206.                 thisx = thisx + wavemx
  207.                 If Rand(1,3000) = 1
  208.                         that.abullet = New abullet
  209.                         thatx = thisx
  210.                         thaty = thisy + 16
  211.                 End If
  212.                 ; collision with the player bullets (pbullet)
  213.                 For thot.pbullet = Each pbullet
  214.                         If RectsOverlap(thisx-16,thisy-16,32,32,thotx-4,thoty-6,8,12)
  215.                                 removecurrentalien = True
  216.                                 Delete thot
  217.                         End If
  218.                 Next
  219.                 If removecurrentalien = True Then Delete this
  220.         Next
  221. End Function
  222.  
  223. Function drawaliens()
  224.         Color 255,255,255
  225.         For this.alien = Each alien
  226.                 Rect thisx-16,thisy-16,32,32,True
  227.         Next
  228. End Function
  229.  
  230. Function initaliens()
  231.         For y=0 To 4
  232.         For x=0 To 9
  233.                 this.alien = New alien
  234.                 thisx = x * 48 + 32
  235.                 thisy = y * 48 + 32
  236.         Next
  237.         Next   
  238. End Function
  239.  
  240. Function drawplayer()
  241.         Color 255,255,255
  242.         Rect px-16,py-16,32,32,True
  243. End Function
  244.  
  245. Function distance(x1,y1,x2,y2)
  246.         Return Abs(x2-x1)+Abs(y2-y1)
  247. End Function


Comments :


Darkseid2.0(Posted 1+ years ago)

 Not bad at all, with a little effort any one can edit the code and turn this into another Space Invaders clone.Good work. Keep it up.


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal