Guest User

C64 Cannonball

a guest
Jul 29th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. 100 REM === BASIC MONTH 3: CANNONBALL
  2. 110 REM === HTTP://REDDIT.COM/R/RETROBATTLESTATIONS
  3. 120 REM === WRITTEN BY FOZZTEXX
  4. 130 REM === PORTABLE C64 VERSION BY NEVETS01
  5.  
  6. 200 REM === CLEAR SCREEN AND SETUP VARIABLES
  7. 210 PRINT CHR$(147);
  8. 220 CL = 40:RW = 24:REM COLUMNS AND ROWS OF SCREEN
  9. 230 CA = 50:CN = 5:REM ANGLE AND LENGTH OF CANNON
  10. 240 CX = 5:PX = CL-5:SC = 0:LV = 3
  11. 250 PI = 3.14159
  12.  
  13. 300 REM === PLAY GAME
  14. 310 CV = INT(RND(1) * 15) + 10:GOSUB 4010:GOSUB 2010
  15. 320 GOSUB 2510
  16. 330 IF KE$ = "{up}" THEN CA = CA + 5:IF CA > 85 THEN CA = 85
  17. 340 IF KE$ = "{down}" THEN CA = CA - 5:IF CA < 15 THEN CA = 15
  18. 350 IF KE$ = "Q" OR KE$ = "Q" THEN END
  19. 360 IF KE$ = " " THEN 410
  20. 370 GOSUB 1010
  21. 380 GOTO 320
  22.  
  23. 400 REM === FIRE!
  24. 410 LX = (CN + 1) * COS((360 - CA) * PI / 180)
  25. 415 LY = (CN + 1) * SIN((360 - CA) * PI / 180)
  26. 420 BX = CX + LX:BY = RW + LY
  27. 430 GOSUB 1510
  28. 440 VX = CV * COS((360 - CA) * PI / 180):VY = CV * SIN((360 - CA) * PI / 180)
  29.  
  30. 500 REM === MOVE PLAYER AND ANIMATE BALL
  31. 510 GOSUB 2510
  32. 520 IF KE$ = "{LEFT}" THEN PX = PX - 1:IF PX < CX+CN THEN PX = CX+CN
  33. 530 IF KE$ = "{RIGHT}" THEN PX = PX + 1:IF PX > CL - 1 THEN PX = CL -1
  34. 540 GOSUB 2010
  35. 550 BX = BX + (VX / 10):BY = BY + (VY / 10):GOSUB 1510
  36. 560 VY = VY + 2
  37. 570 IF BY < RW THEN 510
  38. 580 P$=" ":X1%=BX%:Y1%=BY%:GOSUB 3510
  39.  
  40. 600 REM === SCORE OR DIE
  41. 610 LX = BX - BX%:LY = BY - BY%:L2 = RW - BY%
  42. 620 IX = BX% + LX * (L2 / LY)
  43. 630 IF IX >= PX - 1 AND IX <= PX + 1 THEN SC = SC + 10:GOTO 310
  44. 640 LV = LV - 1: PRINT "{CLEAR}":GOSUB 4010
  45. 650 IF LV < 1 THEN P$="GAME OVER":X1% = (CL - LEN(P$)) / 2:Y1% = RW / 2:GOSUB 3510:END
  46. 660 GOTO 310
  47.  
  48. 1000 REM === DRAW CANNON
  49. 1010 PRINT "{HOME}":FOR CQ = 1 TO 16: PRINT"": NEXT
  50. 1015 IF CA < 21 AND CA > 9 THEN GOSUB 3010 :REM 10-20
  51. 1025 IF CA < 36 AND CA > 24 THEN GOSUB 3020 :REM 25-35
  52. 1035 IF CA < 51 AND CA > 39 THEN GOSUB 3030 :REM 40-50
  53. 1045 IF CA < 66 AND CA > 54 THEN GOSUB 3040 :REM 55-65
  54. 1055 IF CA < 81 AND CA > 69 THEN GOSUB 3050 :REM 70-80
  55. 1065 IF CA = 85 THEN GOSUB 3060 :REM 85
  56. 1070 GOSUB 4000
  57. 1075 RETURN
  58.  
  59. 1500 REM === DRAW BALL
  60. 1510 X1% = BX:Y1% = BY:P$="O":GOSUB 3510
  61. 1520 IF BX% <> X1% OR BY% <> Y1% THEN X1%=BX%:Y1%=BY%:P$=" ":GOSUB 3510
  62. 1530 BX% = BX:BY% = BY
  63. 1540 RETURN
  64.  
  65. 2000 REM === DRAW PLAYER
  66. 2010 P$="U":X1% = PX:Y1% = RW:GOSUB 3510
  67. 2020 IF PX% <> X1% THEN X1%=PX%:P$=" ":GOSUB 3510
  68. 2030 PX% = PX
  69. 2040 RETURN
  70.  
  71. 2500 REM === READ THE KEYBOARD
  72. 2510 KE$ = "" : GET KE$
  73. 2520 RETURN
  74.  
  75. 3000 REM === PLOT A LINE
  76. 3010 PRINT TAB(CX)" ":PRINT TAB(CX)" ":PRINT TAB(CX)" ##":PRINT TAB(CX)"## " : RETURN
  77. 3020 PRINT TAB(CX)" ":PRINT TAB(CX)" #":PRINT TAB(CX)" ## ":PRINT TAB(CX)"# " : RETURN
  78. 3030 PRINT TAB(CX)" #":PRINT TAB(CX)" # ":PRINT TAB(CX)" # ":PRINT TAB(CX)"# " : RETURN
  79. 3040 PRINT TAB(CX)" # ":PRINT TAB(CX)" # ":PRINT TAB(CX)" # ":PRINT TAB(CX)"# " : RETURN
  80. 3050 PRINT TAB(CX)" # ":PRINT TAB(CX)" # ":PRINT TAB(CX)"# ":PRINT TAB(CX)"# " : RETURN
  81. 3060 PRINT TAB(CX)" # ":PRINT TAB(CX)"# ":PRINT TAB(CX)"# ":PRINT TAB(CX)"# " : RETURN
  82.  
  83. 3500 REM === PLOT A POINT
  84. 3510 IF X1% < 1 OR X1% > CL OR Y1% < 1 OR Y1% > RW THEN RETURN
  85. 3520 PRINT"{HOME}":Y7%=Y1% - 2:FOR Y1 = 1 TO Y7%: PRINT"": NEXT
  86. 3521 REM PRINT X1%,Y1%
  87. 3530 PRINT TAB(X1%)P$ :rem + str$(x1%)+str$(y1%);
  88. 3540 RETURN
  89.  
  90. 4000 REM === SHOW SCORE/LIVES/VELOCITY
  91. 4010 rem P$="VELOCITY:"+STR$(CV)+" ":X1% = CL / 3:Y1%=1:GOSUB 3510
  92. 4020 rem P$="SCORE:"+STR$(SC):X1% = CL * 2 / 3:GOSUB 3510
  93. 4030 rem P$=MID$(" UUU",LV+1,3):X1%=CL - 2:GOSUB 3510
  94. 4031 print "{home}V="+str$(cv)+" A="+str$(ca)+" S="+str$(sc)+" L="+str$(lv)
  95. 4040 RETURN
Add Comment
Please, Sign In to add comment