1. ; PROJECT : spaceinvaders
  2. ; AUTHOR : david wheeler
  3. ; CREATED : 27/01/2011
  4. ; EDITED : 27/02/2011
  5. ; ---------------------------------------------------------------------
  6. OpenScreen 640,480,32,2
  7. SetFPS 60
  8. ScreenVsync On
  9. Mouse Off
  10. Global quit=False
  11. Global invaderimage1=1
  12. Global invaderimage2=4
  13. Global shipimage=60
  14. Global numofinvaders=0
  15. Global shipsprite=60
  16. Global movem
  17. Global anim
  18. Global dropem
  19. Global tit
  20. global v
  21. Global changedir = 1 ; *** edit here and give a start direction; could be 1 or -1
  22. Type tinvader
  23. image
  24. oldimage
  25. Status
  26. speed
  27. Xpos,Ypos
  28. animadd
  29. count
  30. EndType
  31. Type tship
  32. image
  33. xpos
  34. ypos
  35. speed
  36. status
  37. EndType
  38.  
  39. Dim invaders(100) As tinvader
  40. Dim ship(1) As tship
  41. creategfx()
  42. setupwave()
  43. s$="Number of Invaders = "
  44. s$=s$+Str$(numofinvaders)
  45. ship(1).speed=2
  46. Repeat
  47. Cls 0
  48. v=ScanCode()
  49. Print s$
  50. Print shipimage
  51. tick=tick+1
  52. If tick>40
  53. tick=0
  54. tit=1
  55. movem=1
  56. EndIf
  57. control_Invaders()
  58. control_player()
  59. movem=0
  60. drop=0
  61. DrawAllSprites
  62. Sync
  63. Until quit=True
  64.  
  65. function control_invaders()
  66. ;*** this is to check wether to change dir and drop or not
  67. For n=1 To numofinvaders
  68. If invaders(n).xpos+invaders(n).speed > 608
  69. drop = 1
  70. changedir = -1
  71. ExitFor
  72. ElseIf invaders(n).xpos+invaders(n).speed < 0
  73. drop = 1
  74. changedir = 1
  75. ExitFor
  76. Else
  77. drop = 0
  78. EndIf
  79. Next
  80. ;*** end edit part
  81. For n=1 To numofinvaders
  82. If movem=1
  83.  
  84. invaders(n).xpos=invaders(n).xpos+(invaders(n).speed*changedir) ; <-- here: calculate xpos with the changdir
  85.  
  86. ;*** if drop = 1 the we calculate the new ypos
  87. If drop = 1
  88. invaders(n).ypos = invaders(n).ypos+16
  89. EndIf
  90. ;*** end edit part
  91. tit=1
  92. EndIf
  93. If tit=1 And invaders(n).count=0
  94. Inc invaders(n).count
  95. invaders(n).image=invaders(n).animadd
  96. SpriteImage n,invaders(inv).image
  97.  
  98. EndIf
  99. If tit=1 And invaders(n).count>30
  100. invaders(n).count=0
  101. tit=0
  102. invaders(n).image=invaders(n).image-invaders(n).animadd
  103. SpriteImage n,invaders(inv).image
  104. EndIf
  105. If movem=0
  106. invaders(n).image=1
  107. EndIf
  108.  
  109. PositionSprite n,invaders(n).xpos,invaders(n).ypos
  110. ;DrawSprite n
  111. Next
  112. endfunction
  113.  
  114. Function control_player()
  115.  
  116. Print v
  117. If v=203
  118. ship(1).xpos=ship(1).xpos-ship(1).speed
  119. EndIf
  120. If v=205
  121. ship(1).xpos=ship(1).xpos+ship(1).speed
  122. EndIf
  123. PositionSprite shipsprite,ship(1).xpos,ship(1).ypos
  124. If v=16
  125. quit=True
  126. EndIf
  127.  
  128. EndFunction
  129.  
  130. Function creategfx()
  131.  
  132. Restore gfx
  133. Invaderimage1=MakeImageFromData(13,10,32,20)
  134. Invaderimage2=MakeImageFromData(13,10,32,20)
  135. ;********************** Create Players Ship Sprite *************
  136.  
  137. ShipImage=MakeImageFromData(13,10,32,20)
  138.  
  139. // This resource really should created dynamically
  140. CreateSprite shipsprite
  141. SpriteImage shipsprite,shipimage
  142.  
  143. ship(1).image=shipimage
  144. ship(1).xpos=320
  145. ship(1).ypos=400
  146. EndFunction
  147.  
  148. Function MakeImageFromData(DataWidth,DataHeight,PixelWidth,PixelHeight,ThisColour=$00ff00)
  149. oldsurface=GetSurface()
  150. ThisImage=NewImage(DataWidth,DataHeight)
  151. RenderToImage ThisIMage
  152. Ink ThisColour
  153. LockBuffer
  154. For y=0 To DataHeight-1
  155. For x=0 To DataWidth-1
  156. If ReadData()>0
  157. Dot x,y
  158. EndIf
  159. Next x
  160. Next y
  161. UnLockBuffer
  162. RenderToImage oldsurface
  163. ScaleImage ThisImage,PixelWidth,PixelHeight,1
  164. EndFunction ThisImage
  165.  
  166. Function setupwave()
  167. offsety=30
  168. inv=1
  169. For y=1 To 10
  170. For x=1 To 13
  171. t=ReadData()
  172. If t>0
  173. invaders(inv).xpos=offsetx
  174. invaders(inv).ypos=offsety
  175. invaders(inv).image=t
  176. invaders(inv).animadd=invaders(inv).image+1
  177.  
  178. invaders(inv).speed=8
  179. CreateSprite inv
  180. SpriteImage inv,invaders(inv).image
  181. Inc inv
  182. Inc numofinvaders
  183. EndIf
  184. offsetx=offsetx+38
  185. If x>11
  186. offsety=offsety+15
  187. offsetx=0
  188. EndIf
  189. Next
  190. Next
  191. EndFunction
  192. gfx1:
  193. ;invader1 top row Image A
  194. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  195. Data 0,0,1,0,0,0,0,0,1,0,0,0,0
  196. Data 1,0,0,1,0,0,0,1,0,0,1,0,0
  197. Data 1,0,1,1,1,1,1,1,1,0,1,0,0
  198. Data 1,1,1,0,1,1,1,0,1,1,1,0,0
  199. Data 1,1,1,1,1,1,1,1,1,1,1,0,0
  200. Data 0,1,1,1,1,1,1,1,1,1,0,0,0
  201. Data 0,0,1,0,0,0,0,0,1,0,0,0,0
  202. Data 0,1,0,0,0,0,0,0,0,1,0,0,0
  203. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  204. ;invader1 top row Image B
  205. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  206. Data 0,0,1,0,0,0,0,0,1,0,0,0,0
  207. Data 0,0,0,1,0,0,0,1,0,0,0,0,0
  208. Data 0,0,1,1,1,1,1,1,1,0,0,0,0
  209. Data 0,1,1,0,1,1,1,0,1,1,0,0,0
  210. Data 1,1,1,1,1,1,1,1,1,1,1,0,0
  211. Data 1,1,1,1,1,1,1,1,1,1,1,0,0
  212. Data 1,0,1,0,0,0,0,0,1,0,1,0,0
  213. Data 1,0,0,1,1,0,1,1,0,0,1,0,0
  214. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  215. ;players_shipgfx
  216. Data 0,0,0,0,0,1,0,0,0,0,0,0,0
  217. Data 0,0,0,0,1,1,1,0,0,0,0,0,0
  218. Data 0,0,0,0,1,1,1,0,0,0,0,0,0
  219. Data 0,1,1,1,1,1,1,1,1,1,0,0,0
  220. Data 1,1,1,1,1,1,1,1,1,1,1,0,0
  221. Data 1,1,1,1,1,1,1,1,1,1,1,0,0
  222. Data 1,1,1,1,1,1,1,1,1,1,1,0,0
  223. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  224. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  225. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  226.  
  227.  
  228.  
  229. wave:
  230. Data 0,0,0,1,1,1,1,1,1,1,0,0,0
  231. Data 0,0,1,1,1,1,1,1,1,1,1,0,0
  232. Data 0,0,1,1,1,1,1,1,1,1,1,0,0
  233. Data 0,1,1,1,1,1,1,1,1,1,1,1,0
  234. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  235. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  236. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  237. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  238. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  239. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  240.  
  241.  
  242.  
  243. Function dump()
  244. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  245. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  246. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  247. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  248. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  249. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  250. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  251. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  252. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  253. Data 0,0,0,0,0,0,0,0,0,0,0,0,0
  254.  
  255. endfunction