2006-12-20 (updated 2008-09-20)
1000 DIM D(5),K1(7),K2(7),K3(7),S(7,7),Q(7,7),D$(5)
1010 Q$='.EKB*'
1020 D$(0)='WARP ENGINES'
1030 D$(1)='SHORT RANGE SENSORS'
1040 D$(2)='LONG RANGE SENSORS'
1050 D$(3)='PHASERS'
1060 D$(4)='PHOTON TORPEDOES':D$(5)='GALACTIC RECORDS'
1070 INPUT'PLEASE ENTER A RANDOM NUMBER';E$:I=ASC(E$)
1080 I=I-11*INT(I/11):FOR J=0 TO I:K=RND(1):NEXT:PRINT'WORKING-'
1090 DEF FND(N)=SQR((K1(I)-S1)^2+(K2(I)-S2)^2)
1100 GOSUB 1600:GOSUB 1440:Q1=X:Q2=Y:X=8:Y=1:X1=.2075:Y1=6.28:X2=3.28
1110 Y2=1.8:A=.96:C=100:W=10:K9=0:B9=0:S9=400:T9=3451:GOTO 1130
1120 K=K+(N<X2)+(N<Y2)+(N<.28)+(N<.08)+(N<.03)+(N<.01):K9=K9-K:GOTO 1150
1130 T0=3421:T=T0:E0=4000:E=E0:P0=10:P=P0:FOR I=0 TO 7
1140 FOR J=0 TO 7:K=0:N=RND(Y):IF N<X1 THEN N=N*64:K=(N<Y1)-Y:GOTO 1120
1150 B=(RND(Y)>A):B9=B9-B:Q(I,J)=K*C+B*W-INT(RND(Y)*X+Y):NEXT J,I
1160 IF K9>(T9-T0) THEN T9=T0+K9
1170 IF B9>0 THEN 1190
1180 GOSUB 1440:Q(X,Y)=Q(X,Y)-10:B9=1
1190 PRINT LEFT$('STARTREK ADAPTED BY L.E.COCHRAN 2/29/76',8):K0=K9
1200 PRINT'OBJECTIVE: DESTROY';K9;'KLINGON BATTLE CRUISERS IN';T9-T0;
1210 PRINT'YEARS.':PRINT' THE NUMBER OF STARBASES IS';B9
1220 A=0:IF Q1<0 OR Q1>7 OR Q2<0 OR Q2>7 THEN N=0:S=0:K=0:GOTO 1240
1230 N=ABS(Q(Q1,Q2)):Q(Q1,Q2)=N:S=N-INT(N/10)*10:K=INT(N/100)
1240 B=INT(N/10-K*10):GOSUB 1440:S1=X:S2=Y
1250 FOR I=0 TO 7:FOR J=0 TO 7:S(I,J)=1:NEXT J,I:S(S1,S2)=2
1260 FOR I=0 TO 7:K3(I)=0:X=8:IF I<K THEN GOSUB 1450:S(X,Y)=3:K3(I)=S9
1270 K1(I)=X:K2(I)=Y:NEXT:I=S
1280 IF B>0 THEN GOSUB 1450:S(X,Y)=4
1290 IF I>0 THEN GOSUB 1450:S(X,Y)=5:I=I-1:GOTO 1290
1300 GOSUB 1540:IF A=0 THEN GOSUB 1470
1310 IF E<=0 THEN 2380
1320 I=1:IF D(I)>0 THEN 1610
1330 FOR I=0 TO 7:FOR J=0 TO 7:PRINT MID$(Q$,S(I,J),1);' ';:NEXT J
1340 PRINT' ';:ON I GOTO 1370,1380,1390,1400,1410,1420,1430
1350 PRINT'YEARS =';T9-T
1360 NEXT:GOTO 1640
1370 PRINT'STARDATE=';T:GOTO 1360
1380 PRINT'CONDITION: ';C$:GOTO 1360
1390 PRINT'QUADRANT=';Q1+1;'-';Q2+1:GOTO 1360
1400 PRINT'SECTOR =';S1+1;'-';S2+1:GOTO 1360
1410 PRINT'ENERGY=';E:GOTO 1360
1420 PRINT D$(4);'=';P:GOTO 1360
1430 PRINT'KLINGONS LEFT=';K9:GOTO 1360
1440 X=INT(RND(1)*8):Y=INT(RND(1)*8):RETURN
1450 GOSUB 1440:IF S(X,Y)>1 THEN 1450
1460 RETURN
1470 IF K<1 THEN RETURN
1480 IF C$='DOCKED' THEN PRINT'STARBASE PROTECTS ENTERPRISE':RETURN
1490 FOR I=0 TO 7:IF K3(I)<=0 THEN NEXT:RETURN
1500 H=K3(I)*.4*RND(1):K3(I)=K3(I)-H:H=H/(FND(0)^.4):E=E-H
1510 E$='ENTERPRISE FROM':N=E:GOSUB 1520:NEXT:RETURN
1520 PRINT H;'UNIT HIT ON ';E$;' SECTOR';K1(I)+1;'-';K2(I)+1;
1530 PRINT' (';N;'LEFT)':RETURN
1540 FOR I=S1-1 TO S1+1:FOR J=S2-1 TO S2+1
1550 IF I<0 OR I>7 OR J<0 OR J>7 THEN 1570
1560 IF S(I,J)=4 THEN C$='DOCKED':E=E0:P=P0:GOSUB 1600:RETURN
1570 NEXT J,I:IF K>0 THEN C$='RED':RETURN
1580 IF E<E0*.1 THEN C$='YELLOW':RETURN
1590 C$='GREEN':RETURN
1600 FOR N=0 TO 5:D(N)=0:NEXT:RETURN
1610 PRINT D$(I);' DAMAGED.';
1620 PRINT' ';D(I);'YEARS ESTIMATED FOR REPAIR.':PRINT
1630 IF A=1 THEN RETURN
1640 INPUT'COMMAND';A
1650 IF A<1 OR A>6 THEN 1670
1660 ON A GOTO 1700,1300,2260,2150,1680,2310
1670 FOR I=0 TO 5:PRINT I+1;'= ';D$(I):NEXT:GOTO 1640
1680 IF D(4)>0 THEN PRINT'SPACE CRUD BLOCKING TUBES.';:I=4:GOTO 1620
1690 N=15:IF P<1 THEN PRINT'NO TORPEDOES LEFT':GOTO 1640
1700 IF A=5 THEN PRINT'TORPEDO ';
1710 INPUT 'COURSE (IN DEGREES)';C: IF C=0 THEN C=360
1720 IF C<0 THEN 1640
1730 IF C>360 THEN 1700
1740 C=(((450-C)MOD 360)+45)/45: PRINT 'TRANSLATES TO 'C
1750 IF A=5 THEN P=P-1:PRINT'TRACK:';:GOTO 1910
1760 INPUT'WARP (0-12)';W:IF W<=0 OR W>12 THEN 1700
1770 IF W<=.2 OR D(0)<=0 THEN 1790
1780 I=0:PRINT D$(I);' DAMAGED, MAX IS .2 ';:GOSUB 1620:GOTO 1760
1790 GOSUB 1470:IF E<=0 THEN 2380
1800 IF RND(1)>.25 THEN 1880
1810 X=INT(RND(1)*6):IF RND(1)>.5 THEN 1840
1820 D(X)=D(X)+INT(6-RND(1)*5):PRINT'**SPACE STORM, ';
1830 PRINT D$(X);' DAMAGED**':I=X:GOSUB 1620:D(X)=D(X)+1:GOTO 1880
1840 FOR I=X TO 5:IF D(I)>0 THEN 1870
1850 NEXT
1860 FOR I=0 TO X:IF D(I)<=0 THEN NEXT:GOTO 1880
1870 D(I)=.5:PRINT'**SPOCK USED A NEW REPAIR TECHNIQUE**'
1880 FOR I=0 TO 5:IF D(I)=0 THEN 1900
1890 D(I)=D(I)-1:IF D(I)<=0 THEN D(I)=0:PRINT D$(I);' ARE FIXED!'
1900 NEXT:N=INT(W*8):E=E-N-N+.5:T=T+1:S(S1,S2)=1
1910 Y1=S1+.5:X1=S2+.5:IF T>T9 THEN 2380
1920 Y=(C-1)*.785398:X=COS(Y):Y=-SIN(Y)
1930 FOR I=1 TO N:Y1=Y1+Y:X1=X1+X:Y2=INT(Y1):X2=INT(X1)
1940 IF X2<0 OR X2>7 OR Y2<0 OR Y2>7 THEN 2120
1950 IF A=5 THEN PRINT Y2+1;'-';X2+1,
1960 IF S(Y2,X2)=1 THEN NEXT:GOTO 2070
1970 PRINT:IF A=1 THEN PRINT'BLOCKED BY ';
1980 ON S(Y2,X2)-3 GOTO 2050,2030
1990 PRINT'KLINGON';:IF A=1 THEN 2060
2000 FOR I=0 TO 7:IF Y2<>K1(I) THEN 2020
2010 IF X2=K2(I) THEN K3(I)=0
2020 NEXT:K=K-1:K9=K9-1:GOTO 2080
2030 PRINT'STAR';:IF A=5 THEN S=S-1:GOTO 2080
2040 GOTO 2060:2L29E76C
2050 PRINT'STARBASE';:IF A=5 THEN B=2:GOTO 2080
2060 PRINT' AT SECTOR';Y2+1;'-';X2+1:Y2=INT(Y1-Y):X2=INT(X1-X)
2070 S1=Y2:S2=X2:S(S1,S2)=2:A=2:GOTO 1300
2080 PRINT' DESTROYED!';:IF B=2 THEN B=0:PRINT'. . .GOOD WORK!#';
2090 PRINT:S(Y2,X2)=1:Q(Q1,Q2)=K*100+B*10+S:IF K9<1 THEN 2410
2100 GOSUB 1470:IF E<=0 THEN 2380
2110 GOSUB 1540:GOTO 1640
2120 IF A=5 THEN PRINT'MISSED!':GOTO 2100
2130 Q1=INT(Q1+W*Y+(S1+.5)/8):Q2=INT(Q2+W*X+(S2+.5)/8)
2140 Q1=Q1-(Q1<0)+(Q1>7):Q2=Q2-(Q2<0)+(Q2>7):GOTO 1220
2150 I=3:IF D(I)>0 THEN 1610
2160 INPUT'PHASERS READY: ENERGY UNITS TO FIRE';X:IF X<=0 THEN 1640
2170 IF X>E THEN PRINT'ONLY GOT';E:GOTO 2160
2180 E=E-X:Y=K:FOR I=0 TO 7:IF K3(I)<=0 THEN 2240
2190 H=X/(Y*(FND(0)^.4)):K3(I)=K3(I)-H
2200 E$='KLINGON AT':N=K3(I):GOSUB 1520
2210 IF K3(I)>0 THEN 2240
2220 PRINT'**KLINGON DESTROYED**'
2230 K=K-1:K9=K9-1:S(K1(I),K2(I))=1:Q(Q1,Q2)=Q(Q1,Q2)-100
2240 NEXT:IF K9<1 THEN 2410
2250 GOTO 2100
2260 I=2:IF D(I)>0 THEN 1610
2270 PRINT D$(I);' FOR QUADRANT';Q1+1;'-';Q2+1
2280 FOR I=Q1-1 TO Q1+1:FOR J=Q2-1 TO Q2+1:PRINT' ';
2290 IF I<0 OR I>7 OR J<0 OR J>7 THEN PRINT'***';:GOTO 2360
2300 Q(I,J)=ABS(Q(I,J)):GOTO 2350
2310 I=5:IF D(I)>0 THEN 1610
2320 PRINT'CUMULATIVE GALACTIC MAP FOR STARDATE';T
2330 FOR I=0 TO 7:FOR J=0 TO 7:PRINT' ';
2340 IF Q(I,J)<0 THEN PRINT'***';:GOTO 2360
2350 E$=STR$(Q(I,J)):E$='00'+MID$(E$,2):PRINT RIGHT$(E$,3);
2360 NEXT J:PRINT:NEXT I:GOTO 1640
2370 PRINT:PRINT'IT IS STARDATE';T:RETURN
2380 GOSUB 2370:PRINT'THANKS TO YOUR BUNGLING, THE FEDERATION WILL BE'
2390 PRINT'CONQUERED BY THE REMAINING';K9;'KLINGON CRUISERS!'
2400 PRINT'YOU ARE DEMOTED TO CABIN BOY!':GOTO 2440
2410 GOSUB 2370:PRINT'THE FEDERATION HAS BEEN SAVED!'
2420 PRINT'YOU ARE PROMOTED TO ADMIRAL':PRINT K0;'KLINGONS IN';
2430 PRINT T-T0;'YEARS. RATING=';INT(K0/(T-T0)*1000)
2440 INPUT'TRY AGAIN';E$:IF LEFT$(E$,1)='Y' THEN 1100



source: Source code