Super Startrek

The startrek program is one of the games in the famous 101 BASIC Computer Games published in 1978. In the book it is called 'Super Startrek' and the code available in Vintage BASIC. Here it is with a few modifications to match the 32 column display of the Dragon 32.

Use of non-standard procedures and functions:

MS-Basic

10 :'
20 :'******SUPER STAR TREK*******
30 :'
220 PMODE0,1:PCLEAR1:CLS:PRINT:PRINT
221 PRINT"                ,------*------,"
222 PRINT",-------------   '---  ------'"
223 PRINT" '-------- --'      / /"
224 PRINT"     ,---' '-------/ /--,"
225 PRINT"      '----------------'":PRINT
226 PRINT"THE USS ENTERPRISE --- DRAGON 32"
227 :'
260 CLEAR 600
270 Z$="                         "
330 DIM G(8,8),C(9,2),K(3,3),N(3),Z(8,8),D(8)
370 T=INT(RND(0)*20+20)*100:T0=T:T9=25+RND(10):D0=0:E=3000:E0=E
440 P=10:P0=P:S9=200:S=0:B9=0:K9=0:X0$=" IS "
470 DEFFND(D)=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2)
475 DEF FNR(R)=INT(RND(0)*7.98+1.01)
480 REM
490 Q1=FNR(1):Q2=FNR(1):S1=FNR(1):S2=FNR(1)
530 FOR I=1 TO 9:C(I,1)=0:C(I,2)=0:NEXT I
540 C(3,1)=-1:C(2,1)=-1:C(4,1)=-1:C(4,2)=-1:C(5,2)=-1:C(6,2)=-1
600 C(1,2)=1:C(2,2)=1:C(6,1)=1:C(7,1)=1:C(8,1)=1:C(8,2)=1:C(9,2)=1
670 FOR I=1 TO 8:D(I)=0:NEXT I
710 A1$="NAVSRSLRSPHATORSHEDAMCOMXXX"
810 REM
815 REM
820 FOR I=1 TO 8: FOR J=1 TO 8:K3=0:Z(I,J)=0:R1=RND(0)
850 IF R1>.98 THEN K3=3:K9=K9+3:GOTO980
860 IF R1>.95 THEN K3=2:K9=K9+2:GOTO980
870 IF R1>.80 THEN K3=1:K9=K9+1
980 B3=0:IF RND(0)>.96 THEN B3=1:B9=B9+1
1040 G(I,J)=K3*100+B3*10+FNR(1):NEXT J,I:IF K9>T9 THEN T9=K9+1
1100 IF B9<>0 THEN 1200
1150 IF G(Q1,Q2)<200 THEN G(Q1,Q2)=G(Q1,Q2)+100:K9=K9+1
1160 B9=1:G(Q1,Q2)=G(Q1,Q2)+10:Q1=FNR(1):Q2=FNR(1)
1200 K7=K9:IFB9<>1THENX$="S":X0$=" ARE "
1210 CLS:PRINT"         SUPERSTARTREK":PRINT:PRINT
1230 PRINT"YOUR ORDERS ARE AS FOLLOWS:"
1240 PRINT"  DESTROY THE";K9;"KLINGON":PRINT"WARSHIPS WHICH HAVE INVADED THE"
1250 PRINT"GALAXY BEFORE THEY CAN ATTACK":PRINT"FEDERATION HEADQUARTERS ON STAR-";
1260 PRINT"DATE";T0+T9;"THIS GIVES YOU";T9"DAYS";:PRINT"THERE";X0$;
1270 PRINTB9;"STARBASE";X$;" IN THE":PRINT"GALAXY FOR RESUPPLYING YOUR SHIP"
1280 PRINT:PRINT"HIT ANY KEY WHEN READY TO ACCEPTCOMMAND"
1300 I=RND(1):IF INKEY$="" THEN 1300
1310 REM
1320 Z4=Q1:Z5=Q2:K3=0:B3=0:S3=0:G5=0:D4=.5*RND(0):Z(Q1,Q2)=G(Q1,Q2)
1390 IF Q1<1 OR Q1>8 ORQ2<1 OR Q2>8 THEN 1600
1430 GOSUB9030:PRINT:IF T0<>T THEN 1490
1460 CLS:PRINT"YOUR MISSION BEGINS WITH YOUR   STARSHIP LOCATED";
1470 PRINT" IN THE GALACTIC QUADRANT, '";G2$;"'.":GOTO1500
1490 PRINT"NOW ENTERING ";G2$:PRINT" QUADRANT..."
1500 PRINT:K3=INT(G(Q1,Q2)*.01):B3=INT(G(Q1,Q2)*.1)-10*K3
1540 S3=G(Q1,Q2)-100*K3-10*B3:IF K3=0 THEN 1590
1560 PRINT"COMBAT AREA        CONDITION RED";:IF S>200 THEN 1590
1580 PRINT"    shields";CHR$(128);"dangerously";CHR$(128);"low"
1590 FOR I=1 TO 3:K(I,1)=0:K(I,2)=0:NEXT I
1600 FOR I =1 TO 3:K(I,3)=0:NEXT I:Q$=Z$+Z$+Z$+Z$+Z$+Z$+Z$+LEFT$(Z$,17)
1660 REM
1670 REM
1680 A$="<*>":Z1=S1:Z2=S2:GOSUB 8670:IF K3<1 THEN1820
1720 FOR I=1 TO K3:GOSUB 8590:A$="+K+":Z1=R1:Z2=R2
1780 GOSUB 8670:K(I,1)=R1:K(I,2)=R2:K(I,3)=S9*(.5+RND(0)):NEXTI
1820 IF B3<1 THEN 1910
1880 GOSUB 8590 :A$=">!<":Z1=R1:B4=R1:Z2=R2:B5=R2:GOSUB8670
1910 FOR I =1 TO S3:GOSUB 8590:A$=" * ":Z1=R1:Z2=R2:GOSUB 8670:NEXT I
1980 GOSUB 6430
1990 IF S+E>10 THEN IF E>10 OR D(7)=0 THEN2060
2020 PRINT:PRINT"** FATAL ERROR **  YOU'VE JUST  STRANDED YOUR SHIP IN SPACE"
2030 PRINT"YOU HAVE INSUFFICIENT MANEUVER- ING ENERGY, AND SHIELD CONTROL"
2040 PRINT"IS PRESENTLY INCAPABLE OF CROSS-"
2050 PRINT"CIRCUITING TO ENGINE ROOM!!":GOTO 6220
2060 INPUT"COMMAND";A$
2080 FOR I=1 TO 9:IF LEFT$(A$,3)<>MID$(A1$,3*I-2,3) THEN 2160
2140 ON I GOTO2300,1980,4000,4260,4700,5530,5690,7290,6270
2160 NEXT I:PRINT"ENTER ONE OF THE FOLLOWING:"
2180 PRINT" NAV  (TO SET COURSE)"
2190 PRINT" SRS  (SHORT RANGE SENSOR SCAN)"
2200 PRINT" LRS  (LONG RANGE SENSOR SCAN)"
2210 PRINT" PHA  (TO FIRE PHASERS)"
2220 PRINT" TOR  (TO FIRE PHOTON TORPEDOES)";
2230 PRINT" SHE  (RAISE OR LOWER SHEILDS)"
2240 PRINT" DAM  (DAMAGE CONTROL REPORTS)"
2250 PRINT" COM  (CALL ON LIBRARY-COMPUTER)";
2260 PRINT" XXX  (TO RESIGN YOUR COMMAND)":PRINT:GOTO1990
2290 REM ^^^^^^^^^^^
2300 INPUT"COURSE (0-9)";C1:IF C1=9 THEN C1=1
2310 IF C1>=1ANDC1<9 THEN 2350
2330 PRINT"  LT. SULU REPORTS:":PRINT"INCORRECT COURSE DATA, SIR!":GOTO1990
2350 X$="8":IFD(1)<0 THENX$="0.2"
2360 PRINT"WARP FACTOR (0-"X$;")";:INPUTW1:IFD(1)<0 AND W1>.2THEN2470
2380 IFW1>0ANDW1<=8THEN 2490
2390 IFW1=0THEN1990
2420 PRINT"CHIEF ENGINEER SCOTT REPORTS:":PRINT"'THE ENGINES WON'T TAKE";
2430 PRINT" WARP";W1;"!":GOTO1990
2470 PRINT"WARP ENGINES ARE DAMAGED.       MAXSIMUM SPEED= 0.2":GOTO 1990
2490 N=INT(W1*8+.5):IFE-N>=0THEN2590
2500 PRINT"ENGINEERING REPORTS:":PRINT"INSUFFICIENT ENERGY AVAIABLE"
2510 PRINT"FOR MANEUVERING AT WARP";W1;"!"
2530 IFS<N-EORD(7)<0THEN1990
2550 PRINT"DEFLECTOR CONTROL ROOM ACKNOW-":PRINT"LEDGES";S;"UNITS OF ENERGY"
2560 PRINT"PRESENTLY DEPLOYED TO SHIELDS."
2570 GOTO1990
2580 REM
2590 FORI=1TOK3:IFK(I,3)=0THEN2700
2610 A$="   ":Z1=K(I,1):Z2=K(I,2):GOSUB8670:GOSUB8590
2660 K(I,1) =Z1:K(I,2)=Z2:A$="+K+":GOSUB8670
2700 NEXT I:GOSUB6000:D1=0:D6=W1:IFW1>=1 THEND6=1
2770 FORI=1 TO8:IFD(I)>=0THEN 2880
2790 D(I)=D(I)+D6:IFD(I)>-.1ANDD(I)<0THEND(I)=-.1:GOTO2880
2800 IFD(I)<0THEN2880
2810 IFD1<>1THEND1=1:PRINT"DAMAGE CONTROL REPORT: ";
2840 PRINTTAB(8);:R1=I:GOSUB8790:PRINTG2$;" REPAIR COMPLETED."
2880 NEXTI:IFRND(0)>.2THEN3070
2910 R1=FNR(1):IFRND(0)>.6THEN3000
2930 D(R1)=D(R1)-(RND(0)*5+1):PRINT"DAMAGE CONTROL REPORT: "
2960 GOSUB8790:PRINTG2$;" DAMAGED":PRINT:GOTO3070
3000 D(R1)=D(R1)+RND(0)*3+1:PRINT"DAMAGE CONTROL REPORT: ";
3030 GOSUB8790:PRINTG2$;" STATE OF REPAIR IMPROVED":PRINT
3060 REM
3070 A$="   ":Z1=INT(S1):Z2=INT(S2):GOSUB8670
3110 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)):X=S1:Y=S2
3140 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)):Q4=Q1:Q5=Q2
3170 FORI=1TON:S1=S1+X1:S2=S2+X2:IFS1<1ORS1>=9ORS2<1ORS2>=9THEN3500
3240 S8=INT(S1)*24+INT(S2)*3-26:IFMID$(Q$,S8,2)="  "THEN3360
3320 S1=INT(S1-X1):S2=INT(S2-X2):PRINT"WARP ENGINES SHUT DOWN AT ";
3350 PRINT"SECTOR";S1;",";S2;"DUE TO BAD NAVIGATION":GOTO3370
3360 NEXTI:S1=INT(S1):S2=INT(S2)
3370 A$="<*>":Z1=INT(S1):Z2=INT(S2):GOSUB8670:GOSUB3910:T8=1
3430 IFW1<1THENT8=.1*INT(10*W1)
3450 T=T+T8:IFT>(T0+T9)THEN6220
3470 REM
3480 GOTO1980
3490 REM
3500 X=8*Q1+X+N*X1:Y=8*Q2+Y+N*X2:Q1=INT(X/8):Q2=INT(Y/8):S1=INT(X-Q1*8)
3550 S2=INT(Y-Q2*8):IFS1=0THENQ1=Q1-1:S1=8
3590 IFS2=0THENQ2=Q2-1:S2=8
3620 X5=0:IFQ1<1THENX5=1:Q1=1:S1=1
3670 IFQ1>8THENX5=1:Q1=8:S1=8
3710 IFQ2<1THENX5=1:Q2=1:S2=1
3750 IFQ2>8THENX5=1:Q2=8:S2=8
3790 IFX5=0THEN3860
3800 PRINT"LT. UHURA REPORTS MESSAGE FROM  STARFLEET COMMAND:"
3810 PRINT"  'PERMISSION TO ATTEMPT CROSSING OF GALACTIC PERIMETER"
3820 PRINT"  IS HEREBY *DENIED*. SHUT DOWN YOUR ENGINES."
3830 PRINT"CHIEF ENGINEER SCOTT REPORTS:   'WARP ENGINES SHUT DOWN"
3840 PRINT"AT SECTOR";S1;",";S2:PRINT"OF QUADRANT";Q1","Q2".'"
3841 IF INKEY$="" THEN 3841 :ELSE SOUND 175,1
3850 IF T>(T0+T9)THEN6220
3860 IF(Q1*8+Q2)=(Q4*8+Q5)THEN GOTO3370
3870 T=T+1:GOSUB3910:GOTO1320
3900 REM
3910 E=E-N-10:IFE>=0THEN RETURN
3930 PRINT"SHIELD CONTROL SUPPLIES ENERGY  TO COMPLETE THE MANEUVER."
3940 S=S+E:E=0:IFS<=0THENS=0
3980 RETURN
3990 REM
4000 IFD(3)<0THENPRINT"SENSORS ARE INOPERABLE":GOTO1990
4030 PRINT"LONG RANGE SCAN FOR QUADRANT":PRINTQ1;","Q2
4040 O1$="-------------------":PRINTO1$
4060 FORI=Q1-1TOQ1+1:N(1)=-1:N(2)=-2:N(3)=-3:FORJ=Q2-1TOQ2+1
4120 IFI>0ANDI<9ANDJ>0ANDJ<9THENN(J-Q2+2)=G(I,J):Z(I,J)=G(I,J)
4180 NEXTJ:FORL=1TO3:PRINT": ";:IFN(L)<0THENPRINT"*** ";:GOTO4230
4210 PRINTRIGHT$(STR$(N(L)+1000),3);" ";
4230 NEXTL:PRINT":":PRINTO1$:NEXTI:GOTO1990
4250 REM
4260 IFD(4)<0THENPRINT"PHASERS INOPERATIVE":GOTO 1990
4265 IF K3>0 THEN4330
4270 PRINT"SCIENCE OFFICER SPOCK REPORTS:":PRINT"'SENSORS SHOW NO ENEMY SHIPS"
4280 PRINT"IN THIS QUADRANT'":GOTO 1990
4330 IF D(8)<0 THENPRINT"COMPUTER FAILURE HAMPERS ACCURACY"
4350 PRINT"PHASERS LOCKED ON TARGET;  "
4360 PRINT"ENERGY AVAILABLE =";E;"UNITS"
4370 INPUT"NUMBER OF UNITS TO FIRE";X:IF X<=0THEN1990
4400 IF E-X<0THEN 4360
4410 E=E-X:IFD(7)<0THEN X=X*RND(0)
4450 H1=INT(X/K3):FOR I=1 TO 3:IFK(I,3)<=0THEN 4670
4480 H=INT((H1/FND(0))*(RND(0)+2)):IF H>.15*K(I,3)THEN 4530
4500 PRINT"SENSORS SHOW NO DAMMAGE TO ENEMYAT";K(I,1)","K(I,2):GOTO4670
4530 K(I,3)=K(I,3)-H:PRINTH"UNIT HIT ON KLINGON":PRINT"AT SECTOR";K(I,1)","K(I,2)
4550 IF K(I,3)<=0THENPRINT"***** KLINGON DESTROYED *****":GOTO4580
4560 PRINT"(SENSORS SHOW"K(I,3)"UNITS REMAINING)":GOTO4670
4580 K3=K3-1:K9=K9-1:Z1=K(I,1):Z2=K(I,2):A$="   ":GOSUB8670
4650 K(I,3)=0:G(Q1,Q2)=G(Q1,Q2)-100:Z(Q1,Q2)=G(Q1,Q2):IFK9<=0THEN6370
4670 IF INKEY$="" THEN 4670 :ELSE NEXTI:GOSUB6000:GOTO1990
4690 REM
4700 IFP<=0 THENPRINT"ALL TORPEDOES EXPENDED":GOTO 1990
4730 IF D(5)<0 THENPRINT"PHOTON TUBES ARE NOT OPERATIONAL":GOTO 1990
4760 INPUT"PHOTON TORPEDO COURSE(1-9)";C1:IF C1=9THEN C1=1
4780 IFC1>=1 AND C1<9 THEN 4850
4790 PRINT"ENSIGN CHEKOV REPORTS, INCORRECTCOURSE DATA, SIR!"
4800 GOTO1990
4850 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1-INT(C1)):E=E-2:P=P-1
4860 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1-INT(C1)):X=S1:Y=S2
4910 PRINT"TORPEDO TRACK:"
4920 X=X+X1:Y=Y+X2:X3=INT(X+.5):Y3=INT(Y+.5)
4960 IF X3<1 OR X3>8 ORY3<1OR Y3>8THEN 5490
5000 PRINT"            "X3","Y3:A$="   ":Z1=X:Z2=Y:GOSUB8830
5050 IF Z3<>0 THEN 4920
5060 A$="+K+":Z1=X:Z2=Y:GOSUB8830:IFZ3=0THEN 5210
5110 PRINT"*** KLINGON DESTROYED ***":K3=K3-1:K9=K9-1:IF K9<=0THEN6370
5150 FORI=1 TO3:IF X3=K(I,1) ANDY3=K(I,2)THEN 5190
5180 NEXT I:I=3
5190 K(I,3)=0:GOTO5430
5210 A$=" * ":Z1=X:Z2=Y:GOSUB8830:IFZ3=0 THEN5280
5260 PRINT"STAR AT"X3","Y3"ABSORBED TORPEDOENERGY.":GOSUB6000:GOTO1990
5280 A$=">!<":Z1=X:Z2=Y:GOSUB8830:IFZ3=0THEN4760
5330 PRINT"*** STARBASE DESTROYED ***":B3=B3-1:B9=B9-1
5360 IF B9>0 OR K9>T-T0-T9 THEN5400
5370 PRINT"THAT DOES IT, CAPTAIN!!         YOU ARE HEREBY RELIEVED OF      COMMAND"
5380 PRINT"AND SENTENCED TO 99 STARDATES ATHARD LABOR ON CYGNUS 12!!"
5390 GOTO 6270
5400 PRINT"STARFLEET COMMAND REVIEWING YOURRECORD TO CONSIDER"
5410 PRINT"COURT MARTIAL!":D0=0
5430 Z1=X:Z2=Y:A$="   ":GOSUB8670
5470 G(Q1,Q2)=K3*100+B3*10+S3:Z(Q1,Q2)=G(Q1,Q2):GOSUB6000:GOTO1990
5490 PRINT"TORPEDO MISSED":GOSUB6000:GOTO1990
5520 REM SHIELD
5530 IFD(7)<0THENPRINT"SHIELD CONTROL INOPERABLE":GOTO1990
5560 PRINT"ENERGY AVAIABLE =";E+S:INPUT"NUMBER OF UNITS TO SHIELDS";X
5580 IF X<0 OR S=X THENPRINT"<SHIELDS UNCHANGED>":GOTO1990
5590 IF X<=E+S THEN5630
5600 PRINT"SHIELD CONTROL REPORTS:":PRINT"' THIS IS NOT THE FEDERATION    TREASURY.'"
5610 PRINT"<SHIELDS UNCHANGED>":GOTO1990
5630 E=E+S-X:S=X:PRINT"DEFLECTOR CONTROL ROOM REPORT:"
5660 PRINT"  'SHIELDS NOW AT";INT(S);"UNITS PER YOUR COMMAND.'":GOTO1990
5680 REM
5690 IF D(6)>=0 THEN 5910
5700 PRINT"DAMAGE CONTROL REPORT NOT       AVAILABLE":IF D0=0 THEN 1990
5720 D3=0:FORI=1 TO 8:IF D(I)<0THEN D3=D3+.1
5760 NEXT I:IF D3=0THEN 1990
5780 PRINT:D3=D3+D4:IFD3>=1 THEND3=.9
5810 PRINT"TECNICIANS STANDING BY TO EFFECTREPAIRS TO YOUR SHIP;"
5820 PRINT"ESTIMATED TIME TO REPAIR:";.01*INT(100*D3);"STARDATES"
5840 INPUT"WILL YOU AUTHORIZE THE REPAIR ORDER (Y/N)";A$
5860 IF A$<>"Y" THEN 1990
5870 FOR I=1 TO 8:IF D(I)<0 THEN D(I)=0
5890 NEXT I:T=T+D3+.1
5910 PRINT:PRINT"DEVICE           STATE OF REPAIR":FOR R1=1 TO 8
5920 GOSUB 8790:PRINTG2$;LEFT$(Z$,23-LEN(G2$));INT(D(R1)*100)*.01
5950 NEXTR1:PRINT:IFD0<>0THEN5720
5980 GOTO 1990
6000 IFK3<=0THENRETURN
6010 IF D0<>0 THENPRINT"STAR BASE SHIELDS PROTECT THE ENTERPRISE":RETURN
6040 FORI=1TO3:IFK(I,3)<=0 THEN6200
6060 H=INT((K(I,3)/FND(1))*(2+RND(0))):S=S-H:K(I,3)=K(I,3)/(3+RND(0))
6080 PRINTH;"UNIT HIT ON ENTERPRISE FROM SECTOR";K(I,1);",";K(I,2)
6090 IFS<=0THEN 6240
6100 PRINT"<SHIELDS DOWN TO";S"UNITS>":IF H<20 THEN 6200
6120 IF RND(0)>.6 OR H/S<=.02 THEN 6200
6140 R1=FNR(1):D(R1)=D(R1)-H/S-.5*RND(0):GOSUB8790
6170 PRINT"DAMAGE CONTROL REPORT:":PRINTG2$"DAMAGED BY THE HIT"
6200 NEXT I:RETURN
6210 REM 
6220 PRINT"IT IS STARDATE"T:GOTO6270
6240 PRINT"THE ENTERPRISE HAS BEEN         DESTROYED. THE FEDERATION WILL  BE CONQUERED":GOTO6220
6270 PRINT"THERE WERE"K9"KLINGON BATTLE":PRINT"CRUISERS LEFT AT THE END OF YOURMISSION."
6290 PRINT:PRINT:IFB9=0THEN6360
6310 PRINT"THE FEDERATION IS IN NEED OF A  NEW STARSHIP COMMANDER"
6320 PRINT"FOR A SIMILAR MISSION - IF THEREIS A VOLUNTEER,"
6330 INPUT"LET HIM STEP FORWARD AND ENTER  'AYE'";A$:IF A$="AYE"THEN10
6360 END
6370 PRINT"CONGRATULATION, CAPTAIN!        THE LAST KLINGON BATTLE CRUISER"
6380 PRINT"MENACING THE FEDERATION HAS BEEN DESTOYED.":PRINT
6400 PRINT"YOUR EFFICIENCY RATING IS";1000*(K7/(T-T0))^2:GOTO6290
6420 REM ^^^^^^
6430 FOR I=S1-1 TO S1+1:FOR J=S2-1 TO S2+1
6450 IF INT (I+.5)<1 OR INT(I+.5)>8 OR INT(J+.5)>8 OR INT(J+.5)<1 THEN 6540
6490 A$=">!<":Z1=I:Z2=J:GOSUB8830:IF Z3=1 THEN 6580
6540 NEXT J:NEXTI:D0=0:GOTO6650
6580 D0=1:C$="DOCKED":E=E0:P=P0
6620 PRINT"SHIELDS DROPPED FOR DOCKIING":S=0:GOTO6720
6650 IF K3>0 THEN C$="*red*":GOTO6720
6660 C$="GREEN":IF E<E0*.1THENC$="YELLOW"
6720 IF D(2)>=0 THEN6770
6730 PRINT:PRINT"* SHORT RANGE SENSORS ARE OUT * ":RETURN
6770 O1$="--------------------------------":PRINTO1$;:FOR I=1 TO 8
6820 FOR J=(I-1)*24+1 TO(I-1)*24+22 STEP3:PRINT" ";MID$(Q$,J,3);:NEXT J
6830 NEXT I:PRINTO1$;
6831 IF INKEY$="" THEN 6831
6840 SOUND 200,1
6850 PRINT"     STARDATE          ";INT(T*10)*.1
6900 PRINT"     CONDITION          ";C$
6960 PRINT"     QUADRANT          "Q1","Q2
7020 PRINT"     SECTOR            "S1","S2
7070 PRINT"     PHOTON TORPEDOES  "INT(P)
7120 PRINT"     TOTAL ENERGY      "INT(E+S)
7180 PRINT"     SHIELDS           "INT(S)
7240 PRINT"     KLINGONS REMAINING"INT(K9)
7260 RETURN
7280 REM
7290 IF D(8)<0THENPRINT"COMPUTER DISABLED":GOTO1990
7320 INPUT"COMPUTER ACTIVE AND AVAITING    COMMAND";A:IFA<0THEN1990
7350 PRINT:H8=1:ON A+1 GOTO7540,7900,8070,8500,8150,7400
7370 PRINT"FUNCTIONS AVAILABLE FROM        LIBRARY-COMPUTER:"
7371 PRINT"  0 = CUMULTIVE GALACTIC RECORD"
7372 PRINT"  1 = STATUS REPORT"
7374 PRINT"  2 = PHOTON TORPEDO DATA"
7376 PRINT"  3 = STARBASE NAV DATA"
7378 PRINT"  4 = DIRECTION CALKULATOR"
7380 PRINT"  5 = GALAXY 'REGION NAME' MAP":PRINT:GOTO7320
7390 REM
7400 H8=0:G5=1:PRINT"           THE GALAXY":GOTO7550
7530 REM
7540 REM
7542 REM
7543 CLS
7544 PRINT"COMPUTER RECORD OF GALAXY";Q1","Q2;
7546 REM
7550 REM
7560 O1$="--- --- --- --- --- --- --- ---"
7570 FOR I=1 TO 8:IF H8=0THEN 7740
7630 FOR J=1 TO 8:IFZ(I,J)=0 THEN PRINT"***";:GOTO7719
7700 PRINT RIGHT$(STR$(Z(I,J)+1000),3);
7719 IF J=8 AND I=8 THEN 7720 :ELSEPRINT" ";
7720 NEXT J:GOTO7850
7740 Z4=I:Z5=1:GOSUB9030:J0=INT(8-.5*LEN(G2$)):PRINTTAB(J0);G2$;
7800 Z5=5:GOSUB 9030:J0=INT(24-.5*LEN(G2$)):PRINTTAB(J0);G2$;:IF G2$<>"SPICA" THEN PRINT
7850 IF I=8THEN 7851 :ELSEPRINTO1$
7851 NEXT I
7852 IF INKEY$="" THEN 7852 :ELSEPRINT:GOTO 1990
7890 REM
7900 PRINT"  STATUS REPORT:":X$="":IF K9>1 THENX$="S"
7940 PRINT"KLINGON"X$" LEFT: ";K9
7960 PRINT"MISSION MUST BE COMPLETED IN";.1*INT((T0+T9-T)*10)"STARDATES"
7970 X$="S":IFB9<2 THENX$="":IF B9<1 THEN8010
7980 PRINT"THE FEDERATION IS MAINTAINING"B9:PRINT"STARBASE"X$" IN THE GALAXY"
7981 IF INKEY$="" THEN 7981
7990 GOTO5690
8010 PRINT"YOUR STUPIDITY HAS LEFT ON YOUR OWN IN"
8020 PRINT"THE GALAXY -- YOU HAVE NO       STARBASES LEFT!"
8021 IF INKEY$="" THEN 8021 :ELSE5690
8060 REM
8070 IF K3<=0 THEN4270
8080 X$="":IF K3>1THENX$="S"
8090 PRINT"FROM ENTERPRISE TO KLINGON      BATTLE CRUISER"X$
8100 H8=0:FOR I=1 TO3:IFK(I,3)<=0THEN8480
8110 W1=K(I,1):X=K(I,2)
8120 C=S1:A=S2:GOTO8220
8150 PRINT"DIRECTION/DISTANCE CALCULATOR:"
8160 PRINT"YOU ARE AT QUADRANT "Q1","Q2:PRINT"            SECTOR   "S1","S2
8170 PRINT"PLEASE ENTER":INPUT" INITIAL COORDINATES (X,Y)";C1,A
8200 INPUT" FINAL COORDINATES (X,Y)";W1,X
8220 X=X-A:A=C1-W1:IFX<0 THEN 8350
8250 IF A<0THEN8410
8260 IF X>0THEN8280
8270 IFA=0THEN C1=5:GOTO 8290
8280 C1=1
8290 IF ABS(A)<=ABS(X)THEN 8330
8310 PRINT"DIRECTION =";C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A)):GOTO8460
8330 PRINT"DIRECTION =";C1+(ABS(A)/ABS(X)):GOTO8460
8350 IF A>0THEN C1=3:GOTO8420
8360 IF X<>0 THEN C1=5:GOTO 8290
8410 C1=7
8420 IF ABS(A)>=ABS(X)THEN8450
8430 PRINT"DIRECTION ="C1+(((ABS(X)-ABS(A))+ABS(X))/ABS(X)):GOTO 8460
8450 PRINT"DIRECTION ="C1+(ABS(X)/ABS(A))
8460 PRINT"DISTANCE ="SQR(X^2+A^2):IFH8=1THEN1990
8480 NEXT I:GOTO1990
8500 IF B3<>0THEN PRINT"  FROM ENTERPRISE TO STARBASE:  ":W1=B4:X=B5:GOTO8120
8510 PRINT"MR. SPOCK REPORTS: SENSORS SHOW NO STARBASES IN THIS QUADRANT.'"
8520 GOTO 1990
8590 R1 =FNR(1):R2=FNR(1):A$="   ":Z1=R1:Z2=R2:GOSUB8830:IF Z3=0 THEN 8590
8600 RETURN
8660 REM
8670 S8=INT(Z2-.5)*3+INT(Z1-.5)*24+1
8675 IFLEN(A$)<>3THENPRINT"error":STOP
8680 IF S8=1 THEN Q$=A$+RIGHT$(Q$,189):RETURN
8690 IF S8=190 THEN Q$=LEFT$(Q$,189)+A$:RETURN
8700 Q$=LEFT$(Q$,S8-1)+A$+RIGHT$(Q$,190-S8):RETURN
8790 ON R1 GOTO8792,8794,8796,8798,8800,8802,8804,8806
8792 G2$="WARP ENGINES":RETURN
8794 G2$="SHORT RANGE SENSORS":RETURN
8796 G2$="LONG RANGE SENSORS":RETURN
8798 G2$="PHASER CONTROL":RETURN
8800 G2$="PHOTON TUBES":RETURN
8802 G2$="DAMAGE CONTROL":RETURN
8804 G2$="SHIELD CONTROL":RETURN
8806 G2$="LIBRARY-COMPUTER":RETURN
8820 REM
8830 Z1=INT(Z1+.5):Z2=INT(Z2+.5):S8=(Z2-1)*3+(Z1-1)*24+1:Z3=0
8890 IF MID$(Q$,S8,3)<>A$ THEN RETURN
8900 Z3=1:RETURN
9030 IF Z5<=4 THEN ON Z4 GOTO9040,9050,9060,9070,9080,9090,9100,9110
9035 GOTO9120
9040 G2$="ANTARES":GOTO 9210
9050 G2$="RIGEL":GOTO 9210
9060 G2$="PROCYON":GOTO 9210
9070 G2$="VEGA":GOTO 9210
9080 G2$="CANOPUS":GOTO 9210
9090 G2$="ALTAIR":GOTO 9210
9100 G2$="SAGITTARIUS":GOTO 9210
9110 G2$="POLLUX":GOTO 9210
9120 ON Z4 GOTO 9130,9140,9150,9160,9170,9180,9190,9200
9130 G2$="SIRIUS":GOTO 9210
9140 G2$="DENEB":GOTO 9210
9150 G2$="CAPELLA":GOTO 9210
9160 G2$="BETELGEUSE":GOTO 9210
9170 G2$="ALDEBARAN":GOTO 9210
9180 G2$="REGULUS":GOTO 9210
9190 G2$="ARCTURUS":GOTO 9210
9200 G2$="SPICA"
9210 IF G5<>1 THEN ONZ5 GOTO 9230,9240,9250,9260,9230,9240,9250,9260
9220 RETURN
9230 G2$=G2$+" I":RETURN
9240 G2$=G2$+" II":RETURN
9250 G2$=G2$+" III":RETURN
9260 G2$=G2$+" IV":RETURN


Sidst opdateret: 2018/10/13
Website vedligeholdt af Søren Roug