10 REM ** SUBMARINE SEARCH ** 14 REM - RANDOM NUMBER OFFSET - 15 INPUT"ENTER NAVEL TIME(E.G. 10:42=2242)";T 16 T1=INT(T/100):T2=(T/100-T1)*100 17 FOR I=1 TO T2:I1=RND(1):NEXT I 20 S=INT(20*RND(1))+10 25 DIM SX(40),SY(40),C(40),K(40) 30 PRINT" ***** MISSION ORDERS *****" 40 PRINT"SEEK OUT AND DESTROY ALL U-BOATS IN YOUR SECTOR" 50 PRINT"INTELLIGENCE REPORTS APPROXAMATLY" 60 PRINT S+(INT(10*RND(1))-5);"U-BOATS WORKING YOUR SECTOR" 70 PRINT,"GOOD LUCK!" 80 REM -SET UP SUBS- 90 FOR I=1 TO S 100 SX(I)=INT(999*RND(1))+1:SY(I)=INT(999*RND(1))+1 105 C(I)=INT(8*RND(1))+1:K(I)=INT(10*RND(1))+1 110 NEXT I 120 REM -SET UP SHIP VAIRAIBLES- 130 X=INT(999*RND(1))+1:Y=INT(999*RND(1))+1 135 PRINT"YOUR COORIDENATES ARE";X","Y 140 F=1E+06:K=0:H=0:D=S*2 147 INPUT"ENTER MONTH,DATE,YEAR";MM,DD,YY 148 IF DD<1 OR DD>31 OR MM<1 OR MM>12 GOTO 147 150 PRINT"THE SECTOR IS 1000 NAUTICAL MILES SQUARE" 160 PRINT"MAXIMUM SPEED:20 KNOTTS (20 NAUTICAL MILES PER HOUR) 170 PRINT"YOU WILL GET A STATUS UPDATE EVERY MILE" 180 PRINT"COORDINATE 0,0 IS FAR NORTHWEST, 1000,1000 IS FAR SOUTHEAST" 190 PRINT"HEADINGS":PRINT" 1-EAST":PRINT" 2-NORTHEAST":PRINT" 3-NORTH" 200 PRINT" 4-NORTHWEST":PRINT" 5-WEST":PRINT" 6-SOUTHWEST" 210 PRINT" 7-SOUTH":PRINT" 8-SOUTHEAST" 290 S1=INT(300*RND(1))+1 300 REM - SEARCH - 310 INPUT"ENTER HEADING, SPEED";H,K 320 IF H<1 OR H>8 THEN PRINT"ILLEGAL HEADING":GOTO 310 330 IF K<0 OR K>20 THEN PRINT"ILLEGAL SPEED":GOTO 310 335 I$=CHR$(9) 340 PRINT"HEADING";I$;"SPEED";I$;"COORDINATES";I$;"FUEL";I$;I$;"TIME" 350 PRINT H;I$;K;I$;X;Y;I$;F;I$;T 360 GOSUB 1000:IF I=0 GOTO 500 361 GOSUB 3000 362 S1=S1-1:IF S1<=0 THEN GOSUB 5000 363 IF INP(1)=32 THEN 300 365 REM ADJUST COORDINATES 370 IF H>1 AND H<5 THEN LET X=X-1 380 IF H>5 THEN LET X=X+1 390 IF H>3 AND H<7 THEN LET Y=Y-1 400 IF H=1 OR H=2 OR H=8 THEN LET Y=Y+1 410 F=F-((K/2)*5) 420 REM ADJUST TIME 430 ' 432 T2=T2+60/K:IF T2>59 THEN LET T2=T2-60:T1=T1+1 434 IF T1>23 GOTO 460 440 T=(T1*100)+T2 441 ' 450 GOTO 350 460 T1=T1-24:DD=DD+1:IF DD<31 THEN 490 470 DD=1:MM=MM+1:IF MM<13 THEN 490 480 MM=1:YY=YY+1 490 PRINT DD;"/";MM;"/";YY:GOTO 441 500 PRINT"ECHO!!!":PRINT"BEARING:";I1:PRINT" RANGE:";I2 510 PRINT"A-ATTACK C-CONTINUE SEARCH N-NEW SEARCH PATH" 520 WAIT 0,1,1:I2=INP(1) 530 IF I2=ASC("A") GOTO 600 540 IF I2=ASC("C") GOTO 370 550 IF I2=ASC("N") GOTO 300 560 GOTO 520 600 REM - ATTACK - 610 INPUT"ENTER BEARING, RANGE(0-5)";I,I1 620 IF I<1 OR I>8 OR I1<0 OR I1>5 GOTO 610 625 Y1=Y:X1=X:D=D-1 630 IF I>1 AND I<5 THEN LET X1=X-I1 640 IF I>5 THEN LET X1=X+I1 650 IF I<7 AND I>3 THEN LET Y1=Y-I1 660 IF I=1 OR I=2 OR I=8 THEN LET Y1=Y+I1 670 FOR I=1 TO S 680 IF INT(SX(I))=X1 AND INT(SY(I))=Y1 THEN 800 690 NEXT I 700 GOTO 610 800 PRINT"YOU DESTROYED A U-BOAT AT COORIDNATES"X1","Y1 810 PRINT"YOU NOW HAVE";D;"DEPTH CHARGES LEFT" 815 SX(I)=SX(I)+2000:SY(I)=SY(I)+2000 820 GOTO 310 1000 REM - TEST IF SUB WITHIN SONAR RANGE - 1010 FOR I=1 TO S 1020 IF SX(I)-X<3 AND SX(I)-X>-3 THEN 1050 1030 NEXT I 1040 RETURN 1050 IF SY(I)-Y<3 AND SY(I)-Y>-3 THEN 1060ELSE 1030 1060 I1=INT(SQR(((INT(SY(I))-Y)^2)+((INT(SX(I))-X)^2))) 1070 I2=INT(SY(I)-Y):I3=INT(SX(I)-X) 1072 IF I2=0 THEN LET I4=SGN(-I3)*90+180:GOTO 1096 1074 IF I3=0 THEN LET I4=ABS((SGN(I2)-1)*90):GOTO 1096 1080 I4=INT(ATN(I3/I2)/(3.141/180)) 1090 IF I3<0 AND I2>0 THEN LET I4=ABS(90+I4)+270 1092 IF I3>0 AND I2<0 THEN LET I4=ABS(90+I4)+90 1094 IF I3<0 AND I2<0 THEN LET I4=I4+180 1096 I2=(I4/45)+1 1100 SWAP I1,I2:I=0:GOTO 1040 3000 REM - MOVE SUBS - 3010 FOR I=1 TO S 3013 IF C(I)=1 THEN 3017 3015 SX(I)=SX(I)+SGN(C(I)-5)*(K(I)/K) 3017 GOTO 3035 3020 IF C(I)>1 AND C(I)<5 THEN LET SX(I)=SX(I)-(K(I)/K) 3030 IF C(I)>5 THEN LET SX(I)=SX(I)+(K(I)/K) 3035 ' 3036 IF C(I)<=3 THEN LET SY(I)=SY(I)-(SGN(C(I)-3)*(K(I)/K)):GOTO 3038 3037 SY(I)=SY(I)+SGN(C(I)-7)*(K(I)/K) 3038 GOTO 3060 3040 IF C(I)>3 AND C(I)<7 THEN LET SY(I)=SY(I)-(K(I)/K) 3050 IF C(I)=8 OR C(I)=1 OR C(I)=2 THEN LET SY(I)=SY(I)+(K(I)/K) 3060 IF SX(I)<0 OR SX(I)>999 OR SY(I)<0 OR SY(I)>999 GOTO 3200 3070 NEXT I 3080 RETURN 3200 C(I)=C(I)+2:IF C(I)>8 THEN LET C(I)=C(I)-8 3210 K(I)=K(I)+1:GOTO 3070 5000 I=INT(S*RND(1))+1 5010 IF SX(I)>999 THEN 5000 5020 PRINT"--- NOTICE ---":PRINT"U-BOAT SIGHTED AT COORDINATES"; 5030 PRINT INT(SX(I))","INT(SY(I)):PRINT"BEARING";C(I);"AT";K(I);"KNOTTS" 5035 S1=INT(300*RND(1))+1 5040 RETURN