10 REM SEABT.ECB 15 REM ...SEA BATTLE....from the book MORE BASIC COMPUTOR GAMES 20 REM .................Creative Computing Morristown, N.J. 30 REM ....Modified for SOL-20 Ralph Hopkins 8-15-79 40 DIM A(20,20),D(10),C$(20),H$(14),N$(16),S$(15) 50 PRINT "&K&J&J": LET H$=" HEADQUARTERS " 60 PRINT TAB(15);"* * * * \$/\$/ * * *" 70 PRINT TAB(15);"* *" 80 PRINT TAB(15);"* S E A *" 90 PRINT TAB(15);"* B A T T L E *" 100 PRINT TAB(15);"* *" 110 PRINT TAB(15);"* -#--#- * * * * \$/ *" 120 DATA 8,5,5,10,23,5,3,0,12,10 130 FOR I=1 TO 10: READ C(I): NEXT I 140 FOR I=1 TO 3: PRINT : NEXT I 150 LET S$=" Sea Monster ": LET C$=" NOT ENOUGH CREW to " 160 INPUT "What is your name? ---=>",N$: PRINT 170 FOR I=1 TO 20: REM .....SET UP the area 180 FOR J=1 TO 20: LET A(I,J)=0: NEXT J 190 NEXT I 200 RESTORE 4910: REM ...*** ISLAND ***... 210 FOR X=7 TO 13 220 FOR Y=7 TO 12: READ A(X,Y): NEXT Y 230 NEXT X 240 LET S1=10: LET S2=10: LET A(S1,S2)=2: REM ...*** SUB ***... 250 LET S=INT(RND(0)*16)+15: RESTORE 4710: REM ...Enemy \$/ 260 FOR X=1 TO (INT(RND(0)*4)+1)*2-1: READ D8,D9: NEXT X 270 FOR X=1 TO S 280 LET X1=INT(RND(0)*20)+1: LET X2=INT(RND(0)*20)+1 290 IF A(X1,X2)<>0 THEN 280 ELSE LET A(X1,X2)=3 300 NEXT X 310 PRINT "You must destroy ";S;" enemy ships to win ";N$;"." 320 PRINT : REM ...*** HEADQUARTERS ***... 330 LET S3=INT(RND(0)*20)+1: LET S4=INT(RND(0)*20)+1 340 IF A(S3,S4)<>0 THEN 330 ELSE LET A(S3,S4)=4 350 LET I=INT(RND(0)*12)+9: REM ...*** UNDERWATER MINES ***... 360 FOR X=1 TO I 370 LET X1=INT(RND(0)*20)+1: LET X2=INT(RND(0)*20)+1 380 IF A(X1,X2)<>0 THEN 370 ELSE LET A(X1,X2)=5 390 NEXT X 400 FOR X=1 TO 4: REM ...*** SEA MONSTERS ***... 410 LET X1=INT(RND(0)*18)+2: LET X2=INT(RND(0)*18)+2 420 IF A(X1,X2)<>0 THEN 410 ELSE LET A(X1,X2)=6 430 LET I=INT(RND(0)*8)+1: RESTORE 4710 440 FOR Y=1 TO I: READ M1,M2: NEXT Y 450 NEXT X 460 REM ...*** SET STARTING VALUES ***... 470 FOR I=1 TO 9: LET D(I)=0: NEXT I 480 LET C=30: LET P=6000: LET F=2500: LET T=10 490 LET M=3: LET D=100: LET D2=2 500 PRINT : PRINT : REM ...*** COMMAND SECTION ***... 510 PRINT "*#* What are your orders ";N$;"? (0 to 9) "; 520 INPUT (1,0)"---=>",O$: IF O$="S" THEN 3600 530 PRINT : LET O=ASC(O$(1,1))-47: IF O<1 OR O>10 THEN 770 540 IF D(O)>=0 THEN 660 ELSE PRINT 550 ON O GOTO 560,570,570,580,590,600,610,620,630,640 560 PRINT "ENGINES are under repair ";N$;".": GOTO 500 570 PRINT "SONAR is under repair ";N$;".": GOTO 500 580 PRINT "# TORPEDO TUBES under repair ";N$;".": GOTO 500 590 PRINT "MISSLE SILOS are under repair ";N$;".": GOTO 500 600 PRINT "POWER CONVERTER is DAMAGED ";N$;".": GOTO 500 610 PRINT "NO REPORTS are able to get through ";N$;".": GOTO 500 620 PRINT H$;"is DAMAGED. Unable to help ";N$;".": GOTO 500 630 PRINT "BALLAST CONTROLS are being repaired ";N$;".": GOTO 500 640 PRINT "HATCHES INACCESSIBLE ";N$;". No sabotages possible." 650 GOTO 500 660 IF C>C(O) THEN 760 ELSE PRINT 670 ON O GOTO 680,690,690,700,710,720,730,760,740,750 680 PRINT C$;"man the engines ";N$;".": GOTO 500 690 PRINT "*#*";C$;"work the SONAR ";N$;".": GOTO 500 700 PRINT "#";C$;"fire torpedo ";N$;".": GOTO 500 710 PRINT C$;"launch a missle ";N$;".": GOTO 500 720 PRINT C$;"work then CONVERTER ";N$;".": GOTO 500 730 PRINT "NO ONE LEFT to give the report ";N$;".": GOTO 500 740 PRINT "There are ";C$;"work the controls ";N$;".": GOTO 500 750 PRINT C$;"to go out on a mission ";N$;".": GOTO 500 760 ON O GOTO 900,1400,1600,1800,2100,2500,2700,3000,3100,3200 770 REM .....DISPLAY SUMMARY OF COMMANDS........ 780 PRINT "The commands are:": PRINT 790 PRINT " 0 : Navigation" 800 PRINT " 1 : Sonar Map of the area" 810 PRINT " 2 : Sonar Directions to ships" 820 PRINT " 3 : Torpedo Control" 830 PRINT " 4 : Polaris Missle Control" 840 PRINT " 5 : Power Conversion" 850 PRINT " 6 : Status/Damage Report" 860 PRINT " 7 : Headquarters" 870 PRINT " 8 : Manuevering (dive)" 880 PRINT " 9 : Sabotage" 890 PRINT " S : Surrender": PRINT : GOTO 510 900 REM ...*** 0 : NAVIGATION ***... 910 IF D<=50 THEN LET D1=1 ELSE LET D1=0 920 LET D1=1-((.23+RND(0)/10)*-D1): GOSUB 4700 930 PRINT " (100 Units move you 1 space)" 940 PRINT " POWER AVAILABLE =";P;" POWER TO USE---=>"; 950 INPUT (4,0)P1: PRINT : IF P1<0 OR P1>P THEN 930 960 IF P1<=1000 THEN 1010 970 IF RND(0)<.43 THEN 1010 980 PRINT "ATOMIC PILE GOES SUPERCRITICAL ";N$;" !!!" 990 PRINT H$;"will warn all subs to stay away from" 1000 PRINT "RADIOACTIVE area !!!": GOTO 4800 1010 LET X=S1: LET Y=S2: LET Q1=1 1020 FOR X2=1 TO INT(INT(P1/100+.5)*D1+.5) 1030 IF X+X1>0 AND X+X1<21 AND Y+Y1>0 AND Y+Y1<21 THEN 1050 1040 PRINT "You can't leave the area ";N$;"!!": GOTO 1080 1050 ON A(X+X1,Y+Y1)+1 GOTO 1060,1070,1280,1100,1130,1150,1160 1060 LET X=X+X1: LET Y=Y+Y1: LET P=P-100: GOTO 1170 1070 PRINT "You almost ran aground ";N$;"!" 1080 LET A(X,Y)=2: LET A(S1,S2)=0 1090 LET S1=X: LET S2=Y: EXIT 3650 1100 IF D>50 THEN 1060 1110 PRINT "You rammed a ship !!! Your both sunk ";N$;" !!!" 1120 LET S=S-1: IF S=0 THEN EXIT 4860 ELSE EXIT 4800 1130 IF D>50 THEN 1060 1140 PRINT "You rammed your";H$;"!! Your sunk !!!": EXIT 4800 1150 PRINT "You've been blown up by a mine ";N$;" !!": EXIT 4800 1160 IF RND(0)<.21 THEN 1280 ELSE EXIT 4510 1170 REM ...*** CHECK FOR NEARBY SEA MONSTERS ***... 1180 FOR X3=X-2 TO X+2 1190 FOR Y3=Y-2 TO Y+2 1200 IF X3<1 OR X3>20 OR Y3<1 OR Y3>20 THEN 1260 1210 IF A(X,Y)<>6 THEN 1260 1220 IF RND(0)<.25 THEN 1250 1230 IF Q1=0 THEN 1260 1240 PRINT "You've had a narrow escape with a ";S$;N$;"!!" 1250 LET Q1=0 1260 NEXT Y3 1270 NEXT X3 1280 NEXT X2 1290 PRINT "::: NAVIGATION COMPLETE ::: Power left =";P 1300 IF P>0 THEN 1080 ELSE PRINT 1310 PRINT "ATOMIC PILE has gone DEAD !!! SUB SINKS, crew suffocates" 1320 GOTO 4800 1330 REM 1340 REM 1350 REM 1360 REM 1370 REM 1380 REM 1390 REM 1400 IF O=3 THEN 1600 ELSE PRINT : REM ...*** 1 : SONAR MAP ***... 1410 FOR X=1 TO 20 1420 FOR Y=1 TO 20 1430 IF A(X,Y)<>0 THEN 1470 1440 IF X<>1 OR X<>20 OR Y<>1 OR Y<>20 THEN 1470 1450 PRINT " . ";: GOTO 1560 1460 IF D<50 AND RND(0)<.23 AND A(X,Y)<>1 AND A(X,Y)<>2 THEN 1450 1470 IF RND(0)<.15 AND A(X,Y)>2 THEN 1450 1480 ON A(X,Y)+1 GOTO 1490,1500,1510,1520,1530,1540,1550 1490 PRINT " ";: GOTO 1560 1500 PRINT "***";: GOTO 1560 1510 PRINT "";: GOTO 1560 1520 PRINT "\$/";: GOTO 1560 1530 PRINT "!H!";: GOTO 1560 1540 PRINT " $ ";: GOTO 1560 1550 PRINT "-#-";: GOTO 1560 1560 NEXT Y 1570 PRINT 1580 NEXT X 1590 LET P=P-50: IF P>0 THEN 510 ELSE 1310 1600 REM ...*** 2 : SONAR DIRECTIONAL INFORMATION ***... 1610 FOR I=1 TO 5: LET B(I)=0: NEXT I 1620 PRINT " Direction # of Ships Distances" 1630 RESTORE 4710 1640 FOR X=1 TO 8 1650 READ X1,Y1: LET X3=0 1660 FOR X4=1 TO 20 1670 LET I=S1+X1*X4: LET J=S2+Y1*X4 1680 IF I<1 OR I>20 OR J<1 OR J>20 THEN 1710 1690 IF A(I,J)<>3 THEN 1710 1700 LET X3=X3+1: LET B(X3)=X4 1710 NEXT X4 1720 IF X3=0 THEN 1760 1730 PRINT " ";X;TAB(18);X3;TAB(33); 1740 FOR X4=1 TO X3: PRINT B(X4);: NEXT X4 1750 PRINT 1760 NEXT X 1770 GOTO 1590 1780 REM 1790 REM 1800 REM ...*** 3 : TORPEDO CONTROL ***... 1810 IF T>0 THEN 1830 ELSE PRINT 1820 PRINT "# NO TORPEDOS left ";N$;".": GOTO 500 1830 IF D<2000 THEN 1870 1840 IF RND(0)>.5 THEN 1870 1850 PRINT "Pressure implodes SUB upon firing...You're crushed!" 1860 GOTO 4800 1870 GOSUB 4700: LET X=S1: LET Y=S2 1880 IF D>50 THEN LET I=2 ELSE LET I=1 1890 LET J=INT(((RND(0)*7)+6)/I) 1900 FOR X2=1 TO J 1910 IF X+X1>0 AND X+X1<21 AND Y+Y1>0 AND Y+Y1<21 THEN 1950 1920 PRINT "TORPEDO out of SONAR range....Ineffectual ";N$;"." 1930 LET T=T-1: LET P=P-150 1940 IF P>0 THEN EXIT 3650 ELSE EXIT 1310 1950 ON A(X+X1,Y+Y1)+1 GOTO 1960,1970,2060,1990,2010,2030,2050 1960 LET X=X+X1: LET Y=Y+Y1: PRINT "..!..";: GOTO 2060 1970 PRINT "You took out some Island ";N$;"!" 1980 LET A(X+X1,Y+Y1)=0: GOTO 1930 1990 PRINT "*BOOM* You got one ";N$;"!!": LET S=S-1 2000 IF S=0 THEN 4860 ELSE 1980 2010 PRINT "You BLEW UP YOUR";H$;N$;"!!!" 2020 LET S3=0: LET S4=0: LET D2=0: GOTO 1980 2030 PRINT "#*# B L A M #*#": PRINT 2040 PRINT " ... Shot WASTED on a MINE ";N$;"!!": GOTO 1980 2050 PRINT "A";S$;"had a torpedo for lunch ";N$;"!!": GOTO 1930 2060 NEXT X2 2070 PRINT "DUD.": GOTO 1930 2080 REM 2090 REM 2100 REM ...*** 4 : POLARIS MISSLE CONTROL ***... 2110 IF M<>0 THEN 2130 ELSE PRINT 2120 PRINT "No MISSLES left ";N$;".": GOTO 500 2130 IF D>50 AND D<2000 THEN 2200 ELSE PRINT 2140 PRINT "RECOMMEND that you do not fire at this depth..." 2150 INPUT (1,0)"...PROCEED? (Y or N) ---=>",A$: PRINT 2160 IF LEN(A$)=0 THEN 500 2170 IF A$(1,1)="N" THEN 500 2180 IF RND(0)<.5 THEN 2200 2190 PRINT "MISSLE EXPLODES upon firing ";N$;"!! YOUR DEAD!!": GOTO 4800 2200 GOSUB 4700 2210 PRINT " (75 lbs. move missle 1 space)" 2220 INPUT "FUEL (Lbs.) ---=>",F1: PRINT 2230 IF F1>0 AND F1<=F THEN 2250 2240 PRINT "You have ";F;" lbs. of fuel left ";N$;".": GOTO 2210 2250 LET F2=INT(F1/75+.5): LET I=S1+X1*F2: LET J=S2+Y1*F2 2260 IF I>0 AND I<21 AND J>0 AND J<21 THEN 2290 2270 PRINT "MISSLE out of SONAR tracking ";N$;". MISSLE lost." 2280 LET M=M-1: LET F=F-F1: LET P=P-300: GOTO 1940 2290 LET D3=0: LET D4=0: LET D5=0: LET D6=0 2300 FOR X=I-1 TO I+1 2310 FOR Y=J-1 TO J+1 2320 IF X<1 OR X>20 OR Y<1 OR Y>20 THEN 2430 2330 IF A(X,Y)=3 THEN LET D3=D3+1 2340 IF A(X,Y)=6 THEN LET D4=D4+1 2350 IF A(X,Y)=5 THEN LET D5=D5+1 2360 IF A(X,Y)=1 THEN LET D6=D6+1 2370 IF A(X,Y)<>4 THEN 2400 ELSE PRINT 2380 PRINT "You've destroyed your";H$;N$;"!!" 2390 LET S3=0: LET S4=0: LET D2=0: GOTO 2420 2400 IF A(X,Y)<>2 THEN 2420 ELSE PRINT 2410 PRINT "You just DESTROYED YOURSELF ";N$;"!!! DUMMY!!": EXIT 4800 2420 LET A(X,Y)=0 2430 NEXT Y 2440 NEXT X 2450 IF D6>0 THEN PRINT "You BLEW UP some Island ";N$;"." 2460 IF D5>0 THEN PRINT "You destroyed ";D5;" mines ";N$;"." 2470 IF D4>0 THEN PRINT "You got ";D4;S$;N$;"!!! GOOD WORK!!" 2480 PRINT "You destroyed ";D3;" enemy ships ";N$;"!!!" 2490 LET S=S-D3: IF S<=0 THEN 4860 ELSE 2280 2500 REM ...*** 5 : POWER CONVERTER ***... 2510 PRINT "OPTIONS are: (1=Fuel to Power 2=Power to Fuel)" 2520 INPUT (1,0)"* Which option? ---=>",O: PRINT 2530 IF O=1 THEN 2550 2540 IF O=2 THEN 2600 ELSE 2510 2550 REM .....Fuel to Power converter....... 2560 PRINT " Fuel available =";F 2570 INPUT " Convert how much? ---=>",C1: PRINT 2580 IF C1<0 OR C1>F THEN 2560 2590 LET F=F-C1: LET P=P+INT(C1/3): GOTO 2650 2600 REM .....Power to Fuel converter....... 2610 PRINT " Power available =";P-1 2620 INPUT " Convert how much? ---=>",C1: PRINT 2630 IF C1>P-1 OR C1<0 THEN 2610 2640 LET P=P-C1: LET F=F+INT(C1/3) 2650 PRINT "Conversion Complete. Power =";P;" Fuel =";F;"." 2660 GOTO 3650 2670 REM 2680 REM 2690 REM 2700 REM ...*** 6 : STATUS / DAMAGE REPORT ***... 2710 PRINT " # of ENEMY SHIPS left.......";S 2720 PRINT " # of POWER UNITS left.......";P 2730 PRINT " # of TORPEDOES left.......";T 2740 PRINT " # of MISSLES left.......";M 2750 PRINT " # of CREWMEN left.......";C 2760 PRINT " # of lbs. of FUEL left.......";F 2770 PRINT : INPUT (1,0)"Want a damage report? (Y or N) ---=>",A$ 2780 PRINT : IF LEN(A$)=0 THEN 2920 2790 IF A$(1,1)="N" THEN 2920 2800 PRINT " ITEM DAMAGE (+ Good, 0 Neutral, - BAD)" 2810 PRINT " ---- ------" 2820 PRINT " Engines";TAB(22);D(1) 2830 PRINT " Sonar (map)";TAB(22);D(2) 2840 PRINT " Sonar (directional)";TAB(22);D(3) 2850 PRINT " Torpedoes";TAB(22);D(4) 2860 PRINT " Missles";TAB(22);D(5) 2870 PRINT " Converter";TAB(22);D(6) 2880 PRINT " Status";TAB(22);D(7) 2890 PRINT " Headquarters";TAB(22);D(8) 2900 PRINT " Manuevering";TAB(22);D(9) 2910 PRINT " Sabotage";TAB(22);D(10) 2920 PRINT "### You are at LOCATION (";S1;" ,";S2;" ) ###" 2930 PRINT " Your depth is ";D;" feet." 2940 PRINT : GOTO 510 2950 REM 2960 REM 2970 REM 2980 REM 2990 REM 3000 REM ...*** 7 : HEADQUARTERS ***... 3010 IF D2<>0 THEN 3030 ELSE PRINT 3020 PRINT H$;"is DESERTED ";N$;".": GOTO 500 3030 IF SQR((S1-S3)*(S1-S3)+(S2-S4)*(S2-S4))<=2 AND D<51 THEN 3050 3040 PRINT "Unable to comply with DOCKING ORDERS ";N$;".": GOTO 500 3050 PRINT "Divers from";H$;"bring out supplies and men." 3060 LET P=4000: LET T=8: LET M=2: LET F=1500 3070 LET C=25: LET D2=D2-1: GOTO 3650 3080 REM 3090 REM 3100 REM ...*** 8 : MANUEVERING ***... 3110 INPUT (4,0)"ENTER: New depth ---=>",D1: PRINT 3120 IF D1>=0 AND D1<3000 THEN 3140 ELSE PRINT 3130 PRINT "HULL CRUSHED by pressure ";N$;"!!": GOTO 4800 3140 LET P=P-INT(ABS((D-D1)/2+.5)) 3150 PRINT "MANUEVER COMPLETE. Power loss =";INT(ABS((D-D1)/2+.5)) 3160 LET D=D1: GOTO 3650 3170 REM 3180 REM 3190 REM 3200 REM ...*** 9 : SABOTAGE ***... 3210 IF C>10 THEN 3230 3220 PRINT C$;"go on a mission ";N$;".": GOTO 500 3230 LET D3=0: LET D4=0 3240 FOR X=S1-2 TO S1+2 3250 FOR Y=S2-2 TO S2+2 3260 IF X<1 OR X>20 OR Y<1 OR Y>20 THEN 3290 3270 IF A(X,Y)=3 THEN LET D3=D3+1 3280 IF A(X,Y)=6 THEN LET D4=D4+1 3290 NEXT Y 3300 NEXT X 3310 IF D3<>0 THEN 3330 ELSE PRINT 3320 PRINT "No SHIPS in range ";N$;".": GOTO 500 3330 PRINT "There are ";D3;" SHIPS in range ";N$;"." 3340 PRINT "<#> How many men are going ";N$;"?" 3350 INPUT (2,0)" ---=>",Q1: PRINT 3360 IF C-Q1>=10 THEN 3380 3370 PRINT "You must leave at least 10 men on board ";N$;".": GOTO 3340 3380 LET D5=INT(D3/Q1+.5): LET D6=0 3390 FOR X=S1-2 TO S1+2 3400 FOR Y=S2-2 TO S2+2 3410 IF D3/Q1>1-RND(0) AND RND(0)+D3/Q1<.9 THEN 3450 3420 IF A(X,Y)<>3 THEN 3450 3430 LET D6=D6+1: LET A(X,Y)=0: LET S=S-1 3440 IF S=0 THEN EXIT 4860 3450 NEXT Y 3460 NEXT X 3470 PRINT D6;" SHIPS \$/ were destroyed ";N$;"." 3480 LET D6=0: LET D7=0 3490 FOR X=1 TO Q1 3500 IF RND(0)>.6 THEN LET D7=D7+1 3510 NEXT X 3520 FOR X=1 TO Q1-D7 3530 IF RND(0)<.15 THEN LET D6=D6+1 3540 NEXT X 3550 IF D4=0 THEN 3580 3560 PRINT "A";S$;"smells the men on the way back!!!" 3570 PRINT D7;" MEN were EATEN ";N$;"!!": LET C=C-D7 3580 PRINT D6;" MEN were lost through accidents ";N$;"." 3590 LET C=C-D6: LET P=P-INT(10*Q1+RND(0)*10): GOTO 3650 3600 REM ...*** "S" : SURRENDER ***... 3610 PRINT "COWARD!!! You're not very patriotic ";N$;"!!" 3620 GOTO 4800 3630 REM .................................................. 3640 REM 3650 LET Q=0: LET I=4: REM ....ENEMY Retaliation Section.... 3660 IF S1>8 AND S1<13 AND S2>8 AND S2<12 THEN 3670 ELSE 3680 3670 LET I=1: REM .....Enjoy partial protection of Lagoon 3680 FOR X=S1-I TO S1+I 3690 FOR Y=S2-I TO S2+I 3700 IF X<1 OR X>20 OR Y<1 OR Y>20 THEN 3730 3710 IF A(X,Y)<>3 THEN 3730 3720 LET Q=Q+(RND(0)/SQR((S1-X)*(S1-X)+(S2-Y)*(S2-Y))) 3730 NEXT Y 3740 NEXT X 3750 IF Q>.06 THEN 3780 ELSE PRINT 3760 PRINT "No SHIPS in range to Depth Charge you ";N$;"!!" 3770 GOTO 4100 3780 PRINT "DEPTH CHARGES OFF "; 3790 IF RND(0)>.5 THEN PRINT "PORT"; ELSE PRINT "STARBOARD"; 3800 PRINT " SIDE ";N$;"!!!" 3810 IF Q>.36 OR RND(0)>.96 THEN 3840 3820 PRINT "LIGHT, superficial damage ";N$;"." 3830 LET P=P-50: LET D(INT(RND(0)*9)+1)=-RND(0)*2: GOTO 4100 3840 IF Q>.6 OR RND(0)>.975 THEN 3920 3850 PRINT "MODERATE damage. Repairs needed." 3860 LET P=P-75+INT(RND(0)*30) 3870 FOR Y=1 TO 2 3880 LET X=INT(RND(0)*10)+1: LET D(X)=D(X)-RND(0)*8 3890 NEXT Y 3900 GOTO 4100 3910 IF Q>.9 OR RND(0)>.983 THEN 3980 3920 PRINT "HEAVY damage!!! Repairs IMMEDIATE ";N$;"!!!" 3930 LET P=P-(200+INT(RND(0)*76)) 3940 FOR X=1 TO 4+INT(RND(0)*2) 3950 LET Y=INT(RND(0)*9)+1: LET D(Y)=D(Y)-RND(0)*11 3960 NEXT X 3970 GOTO 4100 3980 PRINT "DAMAGE CRITICAL!!! WE NEED HELP!!!": LET A$="" 3990 FOR X=1 TO 10: LET A$=A$+CHR$(INT(RND(0)*26)+48): NEXT X 4000 LET X=INT(RND(0)*6)+1 4010 PRINT "Send 'HELP' in code. Here is the code: ";A$(X,X+4); 4020 REM .....TIME DELAY, then erase code...... 4030 FOR I=1 TO 300: NEXT I 4040 PRINT CHR$(13);TAB(38);"XXXX";CHR$(13);TAB(38);"****" 4050 INPUT (4,0)"ENTER code: ---=>",B$: PRINT 4060 IF B$=A$(X,X+4) THEN 4080 4070 PRINT "MESSAGE GARBLED ";N$;" ... No HELP arrives!!!": GOTO 4800 4080 PRINT "FAST WORK ";N$;"!! HELP arrives in time to save you!!" 4090 GOTO 3940: REM ........................................... 4100 REM ...*** MOVE SHIPS / SEA MONSTERS ***... 4110 IF D(1)>=0 OR D(3)>=0 OR D(4)>=0 OR D(5)>=0 THEN 4140 4120 IF D(7)>=0 OR D(8)>=0 OR D(9)>=0 THEN 4140 4130 PRINT "DAMAGE TOO MUCH ";N$;" ... YOUR SUNK !!!": GOTO 4800 4140 PRINT : PRINT : REM .......MOVE SHIPS + SEA MONSTERS....... 4150 PRINT "---*** RESULT of last ENEMY MANUEVER ***---" 4160 LET X=1: IF RND(0)>.92 THEN LET D8=INT(RND(0)*3)-1 4170 LET Y=1: IF RND(0)<.03 THEN LET D9=INT(RND(0)*3)-1 4180 IF A(X,Y)<>3 THEN 4420 4190 LET W=D8: LET V=D9: REM .....MOVE A SHIP \$/ 4200 IF X+W>0 AND X+W<21 AND Y+V>0 AND Y+V<21 THEN 4250 4210 FOR X0=19 TO 1 STEP -1 4220 IF A(X-W*X0,Y-V*X0)<>0 THEN 4240 4230 LET A(X-W*X0,Y-V*X0)=3: LET A(X,Y)=0: EXIT 4630 4240 NEXT X0 4250 ON A(X+W,Y+V)+1 GOTO 4260,4280,4320,4280,4340,4370,4400 4260 LET A(X+W,Y+V)=3 4270 LET A(X,Y)=0: GOTO 4630 4280 REM ...*** CHANGE DIRECTION ***... 4290 LET I=INT(RND(0)*8)+1: RESTORE 4710 4300 FOR X0=1 TO I: READ W,V: NEXT X0 4310 IF X+W<1 OR X+W>20 OR Y+V<1 OR Y+V>20 THEN 4290 ELSE 4250 4320 IF D>50 THEN 4280 ELSE PRINT 4330 PRINT "*** You've been rammed by a ship ";N$;" !!": GOTO 4800 4340 IF RND(0)<.15 THEN 4280 ELSE PRINT 4350 PRINT "You're";H$;"has been rammed by a ship ";N$;" !!" 4360 LET S3=0: LET S4=0: LET D2=0: LET A(X+W,Y+V)=0: GOTO 4390 4370 IF RND(0)<.7 THEN 4280 ELSE PRINT 4380 PRINT "*** SHIP destroyed by a MINE ";N$;"!!!" 4390 LET S=S-1: IF S=0 THEN 4860 ELSE 4270 4400 IF RND(0)<.8 THEN 4280 ELSE PRINT 4410 PRINT "*** SHIP EATEN by a ";S$;N$;"!!!": GOTO 4390 4420 REM ...*** MOVE A SEA MONSTER ***... 4430 IF A(X,Y)<>6 THEN 4630 4440 IF X+M1<1 OR X+M1>20 OR Y+M2<1 OR Y+M2>20 THEN 4470 4450 ON A(X+M1,Y+M2)+1 GOTO 4460,4470,4510,4520,4550,4570,4580 4460 LET A(X+M1,Y+M2)=6: LET A(X,Y)=0: GOTO 4630 4470 REM ...*** CHANGE DIRECTION ***... 4480 LET I=INT(RND(0)*8)+1: RESTORE 4710 4490 FOR X0=1 TO I: READ M1,M2: NEXT X0 4500 IF X+M1<1 OR X+M1>20 OR Y+M2<1 OR Y+M2>20 THEN 4470 ELSE 4450 4510 PRINT "*** You've been EATEN by a ";S$;N$;"!!!": GOTO 4800 4520 IF RND(0)>.2 THEN 4470 4530 PRINT "*** SHIP EATEN by a ";S$;N$;"!!!" 4540 LET S=S-1: IF S=0 THEN 4860 ELSE 4460 4550 PRINT "*** A ";S$;" ate your";H$;N$;"!!" 4560 LET S3=0: LET S4=0: LET D2=0: GOTO 4460 4570 PRINT "#BOOM# A ";S$;" detonated a MINE ";N$;".": GOTO 4460 4580 IF RND(0)<.75 THEN 4470 4590 PRINT "*** A ";S$;" FIGHT ";N$;"!!" 4600 IF RND(0)<.8 THEN 4620 4610 PRINT " ... And one dies !!": GOTO 4460 4620 PRINT " ... It's a tie !!": GOTO 4470 4630 LET Y=Y+1: IF Y<20 THEN 4180 4640 LET X=X+1: IF X<20 THEN 4170 4650 FOR Y=1 TO 10: REM ...*** MAKE REPAIRS ***... 4660 LET X=INT(RND(0)*10)+1: IF D<51 THEN LET Z=-1 ELSE LET Z=0 4670 IF D(X)<3 THEN LET D(X)=D(X)+(RND(0)*(2+RND(0)*2))*(1-Z) 4680 NEXT Y 4690 GOTO 500 4700 REM ...*** GOSUB FOR COURSE / DIRECTION ***... 4710 DATA 0,1,-1,1,-1,0,-1,-1,0,-1,1,-1,1,0,1,1 4720 IF O=4 THEN PRINT "Torpedo "; 4730 IF O=5 THEN PRINT "Missle "; 4740 INPUT (1,0)"course (1 to 8) ---=>",C0: PRINT 4750 IF C0<1 OR C0>8 THEN 4720 4760 RESTORE 4710 4770 FOR X9=1 TO INT(C0+.5): READ X1,Y1: NEXT X9 4780 RETURN 4790 REM .................................................. 4800 REM ...*** DESTROYED ? ***... 4810 PRINT "There are still ";S;" enemy ships left ";N$;".": PRINT 4820 PRINT "You will be demoted to the rank of DECK SCRUBBER!!!" 4830 PRINT : INPUT (1,0)" Want another game ? (Y or N) ---=>",A$ 4840 IF LEN(A$)=0 THEN 170 4850 IF A$(1,1)="Y" THEN 170 ELSE 4930 4860 PRINT "GOOD WORK ";N$;" !!! You got then all!!!" 4870 PRINT "Promotion and Commendations will be given at once!!" 4880 GOTO 4830 4890 REM .................................................. 4900 REM ...*** ISLAND DATA ***... 4910 DATA 0,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1 4920 DATA 1,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,0 4930 END