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)