00100     REM *** PROGRAM SIMULATES TV PROGRAM STARTREK
00110     REM *** WRITTEN BY MIKE MAYFIELD, CENTERLINE ENGINEERING
00170   RANDOMIZE
00180     PRINT "                  * * *  STAR TREK  * * *"
00181     PRINT
00200   INPUT "DO YOU WANT INSTRUCTIONS (THEY'RE LONG!) (Y/[N])";A$
00210   IF A$="YES" OR A$="yes" OR A$="Y" OR A$="y" THEN 5820
00230   REM *** PROGRAM BEGINS HERE
00240     Z$,R$,Q$="                                                                        "
00260   DIM G(8,8),C(9,2),K(3,3),N(3),Z(8,8)
00290   T0,T=INT(RND*20+20)*100
00300   T9=30
00301     D0=0
00302     E0,E=3000
00303     P0,P=10
00304     S9=200
00305     S,H8=0
00360   DEF FND(D)=SQR((K(I,1)-S1)**2+(K(I,2)-S2)**2)
00370   Q1=INT(RND*8+1)
00380   Q2=INT(RND*8+1)
00390   S1=INT(RND*8+1)
00400   S2=INT(RND*8+1)
00410   T7=TIME(0)
00420   C(2,1),C(3,1),C(4,1),C(4,2),C(5,2),C(6,2)=-1
00430   C(1,1),C(3,2),C(5,1),C(7,2),C(9,1)=0
00440   C(1,2),C(2,2),C(6,1),C(7,1),C(8,1),C(8,2),C(9,2)=1
00450   MAT D=ZER
00460   D$="WARP ENGINESS.R. SENSORSL.R. SENSORSPHASER CNTRL"
00470   D$=D$+"PHOTON TUBESDAMAGE CNTRL"
00480   E$="SHIELD CNTRLCOMPUTER"
00490   B9,K9=0
00491   REM *** SETS UP WHAT EXISTS IN GALAXY
00500   FOR I=1 TO 8
00510   FOR J=1 TO 8
00520   R1=RND
00530   IF R1>.98 THEN 580
00540   IF R1>.95 THEN 610
00550   IF R1>.8 THEN 640
00560   K3=0
00561     GOTO 660
00580   K3=3
00581     K9=K9+3
00582     GOTO 660
00610   K3=2
00611     K9=K9+2
00612     GOTO 660
00640   K3=1
00641     K9=K9+1
00660   R1=RND
00670   IF R1>.96 THEN 700
00680   B3=0
00681     GOTO 720
00700   B3=1
00701     B9=B9+1
00720   S3=INT(RND*8+1)
00730   G(I,J)=K3*100+B3*10+S3
00740   Z(I,J)=0
00750   NEXT J
00760   NEXT I
00770   K7=K9
00775   PRINT
00776     PRINT
00780   PRINT"YOU MUST DESTROY";K9;" KLINGONS IN";T9;" STARDATES WITH ";B9;" STARBASES"
00790   IF B9>0 THEN 810
00800   G(6,3)=114
00810   K3,B3,S3=0
00820   IF Q1<1 OR Q1>8 OR Q2<1 OR Q2>8 THEN 920
00830   X=G(Q1,Q2)*.01
00840   K3=INT(X)
00850   B3=INT((X-K3)*10)
00860   S3=G(Q1,Q2)-INT(G(Q1,Q2)*.1)*10
00870   IF K3=0 THEN 910
00880   IF S>200 THEN 910
00890   PRINT"COMBAT AREA      CONDITION RED"
00900   PRINT"   SHIELDS DANGEROUSLY LOW"
00910   MAT K=ZER
00920   FOR I=1 TO 3
00930   K(I,3)=0
00940   NEXT I
00950   Q$=Z$
00951     R$=Z$
00970   S$=MID(Z$,1,48)
00971   REM *** PUT ENTERPRISE SOMEWHERE
00980   A$="<*>"
00990   Z1=S1
01000   Z2=S2
01010   GOSUB 5510
01020   FOR I=1 TO K3
01030 GOSUB 5380
01031   REM *** PUT KLINGONS SOMEWHERE
01040   A$="+++"
01050   Z1=R1
01060   Z2=R2
01070   GOSUB 5510
01080   K(I,1)=R1
01081    K(I,2)=R2
01082    K(I,3)=S9
01110   NEXT I
01120   FOR I=1 TO B3
01130   GOSUB 5380
01131   REM *** PUT STARBASE(S) SOMEWHERE
01140   A$=">!<"
01141    Z1=R1
01142    Z2=R2
01170   GOSUB 5510
01180   NEXT I
01190   FOR I=1 TO S3
01200   GOSUB 5380
01201   REM *** PUT STARS SOMEWHERE
01210   A$=" * "
01211    Z1=R1
01212    Z2=R2
01240   GOSUB 5510
01250   NEXT I
01260   GOSUB 4120
01270   INPUT "COMMAND:";A
01290   IF A=0 GOTO 1410
01291   IF A=1 GOTO 1260
01292   IF A=2 GOTO 2330
01293   IF A=3 GOTO 2530
01294   IF A=4 GOTO 2800
01295   IF A=5 GOTO 3460
01296   IF A=6 GOTO 3560
01297   IF A=7 GOTO 4630
01298   IF A=8 GOTO 6510
01310   PRINT
01311    PRINT"   0 = SET COURSE"
01320   PRINT"   1 = SHORT RANGE SENSOR SCAN"
01330   PRINT"   2 = LONG RANGE SENSOR SCAN"
01340   PRINT"   3 = FIRE PHASERS"
01350   PRINT"   4 = FIRE PHOTON TORPEDOES"
01360   PRINT"   5 = SHIELD CONTROL"
01370   PRINT"   6 = DAMAGE CONTROL REPORT"
01380   PRINT"   7 = CALL ON LIBRARY COMPUTER"
01390   PRINT"   8 = END THE CONTEST"
01391    PRINT
01400   GOTO 1270
01401   REM *** COURSE CONTROL CODE BEGINS HERE
01410   INPUT "COURSE (1-9):";C1
01430   IF C1=0 THEN 1270
01440   IF C1<1 OR C1>9 THEN 1410
01450   INPUT "WARP FACTOR (0-8):";W1
01470   IF W1<0 OR W1>8 THEN 1410
01480   IF D(1)>=0 OR W1<=.2 THEN 1510
01490   PRINT "WARP ENGINES ARE DAMAGED, MAXIMUM SPEED = WARP .2"
01500   GOTO 1410
01510   IF K3<=0 THEN 1560
01520   GOSUB 3790
01530   IF K3<=0 THEN 1560
01540   IF S<0 THEN 4000
01550   GOTO 1610
01560    IF E>0 THEN 1610
01570    IF S<1 THEN 3920
01580   PRINT "YOU HAVE";E;" UNITS OF ENERGY"
01590   PRINT "SUGGEST YOU GET SOME FROM YOUR SHIELDS WHICH HAVE";S;" UNITS LEFT"
01600   GOTO 1270
01610   FOR I=1 TO 8
01611    IF D(I)>=0 THEN 1640
01612   REM *** FIX ANY DAMAGED DEVICE
01630   D(I)=D(I)+1
01640   NEXT I
01650   IF RND>.2 THEN 1810
01660   R1=INT(RND*8+1)
01670   IF RND>= .5 THEN 1750
01680   D(R1)=D(R1)-(RND*5+1)
01690   PRINT
01691    PRINT "DAMAGE CONTROL REPORT:";
01710   GOSUB 5610
01720   PRINT" DAMAGED"
01721    PRINT
01722    GOTO 1810
01750   D(R1)=D(R1)+(RND*5+1)
01760   PRINT
01761    PRINT "DAMAGE CONTROL REPORT:";
01780   GOSUB 5610
01790   PRINT" STATE OF REPAIR IMPROVED"
01791    PRINT
01810   N=INT(W1*8)
01811    A$="   "
01812    Z1=S1
01813    Z2=S2
01850   GOSUB 5510
01860   X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1))
01870   X=S1
01871    Y=S2
01890   X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1))
01900   X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1))
01910   FOR I=1 TO N
01911    S1=S1+X1
01912    S2=S2+X2
01940   IF S1<1 OR S1>=9 OR S2<1 OR S2>=9 THEN 2170
01950   S8=S1*24+S2*3-26
01951    IF S8>72 THEN 1990
01970   IF MID(Q$,S8,3)="   " THEN 2070
01980   GOTO 2030
01990   IF S8>144 THEN 2020
02000   IF MID(R$,S8-72,3)="   " THEN 2070
02010   GOTO 2030
02020   IF MID(S$,S8-144,3)="   " THEN 2070
02030   PRINT"WARP ENGINES SHUTDOWN AT SECTOR ";S1;",";S2;" DUE TO BAD NAVAGATION"
02040   S1=S1-X1
02041    S2=S2-X2
02042    GOTO 2080
02070   NEXT I
02080   A$="<*>"
02081    Z1=S1
02082    Z2=S2
02110   GOSUB 5510
02120   E=E-N+5
02121    IF W1<1 THEN 2150
02140   T=T+1
02150   IF T>T0+T9 THEN 3970
02160   GOTO 1260
02170   X=Q1*8+X+X1*N
02171    Y=Q2*8+Y+X2*N
02190   Q1=INT(X/8)
02191    Q2=INT(Y/8)
02192    S1=INT(X-Q1*8)
02193    S2=INT(Y-Q2*8)
02230   IF S1<>0 THEN 2260
02240   Q1=Q1-1
02241    S1=8
02260   IF S2<>0 THEN 2290
02270   Q2=Q2-1
02271    S2=8
02290   T=T+1
02291    E=E-N+5
02310   IF T>T0 + T9 THEN 3970
02320   GOTO 810
02321   REM *** LONG RANGE SENSON SCAN CODE BEGINS HERE
02330   IF D(3)>=0 THEN 2370
02340   PRINT "LONG RANGE SENSORS ARE INOPERABLE"
02360   GOTO 1270
02370   PRINT"LONG RANGE SENSOR SCAN FOR QUADRANT ";Q1;",";Q2
02380   PRINT"-------------------"
02390   FOR I=Q1-1 TO Q1+1
02400   MAT N=ZER
02410   FOR J=Q2-1 TO Q2+1
02420   IF I<1 OR I>8 OR J<1 OR J>8 THEN 2460
02430   N(J-Q2+2)=G(I,J)
02440   IF D(7)<0 THEN 2460
02450   Z(I,J)=G(I,J)
02460   NEXT J
02470   P1$=": ### : ### : ### :"
02471   PRINT USING P1$,N(1),N(2),N(3)
02480   PRINT"-------------------"
02490   NEXT I
02500   GOTO 1270
02501   REM *** PHASER CONTROL CODE BEGINS HERE
02530   IF K3<=0 THEN 3670
02540   IF D(4)>=0 THEN 2570
02560   GOTO 1270
02570   IF D(7)>=0 THEN 2590
02580   PRINT " COMPUTER FAILURE HAMPERS ACCURACY"
02590   PRINT"PHASERS LOCKED ON TARGET.  ENERGY AVAILABLE=";E
02600   INPUT "NUMBER OF UNITS TO FIRE:";X
02620   IF X<=0 THEN 1270
02630   IF E-X<0 THEN 2570
02640   E=E-X
02650   GOSUB 3790
02660   IF D(7)>=0 THEN 2680
02670   X=X*RND
02680   FOR I=1 TO 3
02690   IF K(I,3)<=0 THEN 2770
02700   H=INT((X/K3/FND(0))*(2*RND))
02710   K(I,3)=K(I,3)-H
02720   PRINT H;" UNIT HIT ON KLINGON AT SECTOR ";K(I,1);",";K(I,2);
02721   PRINT"    (";K(I,3);" LEFT)"
02740   IF K(I,3)>0 THEN 2770
02750   GOSUB 3690
02760   IF K9<=0 THEN 4040
02770   NEXT I
02780   IF E<0 THEN 4000
02790   GOTO 1270
02791   REM *** PHOTON TORPEDO CODE BEGINS HERE
02800   IF D(5)>=0 THEN 2830
02810   PRINT "PHOTON TUBES ARE NOT OPERATIONAL"
02820   GOTO 1270
02830   IF P>0 THEN 2860
02840   PRINT "ALL PHOTON TORPEDOES EXPENDED"
02850   GOTO 1270
02860   INPUT "TORPEDO COURSE (1-9):";C1
02880   IF C1=0 THEN 1270
02890   IF C1<1 OR C1>=9 THEN 2860
02900   X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1))
02910   X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1))
02920   X=S1
02921    Y=S2
02922    P=P-1
02950   PRINT "TORPEDO TRACK:"
02960   X=X+X1
02961    Y=Y+X2
02980   IF X<1 OR X>=9 OR Y<1 OR Y>=9 THEN 3420
02990   PRINT"               ";X;",";Y
03010    A$="   "
03011    Z1=X
03012    Z2=Y
03040   GOSUB 5680
03050   IF Z3=0 THEN 3070
03060   GOTO 2960
03070   A$="+++"
03071    Z1=X
03072    Z2=Y
03100   GOSUB 5680
03110   IF Z3=0 THEN 3220
03120   PRINT "*** KLINGON DESTROYED ***"
03130   K3=K3-1
03131    K9=K9-1
03150   IF K9<=0 THEN 4040
03160   FOR I=1 TO 3
03161    IF INT(X)<>K(I,1) THEN 3190
03180   IF INT(Y)=K(I,2)