home *** CD-ROM | disk | FTP | other *** search
/ The Best of Select: Games 9 / CD_1.iso / dosgames / breakout / breakout.bas next >
BASIC Source File  |  1995-07-10  |  7KB  |  332 lines

  1. DECLARE SUB Pause ()
  2. DECLARE SUB DrawBrickBox (XStart!, YStart!, SizeX!, SizeY!, CStart!, BrickBuild!)
  3. '$INCLUDE: 'BAS-ETC.BI'
  4. VBegin:
  5. CONST BrickX = 15
  6. CONST BrickY = 3
  7.  
  8. CONST PaddleX = 30
  9. CONST PaddleY = 1
  10. CONST PaddleYH = 170
  11.  
  12. CONST BallX = 2
  13. CONST BallY = 2
  14.  
  15. CONST MinX = 0
  16. CONST MinY = 0
  17. CONST MaxX = 320
  18. CONST MaxY = 200
  19.  
  20. CONST PI = 3.141592
  21. CONST deg2rad = PI / 180
  22.  
  23. REDIM SHARED TempGet(9000)
  24. REDIM SHARED Paddle(100)
  25. REDIM SHARED Ball(100)
  26. REDIM SHARED Bricks(15, 30)
  27. REDIM SHARED HSN(100) AS STRING
  28. REDIM SHARED HS(100)
  29. DIM SHARED TotalBricks
  30.  
  31. BSYStart = -14
  32. NextLev = -1
  33. Score = 0
  34. KEY 15, CHR$(&H0) + CHR$(&H1)
  35. KEY(15) ON
  36. ON KEY(15) GOSUB EndGame
  37. NumOff
  38. GOTO Start
  39.  
  40. '*********************************
  41. '*     Begin Procedures          *
  42. '*********************************
  43.  
  44. DrawPaddle:    '** (DPX,DPY,DPC) **
  45. LINE (OldMX, DPY)-(OldMX + PaddleX, DPY + PaddleY), 0, BF
  46. PUT (DPX, DPY), Paddle, PSET
  47. RETURN
  48.  
  49. InitScreen:
  50. CLS
  51. SCREEN 13
  52. RETURN
  53.  
  54. GetPaddle:
  55. LINE (1, 1)-(1 + PaddleX, 1 + PaddleY), 0, BF
  56. LINE (1, 1)-(1 + PaddleX, 1 + PaddleY), 15, BF
  57. GET (1, 1)-(1 + PaddleX, 1 + PaddleY), Paddle
  58. RETURN
  59.  
  60. GetBall:
  61. LINE (1, 1)-(1 + BallX, 1 + BallY), 0, BF
  62. LINE (1, 1)-(1 + BallX, 1 + BallY), 15, BF
  63. GET (1, 1)-(1 + BallX, 1 + BallY), Ball
  64. RETURN
  65.  
  66.  
  67. MoveBall:
  68. IF SBallX < 7 THEN
  69.      BallAngle = BallAngle - 90
  70.      CAng = 1
  71. END IF
  72. IF SBallX > 310 THEN
  73.      BallAngle = BallAngle + 90
  74.      CAng = 1
  75. END IF
  76. IF SBallY < 7 THEN
  77.      BallAngle = BallAngle - 90
  78.      CAng = 1
  79. END IF
  80. IF CAng = 1 THEN
  81.      COSA = COS(BallAngle * deg2rad)
  82.      SINA = SIN(BallAngle * deg2rad)
  83.      SOUND 600, .1
  84.      CAng = 0
  85. END IF
  86. IF SBallY > 175 THEN GOTO Miss
  87. IF SBallY > PaddleYH AND SBallX > DPX AND SBallX < DPX + PaddleX THEN
  88.      IF SBallX < PaddleX1 + (PaddleX2 - PaddleX1) THEN
  89.           TDist1 = SBallX - DPX
  90.           TDist2 = 15 - TDist1
  91.           BallAngle = 270 - TDist2 * PaddleSen
  92.      ELSE
  93.           TDist1 = PaddleX2 - SBallX
  94.           TDist2 = -1 * (15 - TDist1)
  95.           BallAngle = 270 + TDist2 * PaddleSen
  96.      END IF
  97.      COSA = COS(BallAngle * deg2rad)
  98.      SINA = SIN(BallAngle * deg2rad)
  99.      SOUND 1000, .1
  100.      SBallY = PaddleYH - 1
  101. END IF
  102.  
  103. IF SBallY <= (((BSYSize + 1) * 7) + BSYStart) AND SBallX <= 300 AND SBallX >= 19 THEN
  104.      BX = INT(SBallX / 19)
  105.      BY = INT((SBallY - (NextLev * 7)) / 7)
  106.      IF Bricks(BX, BY) = 1 THEN
  107.           BLeft = BLeft + 1
  108.           IF BLeft = TotalBricks THEN GOTO Start2
  109.           Bricks(BX, BY) = 0
  110.           LINE (BX * 19, ((BY * 7) + (NextLev * 7)))-((BX * 19) + BrickX, (((BY * 7) + (NextLev * 7)) + BrickY)), 0, BF
  111.           GOSUB DrawBall
  112.           BallAngle = BallAngle - 90
  113.           COSA = COS(BallAngle * deg2rad): SINA = SIN(BallAngle * deg2rad)
  114.           SOUND 1000, .1
  115.           Score = Score + (((6 - BY) + 1) * (16 + NextLev))
  116.           GOSUB DrawScoreTxt
  117.      END IF
  118. END IF
  119. SBallX = SBallX + (COSA / (5 - BallSpeed))
  120. SBallY = SBallY + (SINA / (5 - BallSpeed))
  121. RETURN
  122.  
  123. DrawBall:
  124. PUT (SBallX, SBallY), Ball, XOR
  125. FOR P = 1 TO 70: NEXT
  126. PUT (SBallX, SBallY), Ball, XOR
  127. RETURN
  128.  
  129. DrawScoreTxt:
  130. COLOR 9
  131. LOCATE 23, 2: PRINT "Score:"; Score
  132. RETURN
  133.  
  134. DrawBallsTxt:
  135. COLOR 9
  136. LOCATE 23, 15: PRINT "Balls:"; Balls
  137. RETURN
  138.  
  139. Miss:
  140. Balls = Balls - 1
  141. IF Balls = -1 THEN GOTO EndGame
  142. GOSUB DrawScoreTxt
  143. GOSUB DrawBallsTxt
  144. Pause
  145. SBallX = 160
  146. SBallY = (BSYSize * 7) + 15
  147. BallAngle = INT(RND * 180)
  148. COSA = COS(BallAngle * deg2rad)
  149. SINA = SIN(BallAngle * deg2rad)
  150. RETURN
  151.  
  152. MLeft:
  153. DPX = DPX - PadAdd
  154. RETURN
  155.  
  156. MRight:
  157. DPX = DPX + PadAdd
  158. RETURN
  159.  
  160.  
  161. '*******************************
  162. '*         Begin Main          *
  163. '*******************************
  164. Start:
  165. RANDOMIZE TIMER
  166. CLOSE
  167. 'OPEN "HScore.dat" FOR INPUT AS #1
  168. GOSUB InitScreen
  169. GOSUB IntroScreen
  170. GOSUB GetOptions
  171. CLS
  172. GOSUB GetPaddle
  173. GOSUB GetBall
  174. Start2:
  175. CLS
  176. NextLev = NextLev + 1
  177. COLOR 9
  178. LOCATE 23, 25: PRINT "Level:"; NextLev + 1
  179. COLOR 15
  180. Balls = 4
  181. BSXSize = 15
  182. BSYSize = 4
  183. BSXStart = 19
  184. BSYStart = BSYStart + 21
  185. BSColor = INT(RND * 82) + 18
  186. DPX = 160 - (PaddleX / 2)
  187. DPY = PaddleYH
  188. SBallX = 160
  189. SBallY = (BSYStart + (BSYSize * 7)) + 15
  190. CALL DrawBrickBox(BSXStart, BSYStart, BSXSize, BSYSize, BSColor, 1)
  191. GOSUB DrawScoreTxt
  192. GOSUB DrawBallsTxt
  193. LINE (7, 2)-(310, 190), 25, B
  194. LINE (6, 1)-(311, 191), 27, B
  195. LINE (6, 174)-(310, 174), 25
  196. LINE (6, 175)-(310, 175), 27
  197. BallAngle = INT(RND * 180)
  198. COSA = COS(BallAngle * deg2rad)
  199. SINA = SIN(BallAngle * deg2rad)
  200. CALL MouseWalls(1, 200, 8, 558, 1)
  201. CALL MouseMove(2 * (160 - (PaddleX / 2)), 100, 1)
  202. DO
  203.      OldMX = DPX
  204.      CALL MouseLoc(DPX, MY, 1)
  205.      DPX = DPX / 2
  206.      GOSUB MoveBall
  207.      IF OldMX <> DPX THEN
  208.           PaddleX1 = DPX
  209.           PaddleX2 = DPX + PaddleX
  210.           GOSUB DrawPaddle
  211.      END IF
  212.      GOSUB DrawBall
  213. LOOP
  214.  
  215.  
  216. EndGame:
  217. 'GOSUB DispHScore
  218. CLS
  219. LOCATE 1, 1: INPUT "Play Again"; PA$
  220. PA$ = UCASE$(PA$)
  221. IF PA$ = "Y" THEN GOTO VBegin ELSE END
  222.  
  223.  
  224. DispHScore:
  225. CLS
  226. Att = 31
  227. y = -3
  228. DO UNTIL Att = 60
  229.      Att = Att + 1
  230.      y = y + 8
  231.      LINE (1, y)-(320, y + 8), Att, BF
  232. LOOP
  233. INPUT #1, NOHS
  234. Num = 0
  235. y = 3
  236. x = 5
  237. DO UNTIL Num = NOHS
  238.      Num = Num + 1
  239.      y = y + 2
  240.      INPUT #1, HSN$(Num)
  241.      INPUT #1, HS(Num)
  242.      LOCATE y, x: PRINT HSN$(Num)
  243.      nlength = LEN(HSN$(Num))
  244.      LOCATE y, 20: PRINT HS(Num)
  245. LOOP
  246. Pause
  247. RETURN
  248.  
  249.  
  250. IntroScreen:
  251. SCREEN 13
  252. CLS
  253. SXTemp = 0
  254. SYTemp = 0
  255. XTemp = 0
  256. TotalBricks = 0
  257. SXTemp = -19
  258. SYTemp = -7
  259. SXAdd = BrickX + 4
  260. SYAdd = BrickY + 4
  261. DO UNTIL XTemp = 17
  262.      SXTemp = SXTemp + SXAdd
  263.      XTemp = XTemp + 1
  264.      YTemp = 0
  265.      SYTemp = 0
  266.      DO UNTIL YTemp = 28
  267.           YTemp = YTemp + 1
  268.           SYTemp = SYTemp + SYAdd
  269.           LINE (SXTemp, SYTemp)-(SXTemp + BrickX, SYTemp + BrickY), 31 + YTemp, BF
  270.      LOOP
  271. LOOP
  272. COLOR 15
  273. LOCATE 10, 12: PRINT "B R E A K O U T"
  274. LOCATE 12, 18: PRINT "By"
  275. LOCATE 13, 12: PRINT "Adam  Landefeld"
  276. CALL Pause
  277. RETURN
  278.  
  279.  
  280.  
  281. GetOptions:
  282. CLS
  283. SCREEN 13
  284. CALL DrawBrickBox(10, 10, 15, 15, 15, 0)
  285. GET (10, 10)-(10 + (15 * 19), 10 + (15 * 7)), TempGet
  286.  
  287. RedoSpeed:
  288. PUT (10, 10), TempGet, PSET
  289. LOCATE 8, 7: INPUT "Speed (0-5)"; BallSpeed
  290. BallSpeed = BallSpeed + 2
  291. IF BallSpeed < 3 OR BallSpeed > 7 THEN GOTO RedoSpeed
  292.  
  293. RedoPad:
  294. PUT (10, 10), TempGet, PSET
  295. LOCATE 8, 7: INPUT "Paddle Sens. (0-5)"; PaddleSen
  296. PaddleSen = PaddleSen + 2
  297. IF PaddleSen < 2 OR PaddleSen > 7 THEN GOTO RedoPad
  298. CLS
  299. RETURN
  300.  
  301. REM $DYNAMIC
  302. SUB DrawBrickBox (XStart, YStart, SizeX, SizeY, CStart, BrickBuild)
  303. TotalBricks = 0
  304. SXTemp = 0
  305. SYTemp = 0
  306. XTemp = 0
  307. SXTemp = XStart - 19
  308. SYTemp = YStart - 7
  309. SXAdd = BrickX + 4
  310. SYAdd = BrickY + 4
  311. DO UNTIL XTemp = SizeX
  312.      SXTemp = SXTemp + SXAdd
  313.      XTemp = XTemp + 1
  314.      YTemp = 0
  315.      SYTemp = YStart - 7
  316.      DO UNTIL YTemp = SizeY
  317.           YTemp = YTemp + 1
  318.           SYTemp = SYTemp + SYAdd
  319.           LINE (SXTemp, SYTemp)-(SXTemp + BrickX, SYTemp + BrickY), CStart + YTemp, BF
  320.           IF BrickBuild = 1 THEN Bricks(XTemp, YTemp) = 1: TotalBricks = TotalBricks + 1
  321.      LOOP
  322. LOOP
  323.  
  324. END SUB
  325.  
  326. REM $STATIC
  327. SUB Pause
  328. DO UNTIL INKEY$ <> ""
  329. LOOP
  330. END SUB
  331.  
  332.