10 REM SPACE-TREK
20 GOSUB 3000
30 GOSUB 3500
40 EN=5000
50 SD=0
60 NP=10
100 REM MAIN TURN LOOP
105 IF EN<0 THEN GOTO 10000
107 SD=SD+1.04
110 MODE 1:PAPER 0:BORDER 2:CLS
115 PEN 1
120 LOCATE 8,4: PRINT "SPACE TREK COMMAND"
130 LOCATE 7,5:PRINT "===================="
140 LOCATE 1,11
150 PRINT "(1)  Warp Engines"
160 PRINT "(2)  Impulse Engines"
170 PRINT "(3)  Phasers"
180 PRINT "(4)  Photon Torpedoes"
190 PRINT "(5)  Dock with Starship"
200 PRINT "(6)  Long range scan" 
210 PRINT "(7)  Short range scan"
211 a$=INKEY$
213 EN=EN+1:IF EN>5000 THEN EN=5000
215 IF KS=0 THEN LOCATE 5,21:PRINT "CONDITION GREEN":GOTO 218 ELSE LOCATE 5,21:PRINT "CONDITION RED":BORDER 3
216 IF RND<0.06*KS THEN GOSUB 9000
218 LOCATE 15,19:PRINT"SHIP ENERGY :"EN"    "
219 IF A$<"1" OR A$>"7" THEN GOTO 211
220 ON ASC(A$)-ASC("0") GOSUB 4000,5000,6000,7000,8000,1000,2000
299 GOTO 100
1000 REM LONG RANGE SCAN
1010 CLS
1020 A=SX-1:C=SX+1
1030 B=SY-1:D=SY+1
1040 IF A<1 THEN A=1 ELSE IF C>10 THEN C=10
1050 IF B<1 THEN B=1 ELSE IF D>10 THEN D=10
1055 LOCATE 6,5
1060 FOR L=A TO C
1070 PRINT "***"CHR$(L+47)"***";
1080 NEXT L
1090 LOCATE 1,6:FOR L=B TO D
1100 PRINT "     ";:FOR N=A TO C:PRINT "*     *";:NEXT N:PRINT
1105 PRINT "   "CHR$(L+47)" ";:FOR N=A TO C:PRINT "*     *";:NEXT N:PRINT
1108 PRINT "     ";:FOR N=A TO C:PRINT "*     *";:NEXT N:PRINT
1110 NEXT L 
1120 PRINT "     ";:FOR L=A TO C:PRINT"*******";:NEXT L
1125 LOCATE 4,1:PRINT"<stars , bases , klingons>"
1130 FOR L=A TO C
1140 FOR M=B TO D
1145 SOUND 1,INT(RND*500)+50,10
1150 LOCATE 8+(L-A)*7,7+(M-B)*3
1160 G$=STR$(G(L,M)):G$=RIGHT$(G$,LEN(G$)-1):G$=RIGHT$("00"+G$,3)
1165 PRINT G$
1170 NEXT M:NEXT L
1180 SOUND &81,0
1200 LOCATE 6,21:PRINT"<SPACE> to Exit"
1210 IF INKEY$=" " THEN GOTO 1210
1220 IF INKEY$<>" " THEN GOTO 1220
1299 RETURN
2000 REM SHORT RANGE SCAN 
2010 CLS: LOCATE 6,6: PRINT"**0**1**2**3**4**5**6**7**8**9**"
2020 FOR L=0 TO 9:LOCATE 3,L+7
2030 PRINT STR$(L)" *                              *"
2040 NEXT L
2050 LOCATE 6,17
2060 PRINT"********************************"
2065 PAPER 1:PEN 0
2070 FOR L=1 TO 10:FOR M=1 TO 10
2075 SOUND 1,L*M*4+200,10
2080 LOCATE 4+L*3,6+M
2090 IF S(L,M)=100 THEN PRINT" * ":GOTO 2140
2100 IF S(L,M)=-1 THEN PRINT"<!>":GOTO 2140
2110 IF S(L,M)=10 THEN PRINT")-<": GOTO 2140
2120 IF S(L,M)=1 THEN PRINT"<=>"
2130 IF S(L,M)=0 THEN PRINT"   "
2140 NEXT M:NEXT L
2142 PAPER 0:PEN 1
2145 SOUND &81,0
2150 LOCATE 6,21:PRINT"<SPACE> to exit"
2160 IF INKEY$=" " THEN GOTO 2160
2170 IF INKEY$<>" " THEN GOTO 2170
2199 RETURN
3000 REM SETUP THE GALAXY 
3010 DIM G(10,10),S(10,10)
3020 NK=30:DIM KX(NK),KY(NK)
3030 SX=5:SY=5
3040 X=5:Y=5 
3060 FOR N=1 TO NK
3070 L=INT(RND(1)*10+1):M=INT(RND(1)*10+1)
3080 G(L,M)=G(L,M)+1
3090 NEXT N
3100 FOR L=1 TO 10:FOR M=1 TO 10
3110 G(L,M)=G(L,M)+100*INT(RND*5)
3120 NEXT M:NEXT L
3130 FOR N=1 TO 3
3140 L=INT(RND(1)*10+1):M=INT(RND(1)*10+1)
3150 G(L,M)=G(L,M)+10
3160 NEXT N
3199 RETURN
3500 REM GENERATE THIS SECTOR
3510 P=G(SX,SY):FOR L=1 TO 10
3520 FOR M=1 TO 10:S(L,M)=0:NEXT M:NEXT L
3530 S(X,Y)=-1
3540 IF P<100 THEN GOTO 3550
3543 P=P-100
3546 L=INT(RND(1)*10+1):M=INT(RND(1)*10+1):IF S(L,M)<>0 THEN GOTO 3546
3549 S(L,M)=100:GOTO 3540
3550 IF P<10 THEN KS=P:GOTO 3560
3553 P=P-10
3556 L=INT(RND(1)*10+1):M=INT(RND(1)*10+1):IF S(L,M)<>0 THEN GOTO 3556
3559 S(L,M)=10:GOTO 3550 
3560 IF P=0 THEN RETURN 
3570 P=P-1
3580 L=INT(RND(1)*10+1):M=INT(RND(1)*10+1):IF S(L,M)<>0 THEN GOTO 3580
3590 S(L,M)=1:GOTO 3560
3599 RETURN 
4000 REM WARP ENGINES 
4010 IF EN<1000 THEN CLS:LOCATE 1,11:PRINT"Warp engines out of commission":FOR L=1 TO 800:NEXT L:RETURN
4020 CLS: LOCATE 1,9:PRINT"SET TARGET SECTOR"
4030 LOCATE 6,13: PRINT" X :  , Y :  "
4040 L=SX-1:M=SY-1
4050 LOCATE 11,13:PRINT L:LOCATE 18,13:PRINT M
4060 A$=INKEY$:IF A$="" THEN GOTO 4060
4065 IF A$=CHR$(242) THEN L=L-1
4070 IF A$=CHR$(243) THEN L=L+1
4080 IF A$=CHR$(240) THEN M=M-1
4090 IF A$=CHR$(241) THEN M=M+1
4100 IF A$=CHR$(224) THEN GOTO 4200
4110 L=(L+10) MOD 10:M=(M+10) MOD 10
4115 PRINT:PRINT"Energy used :";:DX=L-(SX-1):DY=M-(SY-1):P=20*INT(DX*DX+DY*DY):PRINT P;"    "
4120 GOTO 4050
4200 IF EN<P THEN PRINT"INSUFFICIENT ENERGY REMAINS ":FOR L=1 TO 800:NEXT L:RETURN
4220 FOR N=50 TO 200 STEP 5:SOUND 1,N,25:SOUND 2,N+2,15:SOUND 3,N+4,10:NEXT N
4230 PRINT"YOU ARE NOW IN SECTOR ( "L" , "M" )"
4240 SX=L+1:SY=M+1:FOR L=1 TO 800:NEXT L
4250 EN=EN-P:GOSUB 3500:RETURN
5000 REM IMPULSE ENGINES 
5010 IF EN<500 THEN CLS:LOCATE 1,11:PRINT"Impulse engines out of commission":FOR L=1 TO 800:NEXT L:RETURN
5020 CLS:LOCATE 1,9:PRINT"SET TARGET COORDINATES"
5030 LOCATE 6,13:PRINT" X :  , Y :  "
5040 L=X-1:M=Y-1
5050 LOCATE 11,13:PRINT L:LOCATE 18,13:PRINT M
5060 A$=INKEY$:IF A$="" THEN GOTO 5060
5065 IF A$=CHR$(242) THEN L=L-1
5070 IF A$=CHR$(243) THEN L=L+1
5080 IF A$=CHR$(240) THEN M=M-1
5090 IF A$=CHR$(241) THEN M=M+1
5100 IF A$=CHR$(224) THEN GOTO 5200
5110 L=(L+10) MOD 10:M=(M+10) MOD 10
5115 PRINT:PRINT"ENERGY USED:";:DX=L-(X-1):DY=M-(Y-1):P=3*INT(DX*DX+DY*DY):PRINT P;"    "
5120 GOTO 5050 
5200 IF EN<P THEN PRINT"INSUFFICIENT ENERGY IS LEFT":FOR L=1 TO 800:NEXT L:RETURN
5220 PRINT"YOU HAVE MOVED :"
5230 S(X,Y)=0:X=L+1:Y=M+1 
5240 IF S(X,Y)<>0 THEN PRINT:PRINT"....IN FLIGHT COLLISION..." ELSE GOTO 5500
5250 IF S(X,Y)=1 THEN PRINT"..WITH A KLINGON":EN=EN-1500:GOTO 5500
5260 IF S(X,Y)=10 THEN PRINT"..WITH A STARBASE":GOTO 8500
5270 IF S(X,Y)=100 THEN PRINT"..WITH A STAR..":EN=0:GOTO 5500
5500 S(X,Y)=-1:EN=EN-P:FOR L=1 TO 600:NEXT L:RETURN
6000 REM PHASERS 
6005 DEG
6010 CLS:LOCATE 1,9:PRINT"PHASER WEAPONS"
6020 LOCATE 1,11:PRINT"BEARING :                       ":LOCATE 11,11:INPUT BR
6030 IF BR<0 OR BR>360 THEN SOUND &81,500,50:FOR L=1 TO 800:NEXT L:GOTO 6020
6040 LOCATE 1,14:PRINT"ENERGY  :                     ":LOCATE 11,14:INPUT EP
6050 IF EP<0 OR EP>EN THEN SOUND &81,400,50:FOR L=1 TO 800:NEXT L:GOTO 6040
6060 TX=X:TY=Y:CX=SIN(BR):CY=COS(BR)
6080 TX=TX+CX:TY=TY+CY
6085 IF TX<1 OR TX>10 OR TY<1 OR TY>10 THEN GOTO 6200
6090 P=S(INT(TX+0.5),INT(TY+0.5)):IF P=0 THEN GOTO 6080
6100 IF P=10 THEN PRINT"YOU JUST DESTROYED A STAR BASE":G(SX,SY)=G(SX,SY)-10:S(INT(TX),INT(TY))=0:GOTO 6080
6110 IF P<>1 THEN GOTO 6120
6112 PRINT"YOU HIT A KLINGON"
6115 IF RND(1)*500<EP THEN PRINT"AND YOU DESTROYED IT":G(SX,SY)=G(SX,SY)-1:S(INT(TX+0.5),INT(TY+0.5))=0:NK=NK-1:KS=KS-1
6120 GOTO 6080 
6200 EN=EN-EP:FOR L=1 TO 1000:NEXT L:RETURN
7000 REM PHOTON TORPEDOES 
7010 CLS:LOCATE 1,9:PRINT"PHOTON TORPEDOES"
7020 LOCATE 1,11: PRINT"NUMBER TO FIRE :             ":LOCATE 17,11:INPUT PP
7030 IF PP<1 OR PP>NP THEN SOUND &81,400,50:FOR L=1 TO 800:NEXT L:GOTO 7020
7040 NP=NP-PP
7050 FOR M=1 TO PP 
7060 PRINT"PHOTON TORPEDO "M" FIRED AND RUNNING......";:FOR L=1 TO 10:PRINT". ";:SOUND 1,15*L+100:NEXT L:FOR L=1 TO 600:NEXT L
7065 PRINT
7070 IF RND(1)<0.3 THEN PRINT"IT MISSED.........":GOTO 7200
7080 IF G(SX,SY)/10=INT(G(SX,SY)/10) THEN PRINT"THE TORPEDO RUNS OUT INTO SPACE":GOTO 7200
7090 PRINT"HOMING DEVICES ACTUATED"
7100 A=INT(RND(1)*10+1):B=INT(RND(1)*10+1):IF S(A,B)<>1 THEN GOTO 7100
7110 PRINT"YOU HIT A KLINGON":IF RND(1)<0.75 THEN PRINT"AND YOU DESTROYED IT":S(A,B)=0:KS=KS-1:G(SX,SY)=G(SX,SY)-1:GOTO 7200 
7120 PRINT"BUT THE KLINGON'S DEFLECTORS REDUCED THE DAMAGE"
7200 NEXT M
7210 FOR L=1 TO 800:NEXT L
7299 RETURN
8000 REM DOCK WITH STARBASE 
8010 CLS:LOCATE 1,6:PRINT"DOCKING COMPUTER O.S. 0.1"
8020 PRINT"========================="
8030 LOCATE 1,9:PRINT"...A LITTLE UNRELIABLE"
8040 LOCATE 1,11:FOR L=1 TO 20+INT(RND(1)*20)
8050 A=INT(RND(1)*10+1):B=INT(RND(1)*10+1)
8060 IF S(A,B)=10 THEN PRINT"DOCKED SUCCESSFULLY":EN=5000:NP=10:PRINT:PRINT"ENERGY AND PHOTON TORPS. RENEWED"
8070 NEXT L
8080 FOR L=1 TO 800 STEP 4:SOUND 1,L,2
8090 NEXT L
8099 RETURN
9000 REM A KLINGON ATTACKS
9010 LOCATE 1,21: PRINT"A KLINGON PHASER IS FIRED AT YOU"
9013 FOR L=15 TO 0 STEP -1
9015 SOUND 1,0,10,L,0,0,8:NEXT L
9020 IF RND(1)<0.4 THEN PRINT"IT MISSES     ":FOR L=1 TO 600:NEXT L:LOCATE 1,21:PRINT"                                ":RETURN
9030 PRINT"IT HITS YOU...":DM=INT(RND(1)*300+400):FOR L=1 TO 600:NEXT L
9040 EN=EN-DM
9050 LOCATE 1,21:PRINT"                                     ":RETURN
10000 REM SHIP HAS BEEN DESTROYED 
10010 CLS:LOCATE 1,9:PRINT"YOUR SPACE SHIP HAS RUN OUT OF ENERGY"
10020 PRINT:PRINT"YOUR LIFE SUPPORT SYSTEMS HAVE FAILED"
10030 PRINT:PRINT".... ALL PASSENGERS AND CREW"
10040 PRINT:PRINT"...ARE MISSING ... PRESUMED DEAD"
10050 FOR L=1 TO 600:NEXT L
10060 PRINT"THE STARDATE IS : ";SD
10070 LOCATE 1,21:PRINT"   AGAIN (Y/N) ? "
10080 A$=INKEY$: IF A$<>"" THEN GOTO 10080
10090 A$=INKEY$: IF A$="" THEN GOTO 10090
10100 IF A$="Y" OR A$="y" THEN RUN
10110 IF A$<>"N" AND A$<>"n" THEN GOTO 10080 
10120 CLS:LOCATE 1,5:END