📄 strtrk.bas
字号:
func FNA1(x) FNA1=INT(.5+A1+X*COS(C1*CX))endfunc FNB1(X) FNB1=INT(.5+B1+X*SIN(C1*CX))endfunc FND(D) FND=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2)end10 REM EXPANDED APRIL 1977 BY W.A. BURTON20 REM PIRATED JAN. 1978 BY ZOSO'21 DEF FNA1(X)=INT(.5+A1+X*COS(C1*CX))'22 DEF FNB1(X)=INT(.5+B1+X*SIN(C1*CX))30 DIM G(8,8),S(8,8),K(3,3)50 GOSUB 547060 PRINT70 INPUT "What is your security clearance number (1 TO 1000)",T980 E8=T990 IF (T9<1) OR (T9>1000) THEN PRINT AR$;"INVALID!! REENTER!!":GOTO 70100 FOR A=1 TO T9/2110 R9=RND(1):R9=RND(2)120 NEXT A130 INPUT" Enter rank (1=Low,12=High)",R9140 IF (R9<1) OR (R9>12) THEN GOTO 130:RR=R9150 X4=R9:R9=R9+1E-03:W1=W1+1E-03170 PRINT "Command order : STAND BY !"180 PRINT "You are presently being assigned to a mission..."190 PRINT " with a failure factor of "; (RR*20)200 PRINT" Good-bye, Captain..."210 CX=.017453:AR$=" ---> "220 XA=INT(X4*50):AC=(1/(X4+.1))230 IF X4>=9 THEN 3800240 E=3000-XA+100:P=10:S9=200'250 DEF FND(D)=SQR((K(I,1)-S1)^2+(K(I,2)-S2)^2)260 Q1=INT(RND(1)*8+1):Q2=INT(RND(1)*8+1)270 S1=INT(RND(1)*8+1):S2=INT(RND(1)*8+1)280 DATA "Warp Engines","Short Range Sensors","Long Range Sensors"290 DATA "Phasers", "Photon Torpedoes","Shield Control"300 DATA "Damage Control", "Computer","Damage Repair","Communications"310 FOR A=1 TO 10:READ D$(A):NEXT A320 A$(0)=" . ":A$(1)=" E ":A$(2)=" * ":A$(3)=" K ":A$(4)=" B "330 F1=.86:F2=.01:F3=.95:F4=.99:K9=0:B9=K9340 FOR I=1 TO 8:FOR J=1 TO 8:R1=RND(1):R2=RND(1):R3=INT(8*RND(1)+1)350 K3=-(R1>F1-F2*R9)-(R1>F3-F2*R9)-(R1>F4-F2*R9):K9=K9+K3360 B3=-(R2>F3):B9=B9+B3:G(I,J)=100*K3+10*B3+R3:NEXT J: NEXT I370 IF NOT((B9>0) AND (K9>0)) THEN 330380 PRINT "Objective: Destroy ";K9;" Klingons using ";B9;" starbase";390 U=K9:Y=B9400 IF B9=1 THEN PRINT " ";:GOTO 420410 PRINT"s ";420 T9=K9+RND(1)*K9/R9+10-R9:PR=T9/K9:PRINT"in ";T9;" stardays."430 GOSUB 4270440 S3=0:B3=S3:K3=B3:FOR A=1 TO 8:FOR B=1 TO 8:S(A,B)=0:NEXT B: NEXT A450 FOR A=1 TO 3:FOR B=1 TO 3:K(A,B)=0:NEXT B:NEXT A:S(S1,S2)=1460 X=.01*G(Q1,Q2):K3=INT(X):Y=(X-K3)*10:B3=INT(Y)470 S3=G(Q1,Q2)-100*K3-10*B3480 IF K3=0 THEN:FOR A=1 TO 3:FOR B=1 TO 3:K(A,B)=0:NEXT B:NEXT A:GOTO 520:FI490 PRINT AR$;"CONDITION RED !!!!!":FOR A=1 TO K3500 R1=INT(RND(1)*8+1):R2=INT(RND(1)*8+1):IF S(R1,R2)<>0 THEN 500510 S(R1,R2)=3:K(A,1)=R1:K(A,2)=R2:K(A,3)=S9:NEXT A:IF B3=0 THEN 550520 IF B3=0 THEN 550530 R1=INT(RND(1)*8+1):R2=INT(RND(1)*8+1):IF S(R1,R2)<>0 THEN 530540 S(R1,R2)=4550 IF S3=0 THEN 590560 FOR A=1 TO S3570 R1=INT(RND(1)*8+1):R2=INT(RND(1)*8+1):IF S(R1,R2)<>0 THEN 570580 S(R1,R2)=2:NEXT A590 G(Q1,Q2)=INT(G(Q1,Q2))+.5600 PRINT610 PRINT"QUADRANT (";Q1;",";Q2;")"620 PRINT"SECTOR (";S1;",";S2;")"630 IF KP<>0 THEN 4060640 IF DT=1 THEN 2680650 IF S<200*K3 THEN PRINT AR$;"Shield Energy too low":SL=1:A=6:GOTO 750660 A=2: GOTO 750670 PRINT680 PRINT D$(2):FOR A=1 TO 8:FOR B=1 TO 8:PRINT A$(S(A,B));:NEXT B:PRINT:NEXT A690 PRINT:PRINT"Shields ";S;SPC(4);" Energy ";E;SPC(4);" Photons ";P;700 PRINT SPC(4);" Stardays ";T9-T710 GOSUB 3220:INPUT"Command",A720 IF (A>10) OR (A<0) THEN INPUT" ----> COMMAND",A730 IF (A>10) OR (A<0) THEN PRINT"WARNING - PROPER COMMANDS ONLY !! ":GOTO 710740 IF A=1 THEN 780750 IF D(A)>=0 THEN 780760 PRINT AR$;"Captain, we don't have ";D$(A);" anymore."770 IF DT=1 THEN 2680 ELSE 710780 ON A GOTO 820,670,1470,1530,1790,2140,2230,2680,4910,3910790 PRINT:FOR A=1 TO 9:PRINT A;" = ";D$(A):NEXT A800 A=10810 PRINT A;"= ";D$(A):GOTO 710820 INPUT"COURSE",C1:IF (C1<0) OR (C1>359.99) THEN 850830 INPUT"WARP FACTOR",W1840 SL=0:KP=0:GOTO 860850 PRINT AR$"REJECTED ! Course must be in range of o to 359.99 degrees."860 IF NOT(W1>0) THEN 710870 IF (D(1)>=0) OR (W1<=AC) THEN 900880 PRINT AR$;"Warp Engines are damaged, maximum speed = ";AC890 GOTO 820900 TEC=TEC+1:C$="":IF K3>0 THEN GOSUB 2290910 IF E>5*W1 THEN 980920 IF S<1 THEN 2450930 PRINT"Captain, you only have ";E;" units of energy. "940 PRINT"Refuel from your Shield reserves, which have ";S;" units";950 Q9$="NO":INPUT " ",Q9$:IF (Q9$="Y") OR (Q9$="YES") THEN GOSUB 6860960 A=6:IF D(A)<0 THEN 2450970 GOTO 710980 FOR I=1 TO 10:IF D(I)>=0 THEN 1020990 D(I)=D(I)+1:IF D(I)<0 THEN 10201000 IF D(7)<0 THEN 10201010 PRINT"Damage Control report: ";D$(I);" repaired."1020 NEXT I:IF RND(1)>.1 THEN 11301030 IF RND(1)>.1 THEN 11301040 GOTO 11001050 IF RND(1)>R9/10 THEN RETURN1060 R1=INT(RND(1)*8+1):IF D(R1)<0 THEN RETURN1070 D(R1)=D(R1)-10*RND(1)-1:IF D(7)<0 THEN RETURN1080 IF D(7)<0 THEN RETURN1090 PRINT:PRINT"Damage Control report: ";D$(R1);" out.":PRINT:RETURN1100 R1=INT(RND(1)*8+1):IF D(R1)>=0 THEN 11301110 IF D(7)<0 THEN 11301120 PRINT:D(R1)=0:PRINT"Damage Control report: ";D$(R1);" repaired.":PRINT1130 W1=W1*8:A1=8*Q2+S2-9:B1=72-8*Q1-S1:IF W1<1 THEN W1=W1*1.251140 E=E-2*W1:T=T+W1/25:IF T>T9 THEN 25201150 A2=INT(A1+W1*COS(C1*CX)+.5)1160 B2=INT(B1+W1*SIN(C1*CX)+.5)1170 IF NOT((A2<0) OR (A2>63) OR (B2<0) OR (B2>63)) THEN 12001180 PRINT AR$;"Captain, heed Starfleet regulations! ( STAY IN GALAXY ) !!"1190 T=T+W1/24:GOTO 7101200 REM DEF FNA1(X)=INT(.5+A1+X*COS(C1*CX))1210 REM DEF FNB1(X)=INT(.5+B1+X*SIN(C1*CX))1220 FOR X=0 TO INT(W1)1230 IF NOT(Q1=8-INT(FNB1(X)/8)AND Q2=INT(FNA1(X)/8+1)) THEN X=W1:GOTO 14001240 S3=8-FNB1(X)+8*INT(FNB1(X)/8):S4=FNA1(X)+1-8*INT(FNA1(X)/8)1250 IF S(S3,S4)<2 THEN 14001260 S(S1,S2)=0:S1=8-FNB1(X-1)+8*INT(FNB1(X-1)/8)1270 S2=FNA1(X-1)+1-8*INT(FNA1(X-1)/8):S(S1,S2)=1: rem don't know about -1 !!1280 PRINT AR$;"Navigational error :Engines shut down at (";1290 PRINT S1;","S2;")"1300 T=T+(W1/24)1310 PRINT" You lost ";T;" units startime restarting engines."1320 PRINT1330 IF S(S3,S4)<>4 THEN 7101340 PRINT"Shields lowered for refueling"1350 S=0:P=10:C$="D":E=3000-XA+1001360 GOSUB 22901370 FOR R1=1 TO 101380 IF D(R1)>=0 THEN:NEXT R1:GOTO 710:FI1390 D(R1)=D(R1)+(11*RND(1)/R9):NEXT R1:GOTO 7101400 NEXT X:S(S1,S2)=0:S1=8-B2+8*INT(B2/8):S2=A2+1-8*INT(A2/8)1410 Q3=8-INT(B2/8):Q4=INT(A2/8)+11420 IF NOT((Q1=Q3) AND (Q2=Q4)) THEN Q1=Q3:Q2=Q4:GOTO 4401430 S(S1,S2)=1:FOR A=S1-1 TO S1+1:FOR B=S2-1 TO S2+11440 IF (A>8) OR (B>8) OR (A<1) OR (B<1) THEN 14601450 IF S(A,B)=4 THEN 13401460 NEXT B: NEXT A:GOTO 7101470 PRINT1480 FOR A=(Q1-1) TO (Q1+1):FOR B=(Q2-1) TO (Q2+1)1490 IF (A<1) OR (B<1) OR (A>8) OR (B>8) THEN PRINT" ***";:GOTO 15201500 G$ = STR$(G(A, B)): IF G(A, B) < 100 THEN G$="0"+G$1510 IF G(A, B) < 10 THEN G$="0"+G$1515 PRINT " ";LEFT$(G$, 3);1520 G(A, B)=INT(G(A, B))+0.5: NEXT B:PRINT:NEXT A:GOTO 7101530 PRINT1540 IF K3<=0 THEN 22701550 IF D(8)>=0 THEN 15701560 PRINT AR$;" Computer failure hampers accuracy"1570 PRINT"Phasers locked on target. Energy available=";E;1580 PRINT": Number of units to fire:";1590 INPUT X1600 IF E-X<0 THEN PRINT "NOT ENOUGH POWER":GOTO 7101610 T=T+.05:IF T>T9 THEN 25201620 E=E-X1630 IF C$<>"D" THEN GOSUB 22901640 IF D(8)>=0 THEN 16601650 X=X*RND(1)1660 FOR I=1 TO 31670 IF K(I,3)<=0 THEN 17701680 H=(X/FND(0))+SGN(RND(1)-.5)*8*RND(1)1690 K(I,3)=K(I,3)-H1700 PRINT H;" Unit hit on vessel at (";K(I,1);1710 PRINT K(I,2);"), leaving ";K(I,3)1720 IF K(I,3)>0 THEN 17701730 PRINT"Klingon at (";K(I,1);",";K(I,2);1740 PRINT") destroyed":K3=K3-1:K9=K9-1:IF K9=0 THEN 26501750 G(Q1,Q2)=G(Q1,Q2)-100:S(K(I,1),K(I,2))=0:K(I,1)=0:K(I,2)=01760 K(I,3)=01770 NEXT I1780 GOTO 7101790 PRINT1800 IF P>0 THEN 18301810 PRINT AR$;"All Photon Torpedoes expended"1820 GOTO 7101830 INPUT"DIRECTION",C11840 T=T+.05:IF T>T9 THEN 25201850 P=P-1:IF C$<>"D" THEN GOSUB 22901860 A1=8*Q2+S2-9:B1=72-8*Q1-S1:IF C1=90*INT(C1/90) THEN 20901870 REM DEF FNA1(W1)=INT(.5+A1+W1*COS(C1*CX))1880 REM DEF FNB1(W1)=INT(.5+B1+W1*SIN(C1*CX))1890 FOR W1=0 TO 10 STEP .91900 IF W1=0 THEN S3=S1:S4=S2:GOTO 19501910 IF NOT(Q1=8-INT(FNB1(W1)/8)AND Q2=INT(FNA1(W1)/8+1)) THEN 7101920 S3=8-FNB1(W1)+8*INT(FNB1(W1)/8):S4=FNA1(W1)+1-8*INT(FNA1(W1)/8)1930 IF (FNA1(W1)=A2) AND (FNB1(W1)=B2) THEN 20701940 A2=FNA1(W1):B2=FNB1(W1)1950 PRINT"(";S3;",";S4;")";A$(S(S3,S4))1960 ON S(S3,S4)+1 GOTO 2070,2070,2050,1970,20401970 IF RND(1)<(.1*X4) THEN PRINT "Shields deflect Torpedo":GOTO 7101980 PRINT"Klingon destroyed":S(S3,S4)=0:G(Q1,Q2)=G(Q1,Q2)-1001990 K3=K3-1:K9=K9-1:IF K9=0 THEN 26502000 FOR A=1 TO 32010 IF (K(A,1)=S3) AND (K(A,2)=S4) THEN K(A,1)=0:K(A,2)=0:K(A,3)=02020 NEXT A2030 GOTO 7102040 PRINT AR$;"Starbase destroyed":B3=0:B9=B9-1:S(S3,S4)=0:GOTO 20602050 PRINT AR$;"You can't destroy a star":GOTO 7102060 G(Q1,Q2)=G(Q1,Q2)-10:GOTO 7102070 NEXT W12080 GOTO 7102090 FOR W1=0 TO 82100 S3=INT(S1-W1*SIN(C1*CX))2110 S4=INT(S2+W1*COS(C1*CX))2120 IF (S3>8) OR (S4>8) OR (S3<1) OR (S4<1) THEN 7102130 GOTO 19502140 PRINT2150 PRINT"Energy available=";E+S;": Number of units to Shields";2160 INPUT X2170 IF X<0 THEN 7102180 IF E+S-X<0 THEN 21502190 E=E+S-X2200 S=X2210 IF SL=1 THEN 6602220 GOTO 7102230 PRINT2240 PRINT"DEVICE STATE OF REPAIR"2250 FOR R1=1 TO 10:PRINT D$(R1);TAB(21);D(R1):NEXT R12260 IF DT=1 THEN 2680 ELSE 7102270 PRINT"Short Range Sensors report no Klingons in this quadrant"2280 IF DT=1 THEN 2680 ELSE 7102290 IF (C$="D") AND (K3<>0) THEN PRINT"Starbase protects Enterprise" ELSE 23102300 GOTO 7102310 PRINT2320 FOR I=1 TO 32330 IF K(I,3)<=0 THEN 24302340 H=K(I,3)/FND(0)+SGN(RND(1)-.5)*RND(1)*72350 S=S-H:PRINT H;" Unit hit from (";K(I,1);",";2360 PRINT K(I,2);"), leaving ";S2370 IF S<0 THEN 25502380 GOSUB 10502390 IF RND(1)>R9/10 THEN 24302400 R1=INT(8*RND(1)+1):R2=INT(8*RND(1)+1)2410 IF NOT(S(R1,R2)=0)THEN 24002420 S(R1,R2)=3:S(K(I,1),K(I,2))=0:K(I,1)=R1:K(I,2)=R22430 NEXT I2440 RETURN2450 PRINT AR$;" Enterprise dead in space"2460 PRINT2470 CY=1:PRINT:GOTO 25902480 IF K3<=0 THEN 25902490 GOSUB 22902500 GOTO 24802510 PRINT2520 PRINT:PRINT:PRINT:PRINT:PRINT:PRINT AR$;2530 PRINT"It is stardate"T:PRINT2540 GOTO 25902550 PRINT2560 PRINT:PRINT:PRINT:PRINT:PRINT:PRINT AR$;2570 PRINT"Enterprise disabled !!":PRINT:PRINT2580 CY=02590 PRINT"There are ";K9;" Klingons remaining.":IF CY<>0 THEN 35602600 PRINT"You have failed !!":PRINT2610 L=INT(RND(1)*5)2620 ON L+1 GOTO 3440,3470,3490,3510,35402630 PRINT:INPUT"Do you want to try again",X$2640 IF LEFT$(X$,1)="Y" THEN 130 ELSE 54302650 PRINT"The Federation is saved !!"2660 PRINT"You are hereby promoted to Admiral!!!!":PRINT2670 GOTO 26302680 DT=12690 INPUT"Computer on--COMMAND",A: IF A=0 THEN GOTO 27202700 IF (A<0) OR (A>=10) THEN PRINT AR$;" NO SUCH COMMAND !!":GOTO 26902710 ON A GOTO 2900,2950,3000,2840,600,3400,3420,5120,7102720 PRINT"FUNCTIONS AVAILABLE FROM COMPUTER"2730 PRINT" 1 = Galactic Memory Map"2740 PRINT" 2 = General Status Report"2750 PRINT" 3 = Photon Trajectory"2760 PRINT" 4 = New Mission"2770 PRINT" 5 = Present Position"2780 PRINT" 6 = Self-Destruct"2790 PRINT" 7 = Warp-Compass"2800 PRINT" 8 = Mission Progress Report"2810 PRINT" 9 = Exit Computer"2820 GOTO 26802830 PRINT:PRINT"--TEMPORARY MALFUNCTION--":GOTO 7102840 IF XM<0 THEN 28802850 PRINT AR$;"Safety check -- Do you wish to abort mission":INPUT AN$2860 IF LEFT$(AN$,1)<>"Y" THEN 2890 ELSE 1302870 PRINT2880 PRINT"You have not been authorized for new mission !!":PRINT2890 GOTO 26802900 PRINT"QUADRANT CODE MEMORY MAP"2910 FOR A=1 TO 8:FOR B=1 TO 8:IF G(A,B)=INT(G(A,B)) THEN PRINT" ???";:GOTO 29402920 G$ = STR$(G(A, B)): IF G(A, B) < 100 THEN G$="0"+G$2930 IF G(A, B) < 10 THEN G$="0"+G$2935 PRINT " ";LEFT$(G$, 3);2940 NEXT B:PRINT" ":NEXT A:GOTO 26802950 PRINT" STATUS REPORT"2960 PRINT"Number of Klingons left =";K92970 PRINT"Number of stardates left =";T9-T2980 PRINT"Number of Starbases left =";B92990 A=7:GOTO 7503000 IF K3=0 THEN 22703010 IF D(2)<0 THEN A=2:GOTO 7403020 PRINT"COORD","LOWDIR","HIGHDIR","DIST"3030 FOR A=1 TO 47:PRINT"-";:NEXT A3040 PRINT3050 FOR I=0 TO 33060 IF NOT(K(I,3)>0)THEN 31903070 W1=SQR((S1-K(I,1))^2+(S2-K(I,2))^2)3080 IF W1=0 THEN PRINT"--->MALFUNCTION !":GOTO 7103090 ON ERROR GOTO 28303100 C1=1.5708-ATN((K(I,2)-S2)/W1/SQR(1-((K(I,2)-S2)/W1)^2))3110 ON ERROR GOTO 28303120 C1=C1*SGN(S1-K(I,1))/CX3130 C2(I)=C1-(10*RND(1))3140 C3(I)=C1+(10*RND(1))3150 IF C3(I)<0 THEN C3(I)=C3(I)+3603160 IF C2(I)<0 THEN C2(I)=C2(I)+3603170 PRINT "("; K(I,1); ","; K(I,2);3180 PRINT ")", C2(I), C3(I), W13190 NEXT I3200 IF DT=1 THEN 2680 ELSE 7103210 RETURN3220 MR=(T9-T)/K9:DT=03230 XM=((MR-PR)/PR)*1003240 IF KA=1 THEN PRINT TK-T;" stardates left to save Starbase.":GOTO 33303250 IF (RND(1)>.01*R9) OR (B9=0) THEN RETURN3260 KA=1:FOR A=1 TO 8:FOR B=1 TO 83270 IF G(A,B)-100*INT(G(A,B)/100)>9 THEN K1=A:K2=B:IF RND(1)>.5 THEN A=8:B=83280 NEXT B: NEXT A:TK=T+.09*SQR((Q1-K1)^2+(Q2-K2)^2)*(10-R9)3290 TK=TK+13300 PRINT AR$;"!!! Starbase in quadrant (";K1;",";3310 PRINT K2;") is under attack!!"3320 PRINT"You have ";TK-T;" stardates to save it!";:RETURN3330 IF T<TK THEN 33803340 PRINT"Too late!":KA=0:G(K1,K2)=G(K1,K2)-10:B9=B9-13350 IF NOT((Q1=K1) AND (Q2=K2)) THEN RETURN3360 FOR A=1 TO 8:FOR B=1 TO 8:IF S(A,B)=4 THEN S(A,B)=03370 NEXT B: NEXT A:RETURN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -