2 DIM D(7),K(2,2),S(7,7),Q(7,7) 100 PRINTCHR$(26);CHR$(1);TAB(21);"* * * STAR TREK * * *" 110?:?:?:T0=INT(RND(1)*20+20)*100:T=T0:E=3000:P=10:S=0:S9=200 140DEFFND(D)=SQR((K(I,0)-S1)^2+(K(I,1)-S2)^2) 150GOSUB4200:Q2=Y2:Q1=X2:GOSUB4200:S2=Y2:S1=X2:FORI=0TO7:D(I)=0:NEXTI 200Q$=" <*>+++>!< * ":A$="NASRLRPHTOSHDACORE":H$="I II IIIIV " 220D$="WARP ENGINESS.R. SENSORSL.R. SENSORSPHASER CNTRL" 225D$=D$+"PHOTON TUBESDAMAGE CNTRLSHIELD CNTRLCOMPUTER" 250G$="ANTARES SIRIUS RIGEL DENEB PROCYON CAPELLA VEGA " 255G$=G$+"BETELGEUSE CANOPUS ALDEBARAN ALTAIR REGULUS " 260G$=G$+"SAGITTARIUS ARCTURUS POLLUX SPICA " 300B9=0:K9=0:FORI=0TO7:FORJ=0TO7:N=RND(1):K3=0-(N>.8)-(N>.95)-(N>.98) 350K9=K9+K3:B3=0:N=RND(1):IFN>.96THENB3=1:B9=B9+1 380S3=INT(RND(1)*8+1):Q(I,J)=-(K3*100+B3*10+S3) 390NEXTJ,I:IFB9=0THENQ(5,2)=-114:B9=1:K9=K9+1 400K0=K9:PRINT"YOUR ORDERS ARE AS FOLLOWS:":PRINT 410PRINT" DESTROY THE"K9"KLINGON WARSHIPS WHICH HAVE INVADED" 420PRINT" THE GALAXY BEFORE THEY CAN ATTACK FEDERATION HEADQUARTERS" 430PRINT" ON STARDATE"T0+30"; THIS GIVES YOU 30 DAYS. THERE ARE" 440PRINT" "B9"STARBASES IN THE GALAXY FOR RESUPPLYING YOUR SHIP." 450PRINT:PRINT:PRINT:PRINT:INPUT"ARE YOU READY TO ASSUME COMMAND";S$ 490PRINTCHR$(26);CHR$(1) 500K3=0:B3=0:S3=0:GOSUB4400:IFT<>T0THEN530 522PRINT"YOUR MISSION BEGINS WITH YOUR STARSHIP LOCATED" 524PRINT"IN THE GALACTIC QUADRANT, "S$:GOTO540 530PRINT"NOW ENTERING "S$" QUADRANT..." 540Q(Q1,Q2)=ABS(Q(Q1,Q2)):N=Q(Q1,Q2):X=N*.01 550K3=INT(X):B3=INT((X-K3)*10):S3=N-INT(N*.1)*10 570IFS<200THENPRINT" SHIELDS DANGEROUSLY LOW" 590FORI=0TO7:FORJ=0TO7:S(I,J)=1:K(INT(I/3),INT(J/3))=0:NEXTJ,I 600GOSUB4200:S1=Y2:S2=X2:S(Y2,X2)=2:IFK3=0THEN800 700FORI=0TOK3-1:GOSUB4100:S(Y2,X2)=3:K(I,0)=Y2:K(I,1)=X2:K(I,2)=200 710NEXT 800IFB3<>0THENFORI=1TOB3:GOSUB4100:S(Y2,X2)=4:BY=Y2:BX=X2:NEXTI 900FORI=1TOS3:GOSUB4100:S(Y2,X2)=5:NEXTI 990GOSUB2600 1000IFS+E>10AND(E>10ORD(6)=0)THEN1100 1010PRINT"** FATAL ERROR ** YOU'VE JUST STRANDED YOUR SHIP IN SPACE!!" 1020PRINT"YOU HAVE INSUFFICIENT MANEUVERING ENERGY, AND SHIELD CONTROL" 1030PRINT"IS PRESENTLY INCAPABLE OF CROSS-CIRCUITING TO ENGINE ROOM!" 1040GOTO2300 1100INPUT"COMMAND";S$:FORI=1TO9 1110IFLEFT$(S$,2)=MID$(A$,(I-1)*2+1,2)THEN1150 1120NEXTI:PRINT"SCIENCE OFFICER SPOCK REPORTS:" 1122PRINT"'THAT'S TOTALLY ILLOGICAL, CAPTAIN!'":GOTO1000 1150 IF I=1 THEN GOTO 1200 1151 IF I=2 THEN GOTO 990 1152 IF I=3 THEN GOTO 1700 1153 IF I=4 THEN GOTO 1800 1154 IF I=5 THEN GOTO 1900 1155 IF I=6 THEN GOTO 2000 1156 IF I=7 THEN GOTO 2100 1157 IF I=8 THEN GOTO 2800 1158 GOTO 2300 1200INPUT"COURSE (1-8.9)";C:IFC>=1ANDC<9THEN1230 1210PRINT"LT. SULU REPORTS, 'INCORRECT COURSE DATA, SIR!'":GOTO1000 1230INPUT"WARP (0-12)";W:IFW>0ANDW<=12THEN1250 1240PRINT"CHIEF ENGINEER SCOTT REPORTS, 'THE ENGINES WON'T"; 1242PRINT" TAKE WARP"W"'":GOTO1200 1250IFD(0)=0ORW<=.2THEN1270 1260PRINT"WARP ENGINES ARE DAMAGED, MAXIMUM SPEED = WARP 0.2":GOTO1200 1270N=INT(W*8+.5):IFE-N>=0THEN1300 1272PRINT"ENGINEERING REPORTS,":PRINT"INSUFFICIENT ENERGY AVAILABLE "; 1274PRINT"FOR MANEUVERING AT WARP"W"!'":IFS0THEN1000 1280PRINT"DEFLECTOR CONTROL ROOM ACKNOWLEDGES," 1282PRINT"'"S"UNITS OF ENERGY PRESENTLY DEPLOYED TO SHIELDS'":GOTO1000 1300IFK3<=0THEN1500 1310FORI=0TO2:IFK(I,2)>0THENS(K(I,0),K(I,1))=1:GOSUB4100:S(Y2,X2)=3 1320K(I,0)=Y2:K(I,1)=X2:NEXTI 1400GOSUB2200 1500J=-1:GOSUB4500:IFRND(1)>.2THEN1600 1510IFRND(1)<.6THENJ=1 1520GOSUB4510 1600S(S1,S2)=1:Y1=S1+.5:X1=S2+.5:N=INT(W*8) 1602FORI=1TON:GOSUB4300:IFJ=0THEN1650 1604IFS(Y2,X2)=1THENNEXTI:S1=Y2:S2=X2:GOTO1620 1610S1=INT(Y1-Y):S2=INT(X1-X):PRINT"WARP ENGINES SHUT DOWN AT SECTOR"; 1615PRINTS1+1"-"S2+1"DUE TO BAD NAVIGATION." 1620S(S1,S2)=2:GOSUB4000:GOTO990 1650X1=Q1:X2=Q2:Q1=INT(Q1+W*Y+(S1+.5)/8):Q2=INT(Q2+W*X+(S2+.5)/8):N=0 1660IFQ1<0ORQ1>7THENN=1:Q1=Q1-(Q1<0)+(Q1>7):S1=Q1:GOTO1660 1662IFQ2<0ORQ2>7THENN=1:Q2=Q2-(Q2<0)+(Q2>7):S2=Q2:GOTO1662 1670IFN=0THEN1695 1680PRINT"LT. UHURA REPORTS MESSAGE FROM STARFLEET COMMAND:" 1682PRINT"'PERMISSION TO ATTEMPT CROSSING OF GALACTIC PERIMETER" 1684PRINT"IS HEREBY *DENIED*. SHUT DOWN YOUR ENGINES.'" 1690IFX1=Q1ANDX2=Q2THEN1620 1695GOSUB4000:GOTO500 1700IFD(2)>0THENPRINT"LONG RANGE SENSORS ARE INOPERABLE":GOTO1000 1710PRINT"LONG RANGE SENSOR SCAN FOR QUADRANT"Q1+1"-"Q2+1 1720FORI=Q1-1TOQ1+1:FORJ=Q2-1TOQ2+1:PRINT" "; 1730IFI<0ORI>7ORJ<0ORJ>7THENPRINT"***";:GOTO1760 1740S$=STR$(Q(I,J)):S$="00"+MID$(S$,2):PRINTRIGHT$(S$,3); 1750IFD(7)=0THENQ(I,J)=ABS(Q(I,J)) 1760NEXTJ:PRINT:NEXTI:GOTO1000 1800IFK3>0THEN1805 1802PRINT"SCIENCE OFFICER SPOCK REPORTS," 1804PRINT"'SENSORS SHOW NO ENEMY SHIPS IN THIS QUADRANT.'":GOTO1000 1805IFD(3)>0THENPRINT"PHASERS INOPERATIVE":GOTO1000 1806IFD(7)>0THENPRINT"COMPUTER FAILURE HAMPERS ACCURACY." 1810PRINT"PHASERS LOCKED ON TARGET, ENERGY AVAILABLE="E 1812INPUT"NUMBER OF UNITS TO FIRE:";W:IFW<=0THEN1000 1814IFE-W<0THEN1810 1820E=E-W:GOSUB2200:IFD(7)>0THENW=W*RND(1) 1830FORI=0TO2:IFK(I,2)<=0THEN1890 1832H=INT(W/K3):H=INT((W/FND(0))*(RND(1)+2)):IFH>.15*K(I,2)THEN1840 1835?"SENSORS SHOW NO DAMAGE TO ENEMY AT"K(I,0)+1"-"K(I,1)+1:GOTO1890 1840K(I,2)=K(I,2)-H 1842PRINT H"UNIT HIT ON KLINGON AT SECTOR"K(I,0)+1"-"K(I,1)+1 1845IFK(I,2)>0THENPRINT" ("K(I,2)"UNITS REMAINING)":GOTO1890 1860GOSUB4600 1890NEXTI:GOTO1000 1900IFD(4)>0THENPRINT"PHOTON TUBES ARE NOT OPERATIONAL":GOTO1000 1902IFP=0THENPRINT"ALL PHOTON TORPEDOES EXPENDED":GOTO1000 1905 PRINT "TORPEDO COURSE (1-8.9)";:INPUT C:IFC>=1 AND C<9 THEN 1910 1907PRINT"ENSIGN CHEKOV REPORTS, 'INCORRECT COURSE DATA, SIR!'":GOTO1000 1910P=P-1:PRINT"TORPEDO TRACK:":Y1=S1+.5:X1=S2+.5 1912GOSUB4300:IFJ=0THENPRINT"TORPEDO MISSED":GOTO1990 1915PRINTTAB(15)Y2+1"-"X2+1 1916 IF S(Y2,X2)=1 THEN GOTO 1912 1917 IF S(Y2,X2)=2 THEN GOTO 0:IF S(Y2,X2)=3 THEN GOTO 1920 1918 IF S(Y2,X2)=4 THEN GOTO 1942:GOTO 1950 1920FORI=0TO2:IFINT(Y2)<>K(I,0)ORINT(X2)<>K(I,1)THENNEXTI 1930GOSUB4600:GOTO1990 1942PRINT"*** STAR BASE DESTROYED ***":B3=B3-1:B9=B9-1:GOSUB4700 1944IFB3>0THEN1990 1945PRINT"THAT DOES IT CAPTAIN!! YOU ARE HEREBY RELIEVED OF COMMAND" 1946GOTO2300 1950IFS(Y2,X2)=5THENPRINT"STAR AT"Y2+1"-"X2+1"ABSORBED TORPEDO ENERGY." 1990GOSUB2200:GOTO1000 2000IFD(6)>0THENPRINT"SHIELD CONTROL IS NON-OPERATIONAL":GOTO1000 2010PRINT"ENERGY AVAILABLE ="E+S; 2020INPUT" NUMBER OF UNITS TO SHIELDS:";N:IFN>0ANDS<>NTHEN2030 2025PRINT"SHIELDS UNCHANGED":GOTO1000 2030IFE+S-N<0THEN2010 2050E=E+S-N:S=N:PRINT"DEFLECTOR CONTROL ROOM REPORT:" 2060PRINT"'SHIELDS NOW AT"S"PER YOUR COMMAND'":GOTO1000 2100IFD(5)>0THENPRINT"DAMAGE CONTROL REPORT IS NOT AVAILABLE":GOTO1000 2110N=0:FORI=0TO7:IFD(I)>0THENN=N+.1 2120NEXTI:IFN=0ORC$<>"DOCKED"THEN2190 2150N=N+.5*RND(1):IFN>=1THENN=.9 2160PRINT"TECHNICIANS STANDING BY TO EFFECT REPAIRS TO YOUR SHIP;" 2162PRINT"ESTIMATED TIME TO REPAIR: "N"STARDATES." 2163INPUT"WILL YOU AUTHORIZE THE REPAIR ORDER";S$ 2165IFLEFT$(S$,1)<>"Y"THEN1000 2170T=T+N+.1:J=-100:GOSUB4500:GOTO1000 2190PRINT:PRINT"DEVICE"TAB(14)"STATE OF REPAIR" 2195J=0:GOSUB4500:PRINT:GOTO1000 2200IFK3<=0THENRETURN 2210IFC$="DOCKED"THENPRINT"STAR BASE SHIELDS THE ENTERPRISE":RETURN 2220FORI=0TO2:IFK(I,2)<=0THEN2290 2230H=FND(0):H=INT(K(I,2)/H):H=H*(2+RND(1)):S=S-H 2240PRINTH"UNIT HIT ON ENTERPRISE FROM SECTOR"K(I,0)+1"-"K(I,1)+1 2250IFS<0THEN2400 2260PRINT" (SHIELDS DOWN TO"S"UNITS.)" 2270IFH<20ORRND(1)>.6ORH/S<.02THEN2290 2280J=H/S+.5*RND(1):GOSUB4510 2290NEXTI:RETURN 2300PRINT"IT IS STARDATE"T:GOTO2450 2400PRINT"THE ENTERPRISE HAS BEEN DESTROYED. THE FEDERATION" 2410PRINT"WILL BE CONQUERED." 2450?"THERE WERE"K9"BATTLE CRUISERS LEFT AT THE END OF YOUR MISSION." 2490INPUT"WANT ANOTHER CHANCE";S$:IFLEFT$(S$,1)="Y"THEN100 2495END 2500PRINT"CONGRATULATIONS, CAPTAIN! THE LAST KLINGON BATTLE CRUISER" 2510PRINT"MENACING THE FEDERATION HAS BEEN DESTROYED." 2520PRINT"YOUR RATING IS"INT(K0/(T-T0)*1000):GOTO2490 2600FORI=S1-1TOS1+1:FORJ=S2-1TOS2+1:IFI<0ORI>7ORJ<0ORJ>7THEN2608 2604IFS(I,J)=4THEN2610 2608NEXTJ,I:GOTO2620 2610C$="DOCKED":E=3000:P=10 2612PRINT"SHIELDS DROPPED FOR DOCKING PURPOSES":S=0:GOTO2700 2620IFK3>0THENC$="RED":GOTO2700 2622IFE<300THENC$="YELLOW":GOTO2700 2624C$="GREEN" 2700IFD(1)>0THENPRINT"*** SHORT RANGE SENSORS ARE OUT ***":RETURN 2710S$="---------------------------------":PRINTS$ 2720FORI=0TO7:FORJ=0TO7 2730PRINTMID$(Q$,(S(I,J)-1)*3+1,3);" ";:NEXTJ:PRINTTAB(35) 2741IFI=0THENPRINT" " 2742IFI=1THENPRINT"STARDATE"TAB(54)T 2743IFI=2THENPRINT"CONDITION"TAB(55)C$ 2744IFI=3THENPRINT"QUADRANT"TAB(54)Q1+1"-"Q2+1 2745IFI=4THENPRINT"SECTOR"TAB(54)S1+1"-"S2+1 2746IFI=5THENPRINT"ENERGY"TAB(54)E 2747IFI=6THENPRINT"PHOTON TORPEDOES"TAB(54)P 2748IFI=7THENPRINT"SHIELDS"TAB(54)S 2750NEXTI:PRINTS$:RETURN 2800J=0:IFD(7)>0THENPRINT"COMPUTER DISABLED":GOTO1000 2810INPUT"COMPUTER ACTIVE AND AWAITING COMMAND:";N 2820 IFN=1THENGOTO 2900 2821 IFN=2THENGOTO 3000 2822 IFN=3THENGOTO 3100 2823 IFN=4THENGOTO 3200 2824 IFN=5THENGOTO 3300 2830PRINT"LIBRARY COMPUTER REPORTS:" 2835PRINT"'I DON'T UNDERSTAND, SIR!'":GOTO1000 2900PRINT"COMPUTER RECORD OF GALAXY FOR QUADRANT "Q1+1"-"Q2+1 2910FORI=0TO7:FORJ=0TO7:PRINT" ";:IFQ(I,J)<0THENPRINT"***";:GOTO2950 2930S$=STR$(ABS(Q(I,J))):S$="00"+MID$(S$,2):PRINTRIGHT$(S$,3); 2950NEXTJ:PRINT:NEXTI:GOTO1000 3000PRINT" STATUS REPORT":PRINTK9"KLINGONS LEFT" 3010PRINTT0+30-T"STARDATES LEFT":PRINTB9"STARBASES LEFT":GOTO2100 3100PRINT:J=1:FORI=0TO2:IFK(I,2)<=0THEN3399 3110Y1=S1:X1=S2:Y2=K(I,0):X2=K(I,1):GOTO3320 3200Y1=S1:X1=S2:Y2=BY:X2=BX:IFB3>0THEN3320 3210?"MR. SPOCK REPORTS, 'SENSORS SHOW NO STARBASES IN THIS QUADRANT'" 3220GOTO1000 3300INPUT"INITIAL COORDINATES";Y1,X1:INPUT"FINAL COORDINATES";Y2,X2 3320Y2=Y1-Y2:X2=X2-X1:N=0:C=7:IFX2<0THENC=5:GOTO3380 3330IFX2>0ANDY2>=0THENC=1:GOTO3380 3340IFX2>0THENC=9:GOTO3380 3350IFY2>0THENC=3 3380IFY2<>0ANDX2<>0THENN=1.27324*ATN(Y2/X2) 3390PRINT"DIRECTION ="C+N 3395PRINT"DISTANCE ="SQR(Y2^2+X2^2):IFJ=0THEN1000 3399NEXTI:GOTO1000 4000E=E-INT(W*8+.5)-10:J=1:IFE>=0THEN4050 4010PRINT"SHIELD CONTROL SUPPLIED ENERGY TO COMPLETE THE MANEUVER." 4020S=S+E:E=0:IFS<=0THENS=0 4050IFW<1THENJ=.1*INT(10*W) 4060T=T+J:IFT>T0+30THEN2300 4090RETURN 4100GOSUB4200:IFS(Y2,X2)<>1THEN4100 4110RETURN 4200Y2=INT(RND(1)*8):X2=INT(RND(1)*8):RETURN 4300J=1:Y=(C-1)*.785398:X=COS(Y):Y=-SIN(Y) 4310Y1=Y1+Y:X1=X1+X:Y2=INT(Y1):X2=INT(X1) 4320IFX2<0ORX2>7ORY2<0ORY2>7THENJ=0 4330RETURN 4400J=0:N=1:FORI=1TOLEN(G$):IFMID$(G$,I,1)<>" "THEN4430 4420IFJ=Q1*2-(Q2>3)THEN4440 4422N=I+1:J=J+1 4430NEXTI 4440S$=MID$(G$,N,I-N) 4450N=(Q2+4*(Q2>3))*3+1:S$=S$+" "+MID$(H$,N,3):RETURN 4500FORX=0TO7:N=X:GOTO4520 4510N=INT(RND(1)*8):X=7 4520IFJ=0THENPRINTMID$(D$,N*12+1,11),D(N):GOTO4590 4530Y=D(N):D(N)=Y+J:IFD(N)<0THEND(N)=0 4540IF(J>0ANDY>0)OR(J<0ANDY=0)THEN4590 4550PRINT"DAMAGE CONTROL REPORT:";:PRINT" "MID$(D$,N*12+1,11)" "; 4560IFJ>0THENPRINT"DAMAGED":GOTO4590 4570IFD(N)=0THENPRINT"REPAIR COMPLETED":GOTO4590 4580PRINT"STATE OF REPAIR IMPROVED" 4590IFX<>7THENNEXT 4595RETURN 4600PRINT"*** KLINGON DESTROYED ***":K3=K3-1:K9=K9-1:Y2=K(I,0):X2=K(I,1) 4610K(I,2)=0:IFK9<1THEN2500 4700N=SGN(Q(Q1,Q2)):Q(Q1,Q2)=N*(K3*100+B3*10+S3):S(Y2,X2)=1 4710RETURN