home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 056.STARTREK.BAS < prev    next >
BASIC Source File  |  1979-12-31  |  8KB  |  181 lines

  1. 1000 REM
  2. 1010 REM              Star Trek Game
  3. 1020 REM            Copyright (c) 1990
  4. 1030 REM by Randy Hawkins and ONE THOUSAND Magazine
  5. 1040 REM            All Rights Reserved
  6. 1050 REM
  7. 1055 COMMON RH: IF RH = 0 THEN SYSTEM
  8. 1060 SCREEN 0: WIDTH 40: KEY OFF: COLOR 2,0: DIM G(15), F(15)
  9. 1070 FOR A = 1 TO 4: READ DX(A), DY(A): NEXT A
  10. 1080 DATA -1, 0, 0, -1, 0, +1, +1, 0
  11. 1090 DEF FNZ(X) = INT(RND * X) + 1
  12. 1100 DEF FNX(Z) = (Z AND 7) * 2 + 3
  13. 1110 DEF FNY(Z) = INT(Z / 8) * 2 + 4
  14. 1120 RANDOMIZE TIMER: ON ERROR GOTO 2720
  15. 1130 REM
  16. 1140 REM Present Introduction and Review Commands
  17. 1150 REM
  18. 1160 CLS: LOCATE 3,6: PRINT "Star Trek: The Computer Game"
  19. 1170 LOCATE 5,1: PRINT "You are the captain of the Enterprise."
  20. 1180 PRINT "Use these commands to remove all of the"
  21. 1190 PRINT "Klingon invaders from Federation space:"
  22. 1200 LOCATE 9,4: PRINT "I = impulse engines (for moving"
  23. 1210 PRINT TAB(8); "within the current sector)"
  24. 1220 LOCATE 12,4: PRINT "W = warp engines (for moving"
  25. 1230 PRINT TAB(8); "to another sector)"
  26. 1240 LOCATE 15,4: PRINT "P = fire phasers (energy beams"
  27. 1250 PRINT TAB(8); "to destroy Klingons)"
  28. 1260 LOCATE 18,4: PRINT "T = fire torpedos (weapon more"
  29. 1270 PRINT TAB(8); "powerful than phasers)"
  30. 1280 LOCATE 21,1: PRINT "Watch your shields -- the Klingons will"
  31. 1290 PRINT "shoot back.  Press any key to begin.";
  32. 1300 DEF SEG = 0: POKE 1050, PEEK(1052): WHILE INKEY$ = "": WEND
  33. 1310 REM
  34. 1320 REM Load Stars, Bases, Klingons in Each Quadrant
  35. 1330 REM
  36. 1340 CLS: FOR A = 0 TO 15: G(A) = 0: NEXT A: NB = 3: FOR A = 1 TO NB
  37. 1350 B = FNZ(16) - 1: IF G(B) <> 0 THEN 1350 ELSE G(B) = -10: F(B) = 1
  38. 1360 NEXT A: FOR A = 0 TO 15: S = FNZ(8): K = FNZ(4) - 1
  39. 1370 G(A) = G(A) - S * 100 - K: TK = TK + K: NEXT A
  40. 1380 REM
  41. 1390 REM Draw Tactical Display
  42. 1400 REM
  43. 1410 CLS: LOCATE 2,1: PRINT STRING$(19,219)
  44. 1420 LOCATE 20,1: PRINT STRING$(19,219)
  45. 1430 FOR A = 3 TO 19: LOCATE A,1: PRINT CHR$(219)
  46. 1440 LOCATE A,19: PRINT CHR$(219): NEXT A
  47. 1450 LOCATE 2,24: PRINT "Map of Galaxy"
  48. 1460 LOCATE 3,21: PRINT CHR$(201); STRING$(17,205); CHR$(187)
  49. 1470 FOR A = 4 TO 10: LOCATE A,21: PRINT CHR$(186)
  50. 1480 LOCATE A,39: PRINT CHR$(186): NEXT A: LOCATE 11,21
  51. 1490 PRINT CHR$(200); STRING$(17,205); CHR$(188)
  52. 1500 GOSUB 2340: SEC = FNZ(16) - 1
  53. 1510 REM
  54. 1520 REM Present Quadrant Information and Accept Command
  55. 1530 REM
  56. 1540 GOSUB 2110: GOSUB 2270
  57. 1550 GOSUB 2350: GOSUB 2470: LOCATE 23,5: PRINT STRING$(30,32)
  58. 1560 LOCATE 23,11,1: PRINT "Command (I,W,P,T)?"; CHR$(32);
  59. 1570 A$ = INKEY$: IF A$ = "" THEN 1570
  60. 1580 CMD = INT((INSTR("IiWwPpTt",A$) + 1) / 2): LOCATE 23,5
  61. 1585 IF A$ = CHR$(27) THEN 2740 ELSE IF CMD = 0 THEN 1570
  62. 1590 IF CMD < 3 THEN PRINT "Move"; ELSE PRINT "Fire";
  63. 1600 PRINT CHR$(32);"Which Direction ("; CHR$(27); CHR$(24);
  64. 1610 PRINT CHR$(25); CHR$(26); CHR$(41); CHR$(63); CHR$(32);
  65. 1620 A$ = INKEY$: IF A$ = "" THEN 1620 ELSE A$ = RIGHT$(A$,1)
  66. 1625 IF A$ = CHR$(27) THEN 2740
  67. 1630 DIR = INSTR("KHPM",A$): IF DIR = 0 THEN 1620
  68. 1640 ON CMD GOTO 1680, 1790, 1910, 1910
  69. 1650 REM
  70. 1660 REM Move Within Quadrant
  71. 1670 REM
  72. 1680 LOCATE 23,10: PRINT "How Many Parsecs (1-8)?"; CHR$(32);
  73. 1690 A$ = INKEY$: IF A$ = CHR$(27) THEN 2740
  74. 1695 IF A$ < "1" OR A$ > "8" THEN 1690 ELSE N = VAL(A$)
  75. 1700 N = VAL(A$) + 1: LOCATE 23,5,0: PRINT STRING$(30,32): GOTO 1750
  76. 1710 IF SCREEN(EY + 2 * DY(DIR),EX + 2 * DX(DIR)) <> 250 THEN 1550
  77. 1720 FOR A = 1 TO 2: LOCATE EY, EX: PRINT CHR$(468 - A * 218)
  78. 1730 EY = EY + DY(DIR): EX = EX + DX(DIR): LOCATE EY, EX
  79. 1740 PRINT "E": SOUND A * 100, 1: NEXT A: PUL = PUL - 2
  80. 1750 GOSUB 2380: N = N - 1: IF N * PUL > 0 THEN 1710 ELSE 1550
  81. 1760 REM
  82. 1770 REM Warp to Another Quadrant
  83. 1780 REM
  84. 1790 IF DIR = 1 AND (SEC AND 3) = 0 THEN 1550
  85. 1800 IF DIR = 2 AND (SEC < 4) THEN 1550
  86. 1810 IF DIR = 3 AND (SEC > 11) THEN 1550
  87. 1820 IF DIR = 4 AND (SEC AND 3) = 3 THEN 1550
  88. 1830 SEC = SEC + DX(DIR) + 4 * DY(DIR): LOCATE 23,4,0
  89. 1840 PRINT "Engaging Warp Drive ... Stand By";: WRP = WRP - 10
  90. 1850 FOR A = 200 TO 1200 STEP 4: SOUND A, .1: SOUND A-150, .1
  91. 1860 NEXT A: FOR A = 15 TO 1 STEP -1: NOISE 4, A, 2: NEXT A
  92. 1870 LOCATE 23,4: PRINT STRING$(35,32): GOSUB 2350: GOTO 1540
  93. 1880 REM
  94. 1890 REM Fire Phasers or Torpedos
  95. 1900 REM
  96. 1910 IF (CMD = 3 AND PHA < 1) OR (CMD = 4 AND TOR < 1) THEN 1550
  97. 1920 LOCATE 23,4,0: PRINT STRING$(30,32)
  98. 1930 IF CMD = 4 THEN TOR = TOR - 1: GOSUB 2420
  99. 1940 PCOPY 0,1: X = EX: Y = EY: A$ = CHR$(58 + CMD * 49)
  100. 1950 IF CMD = 3 AND (DIR = 2 OR DIR = 3) THEN A$ = CHR$(186)
  101. 1960 X = X + DX(DIR): Y = Y + DY(DIR): PHA = PHA + 2 * (CMD = 3)
  102. 1970 SOUND 40 + (PHA + TOR) * 10, 1: B = SCREEN(Y,X)
  103. 1980 IF CMD = 3 AND (B = 42 OR B = 219 OR PHA < 1) THEN 2070
  104. 1990 IF CMD = 4 THEN PCOPY 1,0: IF B = 219 THEN 2070
  105. 2000 LOCATE Y,X: PRINT A$;: IF B = 32 OR B = 250 THEN 1960
  106. 2010 PCOPY 1,0: FOR A = 1 TO 50: PRINT CHR$(29); CHR$(15);
  107. 2020 SOUND 100, .1: PRINT CHR$(29); CHR$(250);: NEXT A
  108. 2030 IF B = 75 THEN TK = TK - 1: G(SEC) = G(SEC) - 1
  109. 2040 IF B = 42 THEN G(SEC) = G(SEC) - 100
  110. 2050 IF B = 66 THEN G(SEC) = G(SEC) - 10
  111. 2060 GOSUB 2270: GOTO 1550
  112. 2070 PCOPY 1,0: GOTO 1550
  113. 2080 REM
  114. 2090 REM Place Stars, Bases, and Klingons in Quadrant
  115. 2100 REM
  116. 2110 FOR A = 4 TO 18 STEP 2: FOR B = 3 TO 17 STEP 2: LOCATE A,B
  117. 2120 PRINT CHR$(250): NEXT B,A: S = VAL(MID$(STR$(G(SEC)),2,1))
  118. 2130 Z = FNZ(64) - 1: IF SCREEN(FNY(Z),FNX(Z)) <> 250 THEN 2130
  119. 2140 LOCATE FNY(Z), FNX(Z): PRINT CHR$(42): S = S - 1: IF S THEN 2130
  120. 2150 IF MID$(STR$(G(SEC)),3,1) <> "1" THEN 2180
  121. 2160 Z = FNZ(64) - 1: IF SCREEN(FNY(Z),FNX(Z)) <> 250 THEN 2160
  122. 2170 LOCATE FNY(Z), FNX(Z): PRINT "B"
  123. 2180 K = VAL(MID$(STR$(G(SEC)),4,1)): IF K = 0 THEN 2210
  124. 2190 Z = FNZ(64) - 1: IF SCREEN(FNY(Z),FNX(Z)) <> 250 THEN 2190
  125. 2200 LOCATE FNY(Z), FNX(Z): PRINT "K": K = K - 1: IF K THEN 2190
  126. 2210 Z = FNZ(64) - 1: IF SCREEN(FNY(Z),FNX(Z)) <> 250 THEN 2210
  127. 2220 EX = FNX(Z): EY = FNY(Z): LOCATE EY, EX: PRINT "E"
  128. 2230 G(SEC) = ABS(G(SEC)): RETURN
  129. 2240 REM
  130. 2250 REM Present Galaxy Map
  131. 2260 REM
  132. 2270 FOR A = 0 TO 15: LOCATE INT(A/4) * 2 + 4, (A AND 3) * 4 + 23
  133. 2280 COLOR 2 + 2 * (A = SEC), -2 * (A = SEC)
  134. 2290 IF G(A) < 0 THEN PRINT "---" ELSE PRINT USING "###"; G(A)
  135. 2300 NEXT A: COLOR 2, 0: RETURN
  136. 2310 REM
  137. 2320 REM Charge Up Utilities, Display Energy Levels
  138. 2330 REM
  139. 2340 PUL = 100: WRP = 100: SHL = 100: PHA = 100: TOR = 5: RETURN
  140. 2350 COLOR 2: LOCATE 20,25: PRINT STRING$(11,32): LOCATE 20,25
  141. 2360 IF SCREEN(EY,EX-2) <> 66 AND SCREEN(EY,EX+2) <> 66 THEN 2380
  142. 2370 PRINT "D O C K E D": IF F(SEC) THEN GOSUB 2340: F(SEC) = 0
  143. 2380 COLOR 2-2*(PUL<21): LOCATE 13,25: PRINT USING "Impluse:###%"; PUL
  144. 2390 COLOR 2-2*(WRP<21): LOCATE 14,28: PRINT USING "Warp:###%"; WRP
  145. 2400 COLOR 2-2*(SHL<21): LOCATE 15,25: PRINT USING "Shields:###%"; SHL
  146. 2410 COLOR 2-2*(PHA<21): LOCATE 16,25: PRINT USING "Phasers:###%"; PHA
  147. 2420 COLOR 2-2*(TOR<2): LOCATE 17,24: PRINT USING "Torpedos:###"; TOR
  148. 2430 COLOR 2: LOCATE 18,24: PRINT USING "Klingons:###"; TK: RETURN
  149. 2440 REM
  150. 2450 REM All Klingons Gone?  If Not, Let Them Shoot
  151. 2460 REM
  152. 2470 IF TK = 0 THEN 2640 ELSE IF SCREEN(20,25) = 68 THEN RETURN
  153. 2480 IF MID$(STR$(G(SEC)),4,1) = "0" THEN RETURN
  154. 2490 LOCATE 23,5,0: PRINT STRING$(30,32)
  155. 2500 LOCATE 23,8: PRINT "Red Alert: Klingon Attack!"
  156. 2510 FOR A = 0 TO 63: X = FNX(A): Y = FNY(A)
  157. 2520 IF SCREEN(Y,X) <> 75 THEN 2580
  158. 2530 SHL = SHL - INT(40 / SQR((EX - X)^2 + (EY - Y)^2))
  159. 2540 DX = (EX - X) / 10: DY = (EY - Y) / 10: PCOPY 0,1
  160. 2550 FOR B = 0 TO 10: LOCATE Y,X: PRINT CHR$(219): SOUND 1000,.1
  161. 2560 X = X + DX: Y = Y + DY: PCOPY 1,0: NEXT B
  162. 2570 IF SHL < 1 THEN 2620 ELSE GOSUB 2350
  163. 2580 NEXT A: RETURN
  164. 2590 REM
  165. 2600 REM Announce Completion of Game
  166. 2610 REM
  167. 2620 LOCATE 22,4: PRINT "Your shields have been destroyed!"
  168. 2630 LOCATE 23,4: PRINT "The Federation has been defeated!": GOTO 2660
  169. 2640 LOCATE 22,4: PRINT "The Klingons have been eliminated!"
  170. 2650 LOCATE 23,5: PRINT CHR$(32); "The Federation has been saved!"
  171. 2660 LOCATE 24,8,1: PRINT "Want to play again (Y/N)?"; CHR$(32);
  172. 2670 A$ = INKEY$: IF A$ = "Y" OR A$ = "y" THEN 1160
  173. 2680 IF A$ = "N" OR A$ = "n" THEN 2740 ELSE 2670
  174. 2690 REM
  175. 2700 REM Error Trapping Routine
  176. 2710 REM
  177. 2720 IF ERL = 1860 THEN RESUME 1870 ELSE RESUME 2730
  178. 2730 CLS: PRINT: PRINT "Error Code #"; ERR; "in Line Number"; ERL
  179. 2740 SCREEN 0: WIDTH 80: CLS: LOCATE 12, 30
  180. 2750 PRINT "One Moment Please...": RUN "menu"
  181.