home *** CD-ROM | disk | FTP | other *** search
/ 3D Game Programming for Teens (2nd Edition) / 3DGPFT2E.iso / Source / Chapter03 / demo03-13.bb < prev    next >
Text File  |  2009-01-20  |  6KB  |  283 lines

  1. ;demo03-12.bb - A textdrawn arkanoid
  2. Graphics 640,480
  3. SetBuffer BackBuffer()
  4.  
  5. ;TYPES
  6. ;the player type
  7. Type paddle 
  8.     Field x,y   ;coordinates
  9. End Type
  10.  
  11. ;The ball type
  12. Type ball
  13.     Field x,y   ;the coordinate
  14.     Field directionx, directiony  ;the velocities of the ball
  15. End Type
  16.     
  17.  
  18. ;Constants
  19. ;What the blocks look like
  20. Const BLOCKSTRING$ = "XXXXXXX"
  21. ;What the paddle looks like
  22. Const PADDLESTRING$ = "---------"
  23. ;What the ball looks like
  24. Const BALLSTRING$ = "O"
  25. ;How many rows of blocks there are
  26. Const BLOCKROWS = 3
  27. ;How many columns of blocks there are
  28. Const BLOCKCOLUMNS = 6
  29. ;The number of pixels between each column
  30. Const BLOCKXGAP = 85
  31. ;The number of pixels between each row
  32. Const BLOCKYGAP = 32
  33. ;The number of pixels from the top left corner the first column is
  34. Const BLOCKXORIGIN = 16
  35. ;The number of pixels from the top left corner the first row is
  36. Const BLOCKYORIGIN = 8
  37. ;The height of each block
  38. Global BLOCKHEIGHT = FontHeight()
  39. ;The length of each block
  40. Global BLOCKWIDTH = Len(BLOCKSTRING$) *FontWidth()
  41. ;The width of each paddle
  42. Global PADDLEWIDTH = Len(PADDLESTRING$) * FontWidth()
  43. ;The height of each paddle
  44. Global PADDLEHEIGHT = FontHeight()
  45. ;The width of the ball
  46. Global BALLWIDTH = Len(BALLSTRING$) *FontWidth()
  47. ;The height of the ball
  48. Global BALLHEIGHT = FontHeight()
  49. ;The starting X coordinate for the player
  50. Const STARTX = 300
  51. ;The starting Y coordinate for the player
  52. Const STARTY= 340
  53. ;The Key code constants
  54. Const ESCKEY = 1, LEFTKEY = 203, RIGHTKEY = 205 
  55.  
  56.  
  57.  
  58. ;Initialization
  59. ;Seed the random Generator
  60. SeedRnd MilliSecs()
  61. ;Initialize the score
  62. Global score = 0
  63. ;The number of total block hits
  64. Global blockhits = 0 
  65. ;The level the player is on
  66. Global level = 1
  67.  
  68. ;Creat an array of blocks
  69. Dim blocks(BLOCKROWS, BLOCKCOLUMNS)
  70.  
  71. ;Create a new ball
  72. Global ball.ball = New ball
  73. ;Create a new paddle
  74. Global player.paddle = New paddle
  75.  
  76. ;Initialize the new level
  77. NewLevel()
  78.  
  79.  
  80.  
  81.  
  82.  
  83. ;Game Loop
  84. While Not KeyDown(1)
  85. Cls
  86.  
  87. DrawHUD()
  88. TestInput()
  89. DrawBlocks()
  90. DrawPaddle()
  91. CheckBall()
  92.  
  93.  
  94.  
  95.  
  96. Flip
  97.  
  98. Wend
  99.  
  100. Function DrawBlocks()
  101.     
  102.     x = BLOCKXORIGIN
  103.     y = BLOCKYORIGIN
  104. ;This variable creates a new level if there are no blocks
  105.     newlevel = 0 
  106.     
  107. ;For all the rows
  108.     For rows = 0 To BLOCKROWS - 1
  109. ;reset rows position
  110.         x = BLOCKXORIGIN 
  111.         
  112.         For cols = 0 To BLOCKCOLUMNS - 1
  113.  
  114.             ;If the block exists, draw it on screen
  115.             If (blocks(rows,cols) = 1) Then
  116.                 Text x,y, BLOCKSTRING$
  117.                 newlevel = newlevel + 1
  118.             EndIf
  119.         ;Move over to the next block
  120.         x = x + BLOCKXGAP
  121.         
  122.         Next
  123.         ;Move to the next column
  124.         y = y + BLOCKYGAP
  125.     Next
  126.     If newlevel = 0
  127.         level = level + 1
  128.         NewLevel()
  129.     EndIf
  130.         
  131. End Function
  132.  
  133. Function CheckBall()
  134.  
  135. ;Move and draw ball 
  136. UpdateBall() 
  137.  
  138. ;Check and see if ball hit anything
  139. CheckBallWithPaddle()
  140. CheckBallWithBlocks()
  141. CheckBallWithWalls()
  142. End Function
  143.             
  144.             
  145. Function UpdateBall()
  146.  
  147. ;Move the ball to the left or right
  148. ball\x = ball\x + ball\directionx 
  149.  
  150. ;Move the ball up or down
  151. ball\y = ball\y + ball\directiony 
  152.  
  153. ;Draw the ball
  154. Text ball\x, ball\y, BALLSTRING$  
  155. End Function
  156.  
  157.  
  158.  
  159. Function DrawPaddle()
  160. ;Draw the paddle
  161. Text player\x,player\y,PADDLESTRING$
  162. End Function
  163.  
  164. Function CheckBallWithPaddle()
  165. ;If the ball hits a paddle, revers its direction
  166. If ball\x >= player\x And ball\x <= player\x + PADDLEWIDTH And ball\y + BALLHEIGHT>= player\y  And ball\y + BALLHEIGHT <= player\y + PADDLEHEIGHT
  167.     ball\directiony = -ball\directiony + Rand(-3,3)
  168. EndIf
  169. End Function
  170.  
  171. Function CheckBallWithBlocks()
  172. ;y is the first row
  173. y = BLOCKYORIGIN 
  174.  
  175. For rows=0 To BLOCKROWS - 1
  176.  
  177.     ;Reset x to first block of column
  178.     x = BLOCKXORIGIN 
  179.  
  180.     ;For every column of blocks
  181.     For cols = 0 To BLOCKCOLUMNS - 1;
  182.         
  183.         ;If it exists
  184.         If blocks(rows,cols) 
  185.  
  186.             ;If the ball hit the block, delete the block
  187.             If ball\x >= x And ball\x <=  x + BLOCKWIDTH And ball\y >= y And ball\y <= y + BLOCKHEIGHT 
  188.  
  189.                 blocks(rows,cols) = 0  ;Delete block
  190.  
  191.                 ball\directiony = -ball\directiony + Rand(-2,2)  ;Reverse its direction and add randomizer        
  192.  
  193.                 score = score + 75
  194.  
  195.                 blockhits = blockhits + 1
  196.  
  197.                 ;It can't hit more than one block, so leave function
  198.                 Return 
  199.             EndIf
  200.         EndIf
  201.  
  202.         ;move to next column
  203.         x = x + BLOCKXGAP 
  204.     Next
  205.     
  206.     ;move to next row
  207.     y = y + BLOCKYGAP
  208. Next
  209.  
  210. End Function
  211.  
  212.  
  213.  
  214. Function CheckBallWithWalls()
  215. ;If ball hits the left wall, reverse its direction and add randomizer
  216. If ball\x <= 0 
  217.     ball\directionx = -ball\directionx + Rand(-2,2)
  218.  
  219. ;If ball hits top wall, reverse its direction and add randomizer
  220. ElseIf ball\y <= 0 
  221.     ball\directiony = -ball\directiony + Rand(-2,2)
  222.  
  223. ; If it hits right wall, reverse its direction and add randomizer
  224. ElseIf ball\x >= 640 - BALLWIDTH 
  225.     ball\directionx = -ball\directionx + Rand(-2,2) ;
  226.  
  227. ;If ball hits lower wall, dock points for missing ball
  228. ElseIf ball\y >= 480
  229.     score = score - 200
  230.  
  231.     ;Reset the level
  232.     ResetLevel()
  233. EndIf
  234. End Function
  235.  
  236.  
  237. Function TestInput()
  238.  
  239. ;hit Esc
  240. If KeyDown(ESCKEY) 
  241.  
  242.     ;quit the game
  243.     End 
  244.  
  245.  ;hit left arrow
  246. ElseIf KeyDown(LEFTKEY)
  247. ;move paddle left
  248.     player\x = player\x - 10 
  249.  
  250. ;hit right arrow
  251. ElseIf KeyDown(RIGHTKEY) 
  252.  
  253.     ;move paddle right
  254.     player\x = player\x + 10 
  255. EndIf
  256. End Function
  257.  
  258. Function ResetLevel()
  259. ball\x = 320
  260. ball\y = 150
  261. ball\directiony = 4
  262. ball\directionx = Rand(-5,5)
  263. player\x = STARTX
  264. player\y = STARTY
  265. Delay 500
  266.  
  267. End Function
  268.  
  269. Function DrawHUD()
  270. Text 0,440, "Level: " + level ;write the level
  271. Text 0,450, "Score: " + score ;write the score
  272. Text 0,460, "Block Hits: " + blockhits ;write the block hits
  273. End Function
  274.  
  275. Function NewLevel()
  276. For rows=0 To BLOCKROWS
  277.     For cols=0 To BLOCKCOLUMNS
  278.         ;Set block to existing (1)
  279.         blocks(rows,cols) = 1
  280.     Next
  281. Next
  282. ResetLevel()
  283. End Function