home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib12.dsk / FORMULA-I.bas < prev    next >
BASIC Source File  |  2023-02-26  |  9KB  |  195 lines

  1. 10  REM  **********************
  2. 20  REM  *     FORMULA-I      *
  3. 30  REM  * O'FALLON & ENGELS  *
  4. 40  REM  * COPYRIGHT (C) 1983 *
  5. 50  REM  * BY MICRO-SPARC INC *
  6. 60  REM  * LINCOLN, MA. 01773 *
  7. 70  REM  **********************
  8. 80  ON  PEEK(104) = 64 GOTO 90: POKE 103,1: POKE 104,64: POKE 16384,0: PRINT  CHR$(4)"RUNFORMULA-I": REM PROGRAM MUST BE SAVED TO DISK WITH THE NAME FORMULA-I
  9. 90 NT = 6: DIM SC(NT),NA$(NT): PRINT  CHR$(4)"BLOAD CAR,A$330"
  10. 92  ONERR  GOTO 2000
  11. 94  GOSUB 1390: POKE 216,0: HOME :B = 0
  12. 100  HTAB 16: VTAB 3: PRINT "FORMULA-I": VTAB 23: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC **"
  13. 110  VTAB 5: HTAB 19: PRINT "BY"
  14. 120  PRINT : HTAB 6: PRINT "JOHN O'FALLON AND ROB ENGELS"
  15. 130  VTAB 20
  16. 140  PRINT "WOULD YOU LIKE BLOCKADES (Y/N) ?"
  17. 150  WAIT  -16384,128:BO =  PEEK( -16384)
  18. 160  POKE  -16368,0: IF  CHR$(BO -128) < >"Y"  AND  CHR$(BO -128) < >"N" GOTO 150
  19. 165  IF  CHR$(BO -128) = "N"  THEN BLOCK$ = "N"
  20. 170  VTAB 20: HTAB 1: CALL  -958: PRINT "PADDLE OR KEYBOARD (P/K) ?"
  21. 180  WAIT  -16384,128:P =  PEEK( -16384): POKE  -16368,0: IF P < >203  AND P < >208  THEN 180
  22. 190 MODE = 1: IF P = 208  THEN MODE = 0
  23. 200  HCOLOR= 3
  24. 210  FOR AS = 770 TO 790: READ N: POKE AS,N: NEXT 
  25. 220  DATA  173,48,192,136,208,5,206,1,3,240,9,202,208,245,174,0,3,76,2,3,96
  26. 230 LT = 700
  27. 240 G = 2:R = 32
  28. 250 H = 3.141592654/32
  29. 260 LAP =  -1:TIME = 300
  30. 270  HOME 
  31. 280 OX = 226:OY = 140:I = OX:J = OY
  32. 300  POKE 232,48: POKE 233,3
  33. 310  GOSUB 780
  34. 320 I = OX:J = OY
  35. 325 X = 277:Y = 157
  36. 327 Z1 = 1
  37. 330  SCALE= 2
  38. 340  HOME : VTAB 21: HTAB 17: PRINT "READY-": FOR W = 1 TO 1000: NEXT : VTAB 21: HTAB 17: PRINT "  GO   ";""
  39. 350  VTAB 21: HTAB 32: PRINT "GEAR: ";G -1
  40. 360  XDRAW 1 AT OX,OY: GOTO 630
  41. 370  IF OX >LX -20  AND OX <LX +20  AND OY > = LY  AND OY <LY +42  THEN Z = 1: IF LT >V  THEN LAP = LAP +1: VTAB 21: PRINT "LAP: ";LAP:LT = 0
  42. 380  IF OX <LX -20  THEN CO = 0
  43. 390 U =  INT( RND(1) *2): IF U = 2  THEN U =  -1
  44. 395  IF Z < >0  THEN 410
  45. 400  ROT= 0:G = 2:CR = CR +1
  46. 405  POKE  -16302,0: FOR W1 = 1 TO 3: FOR W2 = 1 TO 4: NEXT : POKE 768,255: POKE 769,15: CALL 770: POKE  -16299,0: FOR W3 = 1 TO 4: NEXT : POKE  -16300,0: NEXT 
  47. 407 TI = TI -4:T = 3: POKE  -16301,0: VTAB 21: HTAB 32: PRINT "GEAR: ";G -1
  48. 410  ROT= R +16
  49. 420 Z = 0
  50. 430  GOTO 440
  51. 440 Z8 =  PEEK( -16384): POKE  -16368,0
  52. 450  IF MODE = 1  THEN P = Z8: GOTO 510
  53. 460 P =  PDL(0):B =  PEEK( -16287)
  54. 470  IF B >127  THEN Z8 = 193: IF G = 6  THEN G = 1
  55. 480  IF P >20  AND P <235  THEN 530
  56. 490  IF P < = 20  THEN P = 136: GOTO 510
  57. 500 P = 149
  58. 510  IF P = 136  THEN R = R -4: IF R <0  THEN R = 60
  59. 520  IF P = 149  THEN R = R +4: IF R >64  THEN R = 4
  60. 530  IF Z8 = 193  AND G <6  THEN  HTAB 32: VTAB 21:G = G +1: PRINT "GEAR: ";G -1
  61. 540  IF Z8 = 218  AND G >2  THEN  HTAB 32: VTAB 21:G = G -1: PRINT "GEAR: ";G -1
  62. 550 XS = (G *2) *( COS(R *H)):YS = (G *2) *( SIN(R *H))
  63. 560 LT = LT +G
  64. 570 I = OX:J = OY:OX = I +XS: IF OX > = X  THEN OX = X
  65. 580  IF OX <Z1  THEN OX = Z1
  66. 590 OY = J +YS: IF OY >Y  THEN OY = Y
  67. 600  IF OY <Z1  THEN OY = 0
  68. 610  IF TI <0  THEN TI = 0:T = 3
  69. 620 T = T +1: IF T = 4  THEN TIME = TIME -1:T = 0: VTAB 21: HTAB 16: PRINT "TIME: ";TI;"    ": IF TIME =  <0  THEN  HTAB 22: VTAB 21: PRINT "0    ": GOTO 680
  70. 630  XDRAW 1 AT I,J
  71. 640  ROT= R +16
  72. 650  XDRAW 1 AT OX,OY
  73. 660  IF  PEEK(234) < >55  AND  PEEK(234) < >88  AND  PEEK(234) < >100  AND  PEEK(234) < >66  THEN 370
  74. 670  GOTO 440
  75. 680 B1 = B1 +1: IF B1 = 2  THEN  HOME : FOR EG = 1 TO 5: VTAB 21: HTAB 15: PRINT "GAME OVER": FOR I = 1 TO 400: NEXT : VTAB 21: HTAB 15: PRINT "          ": FOR I = 1 TO 240: NEXT : NEXT : GOTO 890
  76. 690  IF LAP <5  THEN 680
  77. 700  IF LAP =  >5  THEN  INVERSE : VTAB 23: HTAB 15: PRINT "BONUS: ";
  78. 710 BO =  INT(V *LAP/300) *10
  79. 720  IF BLOCK$ > <"N"  THEN BO = BO +30
  80. 730  POKE 768,10: POKE 769,5
  81. 740  FOR NB = 0 TO BO  STEP 10: VTAB 23: HTAB 22: CALL 770: PRINT NB: NEXT 
  82. 750 TIME = BO:BT = BO
  83. 760  NORMAL 
  84. 770  GOTO 630
  85. 780  VTAB 21: HTAB 6: PRINT "PRESS <ESC> TO CHOOSE A TRACK": VTAB 22: HTAB 8: PRINT "ANY OTHER KEY TO CONTINUE"
  86. 785 WC = 1
  87. 790  IF BLOCK$ > <"N"  THEN HC = HC +2
  88. 810  GOSUB 1460
  89. 830 NC = HC +CD: VTAB 23: HTAB 5: PRINT "TRACK # ";WC;" DIFFICULTY (1-10) = ";NC;"   "
  90. 840 NC = 0
  91. 850  POKE  -16368,0
  92. 860 CK =  PEEK( -16384): IF CK <128  THEN 860
  93. 870  IF CK < >155  THEN  POKE  -16368,0: RETURN 
  94. 873 WC = WC +1: IF WC >NT  THEN WC = 1: RESTORE : FOR I = 1 TO 21: READ A: NEXT I
  95. 875  GOTO 810
  96. 880  HPLOT BX,BY TO BX,BY -14 TO BX +2,BY -14 TO BX +2,BY TO BX,BY: RETURN 
  97. 890  TEXT : HOME 
  98. 900  INVERSE : HTAB 12: PRINT "DRIVER ANALYSIS": NORMAL 
  99. 910  PRINT : PRINT "--->TRACK # ";WC
  100. 920  PRINT : PRINT "---># OF LAPS: ";LAP
  101. 930  PRINT : PRINT "--->AVERAGE LAP TIME: ";: IF LAP = 0  THEN  PRINT "300 SEC.": GOTO 950
  102. 940  PRINT  INT((300 +BT)/LAP)" SEC."
  103. 950  PRINT : PRINT "---># OF CRASHES: ";CR
  104. 960  IF BLOCK$ > <"N"  THEN CD = CD +2
  105. 970  PRINT : PRINT "--->COURSE DIFFICULTY RATING: ";CD
  106. 980 DR = LAP +CD
  107. 990  IF DR <8  THEN DR$ = "CALL AN AMBULANCE !": GOTO 1040
  108. 1000  IF DR <11  THEN DR$ = "KEEP TRYING": GOTO 1040
  109. 1010  IF DR <15  THEN DR$ = "AVERAGE DRIVER": GOTO 1040
  110. 1020  IF DR <19  THEN DR$ = "INDY CONTENDER": GOTO 1040
  111. 1030 DR$ = "A.J.FOYT, LOOK OUT !"
  112. 1040  VTAB 13: PRINT "--->DRIVER ABILITY: ";DR$
  113. 1050 SC = V *LAP
  114. 1060  IF BLOCK$ < >"N"  THEN SC = SC +(50 *LAP)
  115. 1070  PRINT : PRINT "--->FINAL SCORE: ";SC
  116. 1080  IF SC >SC(WC)  THEN  GOSUB 1150
  117. 1090  FOR WW = 1 TO 5000: NEXT : GOTO 1320
  118. 1100  PRINT : HTAB 7: PRINT "TO PLAY AGAIN HIT ANY KEY"
  119. 1110  POKE  -16368,0
  120. 1120 Q1 =  PEEK( -16384): IF Q1 <128  THEN 1120
  121. 1130  CLEAR :Q1 = 1
  122. 1140  POKE  -16368,0: GOTO 70
  123. 1150  VTAB 17: HTAB 1: CALL  -958
  124. 1160  FOR I = 1 TO 10: VTAB 17: HTAB 13
  125. 1170  PRINT "NEW HIGH SCORE";: POKE 768,155: CALL 770: HTAB 13: PRINT "              ": FOR WW = 1 TO 100: NEXT 
  126. 1180  NEXT 
  127. 1190  POKE  -16368,0
  128. 1200 : VTAB 19: HTAB 10: PRINT "ENTER YOUR INITIALS"
  129. 1210  VTAB 21: HTAB 18: PRINT  CHR$(95); CHR$(95); CHR$(95)
  130. 1220  FOR I = 0 TO 2
  131. 1230  VTAB 21: HTAB 18 +I: GET A$: PRINT A$:NA$ = NA$ +A$
  132. 1240  NEXT 
  133. 1250 SC(WC) = SC:NA$(WC) = NA$
  134. 1260  PRINT  CHR$(4)"OPEN FI.HIGH"
  135. 1270  PRINT  CHR$(4)"WRITE FI.HIGH"
  136. 1280  FOR I = 1 TO NT
  137. 1290  PRINT SC(I): PRINT NA$(I)
  138. 1300  NEXT 
  139. 1310  PRINT  CHR$(4)"CLOSE FI.HIGH"
  140. 1320  HOME : HTAB 10: PRINT "ALL TIME HIGH SCORES"
  141. 1330  VTAB 5: PRINT "TRACK #";: HTAB 17: PRINT "SCORE";: HTAB 27: PRINT "RECORD HOLDER": PRINT 
  142. 1340  FOR I = 1 TO NT
  143. 1350  PRINT "TRACK # ";I;: HTAB 17: PRINT SC(I);: HTAB 32: PRINT NA$(I)
  144. 1360  PRINT 
  145. 1370  NEXT 
  146. 1380  PRINT : GOTO 1100
  147. 1390  PRINT  CHR$(4)"OPEN FI.HIGH"
  148. 1400  PRINT  CHR$(4)"READ FI.HIGH"
  149. 1410  FOR I = 1 TO NT
  150. 1420  INPUT SC(I): INPUT NA$(I)
  151. 1430  NEXT 
  152. 1440  PRINT  CHR$(4)"CLOSE FI.HIGH"
  153. 1450  RETURN 
  154. 1460  HGR : HCOLOR= 3
  155. 1470  READ X
  156. 1480  READ Y
  157. 1490  HPLOT X,Y
  158. 1500  READ X
  159. 1510  IF X =  -2  THEN  GOTO 1470
  160. 1520  IF X < > -3  THEN  GOTO 1570
  161. 1530  READ X
  162. 1540  READ Y:OY = Y
  163. 1550  HPLOT X,Y TO X,Y +3:Y = Y +6: IF Y >OY +40  THEN  READ OX,OY,CD,LX,LY,V,NO: FOR I = 1 TO NO: READ BX(I),BY(I): NEXT : GOTO 1591
  164. 1560  GOTO 1550
  165. 1570  READ Y
  166. 1580  HPLOT  TO X,Y
  167. 1590  GOTO 1500
  168. 1591  IF BLOCK$ = "N"  THEN  RETURN 
  169. 1592  FOR I = 1 TO NO: HPLOT BX(I),BY(I) TO BX(I),BY(I) -14 TO BX(I) +2,BY(I) -14 TO BX(I) +2,BY(I) TO BX(I),BY(I): NEXT : RETURN 
  170. 1600  DATA  0,0,278,0,278,158,0,158,0,0,-2,84,0,84,84,180,84,-2,42,42,42,122,222,122,222,42,126,42,-3,222,124
  171. 1605  DATA  222,140,4,222,126,395
  172. 1607  DATA  4,180,158,100,158,60,138,140,138
  173. 1610  DATA  0,0,278,0,278,158,0,158,0,0,-2,42,42,42,118,134,118,-2,88,0,88,84,-2,182,158,182,90,-2,134,118,134,42,230,42,230,118,-3,230,0
  174. 1615  DATA  222,14,7,222,0,300
  175. 1617  DATA  3,50,132,132,132,90,158
  176. 1620  DATA  0,48,48,0,230,0,278,48,278,110,230,158,48,158,0,110,0,48,-2,48,66,66,42,212,42,230,66,230,92,212,116,66,116,48,92,48,66,-3,212,0
  177. 1625  DATA  214,20,2,212,0,150
  178. 1627  DATA  4,80,130,120,158,160,130,200,158
  179. 1630  DATA  0,0,278,0,278,159,0,159,0,0,-2,42,126,42,42,222,42,-2,84,159,84,84,90,84,90,159,-2,278,84,180,84,-2,222,126,132,126,132,42,-3,222,3
  180. 1635  DATA  226,20,6,222,0,400
  181. 1637  DATA  5,180,14,100,14,140,42,180,98,222,124
  182. 1640  DATA  0,0,278,0,278,159,0,159,0,0,-2,0,84,90,84,-2,42,126,228,126,228,42,-2,180,0,180,84,-2,42,42,132,42,132,126,-3,228,126
  183. 1645  DATA  226,140,5,227,126,360
  184. 1647  DATA  4,42,42,82,14,88,98,42,126
  185. 1650  DATA  0,0,278,0,278,159,0,159,0,0,-2,42,42,226,42,226,126,142,126,-2,142,81,178,81,178,87,142,87,142,81,-2,96,159,96,42,-2,42,84,54,84,54,126,42,126,42,84,-3,226,3
  186. 1655  DATA  226,20,8,227,0,550
  187. 1657  DATA  4,70,40,150,40,110,14,190,14
  188. 2000  CALL  -10621: POKE 216,0
  189. 2010  PRINT  CHR$(4)"CLOSE"
  190. 2020  IF  PEEK(222) < >5  THEN 94
  191. 2030  PRINT  CHR$(4)"OPEN FI.HIGH"
  192. 2040  PRINT  CHR$(4)"WRITE FI.HIGH"
  193. 2050  FOR I = 1 TO NT
  194. 2060  PRINT I: PRINT "NIBBLE"
  195. 2070  NEXT : PRINT  CHR$(4)"CLOSE": GOTO 94