5CLEAR 10DIM GM(5,5),SM$(5,5)*1 15DIM WS$(5):WC$=" " 20DIM DM(6),DM$(6) 25MK=2:DIM KX(MK),KY(MK),KE(MK) 50FOR I=0 TO 6:READ DM$(I):NEXT 60DATA "SHORT SENSOR","COMPUTER","LARGE SENSOR" 65DATA "PHASER","WARP","TORPEDO","SHIELD" 70VT$="012001200" 80RANDOMIZE 85GOSUB *TITLE 90*INIT 95NK=0:NB=0:SD=30 100FOR Y=0 TO 5 105PRINT "."; 110FOR X=0 TO 5 120K=- INT (( RND 1<.25)*( RND 1*MK+1)) 130B=-( RND 1<.05) 140S= INT ( RND 1*6+1) 150GM(X,Y)=-(K*100+B*10+S) 155NK=NK+K:NB=NB+B 160NEXT :NEXT 170IF NB>=2 GOTO *IE 175FOR I=1 TO 2-NB 180X= INT ( RND 1*6):Y= INT ( RND 1*6):N=GM(X,Y)\10 MOD 10:IF N GOTO 180 185GM(X,Y)=GM(X,Y)-10:NB=NB+1:NEXT 190*IE:PRINT :PRINT "K=";NK;" B=";NB:GOSUB *KEY 200EX= INT ( RND 1*6):EY= INT ( RND 1*6) 210SX= INT ( RND 1*6):SY= INT ( RND 1*6) 220GOSUB *DOCKED 230GOSUB *BLDS 400*MAIN 410GOSUB *CLRS 420GOSUB *ISDOCK 430GOSUB *ATK 440IF NK=0 THEN W1$="MISSION":W2$="COMPLETED!":GOTO *GOVR 450IF SD=0 THEN W1$="TOO":W2$="LATE...":GOTO *GOVR 460IF EE<=0 THEN W1$="ENTERPRISE":W2$="DESTROYED":GOTO *GOVR 500*MCE 560GOSUB *PUTE:GOSUB *CMD 570IF K$="G" GOSUB *CMDG:GOSUB *CLRS:GOTO *MCE 580'IF K$="S" GOTO *MCE 590IF K$="L" THEN GOSUB *CMDL:GOSUB *CLRS:GOTO *MCE 600IF K$="W" THEN GOSUB *CMDW:IF A GOTO *MAIN ELSE *MCE 610IF K$="R" THEN GOSUB *CMDR:GOSUB *CLRS:GOTO *MCE 620IF K$="P" THEN GOSUB *CMDP:IF A GOTO *MAIN ELSE *MCE 630IF K$="T" THEN GOSUB *CMDT:IF A GOTO *MAIN ELSE *MCE 680GOSUB *HELP:GOTO *MCE 690GOTO *MCE 700*GOVR 710CLS 720PRINT W1$;" ";W2$:PRINT 730PRINT "TIME:"; STR$ (SD) 740IF NK THEN PRINT "KLINGONS:"; STR$ (NK) 770PRINT :PRINT "TRY AGAIN(Y/N)"; 780GOSUB *KEY:IF K$="Y" GOTO *INIT 790END 1000*ISVA:A=-(X>=0 AND X<=5 AND Y>=0 AND Y<=5):RETURN 1020*WMSG:GOSUB *PUTW:FOR Z=0 TO 1500:NEXT :RETURN 1050*PUTE 1060WS$="Q-"+ STR$ (EX+1)+ STR$ (EY+1)+" S-"+ STR$ (SX+1)+ STR$ (SY+1)+" E="+ STR$ (EE) 1070GOSUB *PUTW:RETURN 1100*BLDS 1110GM(EX,EY)= ABS GM(EX,EY) 1120FOR Y=0 TO 5:FOR X=0 TO 5:SM$(X,Y)=".":NEXT :NEXT 1130SM$(SX,SY)="E" 1140FOR I=0 TO MK:KE(I)=0:NEXT 1145SK=GM(EX,EY)\100:IF SK=0 GOTO 1180 1150FOR I=0 TO SK-1 1160X= INT ( RND 1*5):Y= INT ( RND 1*5):IF SM$(X,Y)<>"." GOTO 1160 1170SM$(X,Y)="K":KX(I)=X:KY(I)=Y:KE(I)=300 1175NEXT 1180SB=GM(EX,EY)\10 MOD 10:IF SB=0 GOTO 1220 1190X= INT ( RND 1*5):Y= INT ( RND 1*5):IF SM$(X,Y)<>"." GOTO 1190 1200SM$(X,Y)="B":BX=X:BY=Y 1220N=GM(EX,EY) MOD 10:IF N=0 GOTO 1260 1230FOR I=1 TO N 1240X= INT ( RND 1*5):Y= INT ( RND 1*5):IF SM$(X,Y)<>"." GOTO 1240 1250SM$(X,Y)="*":NEXT 1260RETURN 1300*KEY 1310K$= INKEY$ :IF K$="" THEN KP$="":GOTO *KEY 1320IF K$=KP$ GOTO *KEY 1330KP$=K$:RETURN 1400*CMD 1410WS$="CMD?":GOSUB *PUTW 1420GOSUB *KEY:RETURN 1500*GETW 1510V= VAL ( MID$ (VT$, INT (R/45)+1,1)) 1520IF V=0 THEN W= COS R ELSE IF V=1 THEN W= COS (90-(R MOD 90)) ELSE W= COS (R MOD 90) 1530IF W=0 THEN W=1 ELSE W= ABS (1/W) 1590RETURN 1600*GETX 1610X=E* COS R:IF X>0 THEN X=X+.1 1620Y=-(E* SIN R):IF Y>0 THEN Y=Y+.1 1690RETURN 1700*CLRW 1710WX=8:WY=0 1720FOR I=0 TO 5:WS$(I)=WC$:LOCATE WX,I:PRINT WC$;:NEXT 1730RETURN 1750*PUTW 1760IF WY>5 THEN FOR I=0 TO 4:WS$(I)=WS$(I+1):LOCATE WX,I:PRINT LEFT$ (WS$(I)+WC$,16);:NEXT :WY=5 1770LOCATE WX,WY:PRINT WC$;:LOCATE WX,WY:PRINT WS$;:WS$(WY)=WS$ 1780WY=WY+1 1790RETURN 1900*DOCKED 1910EE=3200:NT=10 1920FOR I=0 TO 6:DM(I)=0:NEXT 1990RETURN 2000*ISDOCK 2005FD=0:IF SB=0 RETURN 2010FD=SB*-( ABS (SX-BX)<=1 AND ABS (SY-BY)<=1) 2020IF FD THEN WS$="DOCKED":GOSUB *WMSG:GOSUB *DOCKED 2030RETURN 2100*DMG 2110IF DM(6)=0 THEN I=6:DM(I)=A\50+1 ELSE I= INT ( RND 1*6):DM(I)=DM(I)+ INT ( RND 1*(A\99+1))+1 2120GOSUB *ISDMG 2190RETURN 2200*ISDMG 2210A=DM(I):IF I OR A THEN WS$=DM$(I):GOSUB *PUTW 2220IF A=0 THEN RETURN 2230WS$="BROKEN "+ STR$ (A)+" DAY(S)":GOSUB *WMSG 2290RETURN 2300*CLRS 2310CLS :GOSUB *CLRW 2320GOSUB *CMDS 2390RETURN 2400*ATK 2410IF SK=0 RETURN 2420IF FD THEN WS$="PROTECTED":GOSUB *WMSG:RETURN 2430T=0:WS$="KLINGON ATTACK!":GOSUB *WMSG 2440FOR K=0 TO MK 2445IF KE(K)=0 GOTO 2470 2450S=(KE(K)+( RND 1*KE(K))*15)\(30+ SQR ABS (KX(K)-SX)+ SQR ABS (KY(K)-SY)+1):T=T+S 2460WS$="A:"+ STR$ (S)+" K-"+ STR$ (KX(K)+1)+ STR$ (KY(K)+1):GOSUB *WMSG 2470NEXT 2480EE=EE-T:IF EE<=0 THEN WS$="* BANG! *":GOSUB *WMSG:RETURN 2490IF RND 1*EE\40 THEN WS$=WS$+"DAMAGED":GOTO *FE 2640KE(I)=0:GM(EX,EY)=GM(EX,EY)-100:SM$(KX(I),KY(I))=".":SK=SK-1:NK=NK-1 2680WS$=WS$+"DESTROYED" 2690*FE:GOSUB *WMSG:RETURN 2700*GETR 2710WS$="DIR(0-360)":GOSUB *PUTW:R=-1:INPUT R 2720IF R<0 OR R>360 THEN WS$="?":GOSUB *WMSG:A=0:RETURN 2730A=1:RETURN 2800*TITLE 2810CLS :PRINT "* STAR TREK - V1.0 *":PRINT 2820RETURN 3000*CMDG 3005I=1:GOSUB *ISDMG:IF A RETURN 3010CLS 3020FOR Y=0 TO 5 3030FOR X=0 TO 5 3040M=GM(X,Y):IF M>=0 THEN S$= RIGHT$ (" "+ STR$ M,3) ELSE S$="***" 3050LOCATE X*4+1,Y 3060PRINT S$; 3070NEXT :NEXT 3080LOCATE EX*4,EY:PRINT ">"; 3090GOSUB *KEY:RETURN 3200*CMDS 3210I=0:GOSUB *ISDMG:IF A THEN LOCATE 0,0:PRINT "*BROKEN*";:RETURN 3220FOR Y=0 TO 5 3230FOR X=0 TO 5 3240LOCATE X,Y:PRINT SM$(X,Y); 3250NEXT 3260NEXT 3270RETURN 3400*CMDL 3405I=2:GOSUB *ISDMG:IF A RETURN 3410CLS 3420FOR Y=EY-1 TO EY+1 3430FOR X=EX-1 TO EX+1 3440GOSUB *ISVA:IF A=0 THEN S$="***":GOTO 3460 3450M= ABS GM(X,Y):GM(X,Y)=M:S$= RIGHT$ (" "+ STR$ M,3) 3460LOCATE (X+1-EX)*4,Y+1-EY:PRINT S$; 3470NEXT :NEXT 3480GOSUB *KEY:RETURN 4000*CMDW 4010I=4:GOSUB *ISDMG:IF A THEN L=2 ELSE L=99 4020WS$="DIST(1-"+ STR$ (L)+")":GOSUB *PUTW:D=0:INPUT D 4030IF D=0 THEN A=0:RETURN 4040IF D<1 OR D>L THEN WS$="?":GOSUB *WMSG:GOTO *CMDW 4050A=EE-D*(D\2):IF A<0 THEN WS$="NO ENERGY":GOSUB *WMSG:A=0:RETURN 4060EE=A 4070GOSUB *GETR 4080IF A=0 RETURN 4090G=EX*6+SX:H=EY*6+SY 4100GOSUB *GETW 4110E=0:SM$(SX,SY)="." 4120SD=SD-1 4130FOR I=0 TO 6 4140IF DM(I) THEN DM(I)=DM(I)-1 4150NEXT 4160*WL 4170E=E+W:IF E>D THEN E=D 4180GOSUB *GETX:X=X+G:Y=Y+H 4190S=X MOD 6:T=Y MOD 6:U= INT (X/6):V= INT (Y/6) 4200'WS$= STR$ (U)+":"+ STR$ (V)+","+ STR$ (S)+":"+ STR$ (T):GOSUB *PUTW:GOSUB *KEY 4210X=U:Y=V:GOSUB *ISVA:IF A=0 GOTO *WOG 4220IF (EX<>U OR EY<>V) THEN IF E.2 GOTO *WNS 4380WS$="SPACE STORM!":GOSUB *WMSG:A=100:GOSUB *DMG 4390*WNS 4400F=EX<>U OR EY<>V 4410EX=U:EY=V:SX=S:SY=T:IF F GOSUB *BLDS 4420*WSE 4430SM$(SX,SY)="E" 4440A=1:RETURN 4600*CMDR 4610CLS 4620PRINT "TIME:"; STR$ (SD); 4630PRINT " COND:"; 4640IF FD THEN S$="DOCKED" ELSE IF SK THEN S$="RED" ELSE IF EE<999 THEN S$="YELLOW" ELSE S$="GREEN" 4650PRINT S$ 4660PRINT "Q-"; STR$ (EX+1); STR$ (EY+1);" S-"; STR$ (SX+1); STR$ (SY+1);" E="; STR$ (EE) 4670PRINT "TORPEDO:"; STR$ (NT) 4680PRINT "KLINGONS:"; STR$ (NK) 4690PRINT "BASES:"; STR$ (NB) 4700GOSUB *KEY 4710T=0:FOR I=0 TO 6:T=T+DM(I):NEXT :IF T=0 THEN RETURN 4720CLS :FOR I=0 TO 6 4730A=DM(I):IF A THEN PRINT DM$(I);" "; STR$ (A);" DAY(S)" 4740NEXT 4790GOSUB *KEY:RETURN 5000*CMDP 5010I=3:GOSUB *ISDMG:IF A GOTO *PN 5020S=0:WS$="UNITS":GOSUB *PUTW:INPUT S 5030IF S<=0 GOTO *PN 5040IF S>EE THEN WS$="NO ENERGY":GOSUB *WMSG:GOTO *PN 5050EE=EE-S:IF SK=0 THEN WS$="NO KLINGONS":GOSUB *WMSG:GOTO *PP 5060S=S\SK:IF S>1090 THEN WS$="OVERLOADED":GOSUB *WMSG:DM(3)=1:GOSUB *ISDMG:S=9 5070FOR K=0 TO MK 5075IF KE(K)=0 GOTO 5100 5080X=KX(K)-SX:Y=KY(K)-SY:P=S*30\(30+X*X+Y*Y)+1 5090WS$= STR$ (P)+" HITS":GOSUB *WMSG:I=K:GOSUB *FIRE 5100NEXT 5180*PP:A=1:RETURN 5190*PN:A=0:RETURN 5400*CMDT 5410I=5:GOSUB *ISDMG:IF A GOTO *TN 5420IF NT=0 THEN WS$="EMPTY":GOSUB *WMSG:GOTO *TN 5430GOSUB *GETR 5440IF A=0 GOTO *TN 5445NT=NT-1 5450GOSUB *GETW 5460E=0 5490*TL 5500E=E+W:GOSUB *GETX:X= INT (SX+X):Y= INT (SY+Y) 5510GOSUB *ISVA:IF A=0 THEN WS$="MISSED":GOSUB *WMSG:GOTO *TE 5520WS$="T:"+ STR$ (X+1)+ STR$ (Y+1):GOSUB *WMSG 5530K$=SM$(X,Y) 5540IF K$<>"K" GOTO *TNK 5550FOR K=0 TO MK 5560IF KX(K)=X AND KY(K)=Y THEN P= INT ( RND 1*99)+280:I=K:GOSUB *FIRE:K=MK 5570NEXT 5580GOTO *TE 5590*TNK 5600IF K$<>"B" GOTO *TNB 5605IF SB=0 THEN STOP 5610SM$(X,Y)=".":GM(EX,EY)=GM(EX,EY)-10:SB=SB-1:NB=NB-1 5615WS$="HIT BASE":GOSUB *WMSG 5620GOTO *TE 5650*TNB 5660IF K$<>"*" GOTO *TL 5670WS$="HIT STAR":GOSUB *WMSG 5680IF RND 1<.3 GOTO *TE 5690SM$(X,Y)=".":GM(EX,EY)=GM(EX,EY)-1 5700IF RND 1<.6 THEN WS$="DESTROYED":GOSUB *WMSG:GOTO *TE 5710WS$="DAMAGED":GOSUB *WMSG 5720A=300:GOSUB *DMG:GOTO *TE 5780*TN:A=0:RETURN 5790*TE:A=1:RETURN 6000*HELP 6010CLS 6020PRINT "L:L SENSOR G:GALAXY MAP"; 6030PRINT "W:WARP R:REPORT" 6040PRINT "P:PHASER T:TORPEDO" 6090GOSUB *KEY:GOSUB *CLRS:RETURN