EkriirkE

GWBasic/QBasic Canonball

Jul 30th, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 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 === GWBasic/QBasic version tweaked by EkriirkE
  5.  
  6. 200 REM === Clear screen and setup variables
  7. 210 CLS
  8. 220 CL = 80: RW = 24: REM Columns and Rows of screen
  9. 230 CA = 45: 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$ = "w" OR KE$ = "K" THEN CA = CA + 5: IF CA > 85 THEN CA = 85
  17. 340 IF KE$ = "s" OR KE$ = "M" THEN CA = CA - 5: IF CA < 15 THEN CA = 15
  18. 350 IF KE$ = "q" OR KE$ = CHR$(27) 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): LY = (CN + 1) * SIN((360 - CA) * PI / 180)
  25. 420 BX = CX + LX: BY = RW + LY
  26. 430 GOSUB 1510
  27. 440 VX = CV * COS((360 - CA) * PI / 180): VY = CV * SIN((360 - CA) * PI / 180)
  28.  
  29. 500 REM === Move player and animate ball
  30. 510 GOSUB 2510
  31. 511 t = TIMER: WHILE TIMER - t < .2: WEND: REM =E= DELAY FOR BEING TOO FAST!
  32. 520 IF KE$ = "a" OR KE$ = "K" THEN PX = PX - 1: IF PX < CX + CN THEN PX = CX + CN
  33. 530 IF KE$ = "d" OR KE$ = "M" 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: 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 IF (CA = LA) THEN RETURN
  50. 1020 P$ = "ANGLE: " + STR$(CA) + " ": X1% = 2: Y1% = 1: GOSUB 3510
  51. 1030 LX = CN * COS((360 - LA) * PI / 180): LY = CN * SIN((360 - LA) * PI / 180)
  52. 1040 X1 = CX: Y1 = RW: X2 = X1 + LX: Y2 = Y1 + LY: P$ = " ": GOSUB 3010
  53. 1050 LX = CN * COS((360 - CA) * PI / 180): LY = CN * SIN((360 - CA) * PI / 180)
  54. 1060 X2 = X1 + LX: Y2 = Y1 + LY: P$ = "%": GOSUB 3010
  55. 1070 LA = CA: RETURN
  56.  
  57. 1500 REM === Draw ball
  58. 1510 X1% = BX: Y1% = BY: P$ = "o": GOSUB 3510
  59. 1520 IF BX% <> X1% OR BY% <> Y1% THEN X1% = BX%: Y1% = BY%: P$ = " ": GOSUB 3510
  60. 1530 BX% = BX: BY% = BY
  61. 1540 RETURN
  62.  
  63. 2000 REM === Draw player
  64. 2010 P$ = "U": X1% = PX: Y1% = RW: GOSUB 3510
  65. 2020 IF PX% <> X1% THEN X1% = PX%: P$ = " ": GOSUB 3510
  66. 2030 PX% = PX
  67. 2040 RETURN
  68.  
  69. 2500 REM === Read the keyboard
  70. 2510 KE$ = RIGHT$(INKEY$, 1)
  71. 2520 RETURN
  72.  
  73. 3000 REM === Plot a line
  74. 3010 X1% = X1: X2% = X2: Y1% = Y1: Y2% = Y2
  75. 3020 DX% = ABS(X2% - X1%): SX% = -1: IF X1% < X2% THEN SX% = 1
  76. 3030 DY% = ABS(Y2% - Y1%): SY% = -1: IF Y1% < Y2% THEN SY% = 1
  77. 3040 ER% = -DY%: IF DX% > DY% THEN ER% = DX%
  78. 3050 ER% = ER% / 2
  79. 3060 GOSUB 3510
  80. 3070 IF X1% = X2% AND Y1% = Y2% THEN RETURN
  81. 3080 E2% = ER%
  82. 3090 IF E2% > -DX% THEN ER% = ER% - DY%: X1% = X1% + SX%
  83. 3100 IF X1% = X2% AND Y1% = Y2% THEN RETURN
  84. 3110 IF E2% < DY% THEN ER% = ER% + DX%: Y1% = Y1% + SY%
  85. 3120 IF X1% = X2% AND Y1% = Y2% THEN RETURN
  86. 3130 GOTO 3060
  87.  
  88. 3500 REM === Plot a point
  89. 3510 IF X1% < 1 OR X1% > CL OR Y1% < 1 OR Y1% > RW THEN RETURN
  90. 3520 LOCATE Y1%, X1%
  91. 3530 PRINT P$;
  92. 3540 RETURN
  93.  
  94. 4000 REM === Show score/lives/velocity
  95. 4010 P$ = "VELOCITY: " + STR$(CV) + " ": X1% = CL / 3: Y1% = 1: GOSUB 3510
  96. 4020 P$ = "SCORE: " + STR$(SC): X1% = CL * 2 / 3: GOSUB 3510
  97. 4030 P$ = MID$(" UUU", LV + 1, 3): X1% = CL - 2: GOSUB 3510
  98. 4040 RETURN
Add Comment
Please, Sign In to add comment