1780 END; 1790 FOR I:=0 STEP 1 UNTIL 99 DO 1800 IF MF[I]=100 THEN MF[I]:=0; 1810 SL:=EVEN:=YS:=MS:=0; 1820 ML:=YL:=7; 1830 PRINT("WHO FIRST (0=YOU, 1=ME)",NTAB,NCR); 1840 READATA(TTY,I); 1850 IF I<>1 THEN GOTO YRTRN; 1860 MYTRN: 1870 ROUND; 1880 IF ML+MS>100 THEN 1890 BEGIN 1900 PRINT("I WIN"); 1910 GOTO SS 1920 END; 1930 MS:=MS+ML; 1940 FOR S:=1,2,3,4 DO 1950 IF Y[S,-1]<>0 AND Y[S,1]<>0 THEN 1960 BEGIN 1970 L:=G[S]; 1980 FOR N:=1 STEP 1 UNTIL ST[Y[S,1],0] DO 1990 FOR D:=0,1,2,3 DO 2000 BEGIN 2010 SWITCH H:=ILLEG,BLANK,FULL; 2020 SQ:=ST[Y[S,1],N]; 2030 FOR I:=1 STEP 1 UNTIL 8 DO P[I,1]:=-1; 2040 W:=0; 2050 DIR:=NE[D]; 2060 NX:=SQ; 2070 OTHWAY: DT:=0; 2080 SW:=1; 2090 RV: NM:=1; 2100 FOR I:=0 STEP 1 UNTIL L DO Z[I]:=Y[S,I]; 2110 FOR I:=1 STEP 1 UNTIL Y[S,0] DO 2120 IF Z[I]=YF[NX] THEN 2130 BEGIN 2140 Z[I]:=0; 2150 Z[0]:=Z[0]-1; 2160 I:=L; 2170 END; 2180 MORE: NOW:=NX; 2190 GOTO H[EX(YF,NOW,DIR,NX)+2]; 2200 FULL: IF Z[0]<>0 THEN 2210 FOR I:=1 STEP 1 UNTIL L DO 2220 IF Z[I]=YF[NX] THEN 2230 BEGIN 2240 Z[I]:=0; 2250 Z[0]:=Z[0]-1; 2260 GOTO OKAY; 2270 END; 2280 IF YF[NX]>99 THEN GOTO BLANK; 2290 ILLEG: IF SW<0 THEN GOTO REVSQ; 2300 SW:=-1; 2310 NX:=NOW; 2320 DIR:=-DIR; 2330 GOTO RV; 2340 BLANK: DT:=DT+SW; 2350 DIS:=ABS(DT); 2360 P[W+DIS,1]:=NX; 2370 P[W+DIS,2]:=PR[DIS]*(L*Y[S,0])^2; 2380 GOTO OK; 2390 OKAY: DT:=DT+SW; 2400 DIS:=ABS(DT); 2410 OK: NM:=NM+1; 2420 IF NM0 THEN 2440 REVSQ: FOR I:=W+1 STEP 1 UNTIL W+4 DO 2450 P[I,1]:=-1; 2460 IF SQ>-1 THEN 2470 BEGIN 2480 W:=4; 2490 NX:=SQ; 2500 SQ:=-1; 2510 DIR:=NE[D+4]; 2520 GOTO OTHWAY; 2530 END; 2540 FOR I:=1,2,3,4 DO 2550 FOR J:=5,6,7,8 DO 2560 IF P[I,1]=P[J,1] THEN P[J,1]:=-1; 2570 FOR I:=1 STEP 1 UNTIL 8 DO 2580 BEGIN 2590 J:=P[I,1]; 2600 IF J<>-1 THEN YF[J]:=YF[J]+P[I,2]; 2610 END; 2620 END; 2630 END; 2640 FOR I:=1 STEP 1 UNTIL ML DO 2650 BEGIN 2660 II:=0; 2670 FOR J:=1 STEP 1 UNTIL 99 DO 2680 IF (YF[II]99 THEN YF[J]:=0; 2780 IF I<=ML THEN 2790 BEGIN 2800 XY1:=1; 2810 FOR J:=1,2,3,4 DO 2820 IF Y[J,1]=0 THEN XY1:=G[J]; 2830 DIS:=0; 2840 FOR II:=1 STEP 1 UNTIL ML DO 2850 BEGIN 2860 A: XY:=MD(100); 2870 IF YF[XY]<>0 THEN GOTO A; 2880 FOR D:=0 STEP 1 UNTIL 7 DO 2890 BEGIN 2900 NOW:=XY; 2910 FOR JJ:=2 STEP 1 UNTIL XY1 DO 2920 IF EX(YF,NOW,NE[D],N)=0 2930 THEN NOW:=NX 2940 ELSE GOTO O2; 2950 GOTO O1; 2960 O2: END; 2970 DIS:=DIS+1; 2980 IF DIS>10 THEN XY1:=1; 2990 GOTO A; 3000 O1: IF II+1<=ML AND XY1>1 THEN 3010 BEGIN 3020 JJ:=XY+NE[D]; 3030 ST[SL,II]:=JJ; 3040 YF[JJ]:=SL; 3050 II:=II+1; 3060 END; 3070 3080 ST[SL,II]:=XY; 3090 YF[XY]:=SL; 3100 END; 3110 END; 3120 PRINT("MY SHOTS ARE",NTAB,NCR); 3130 FOR I:=1 STEP 1 UNTIL ML DO PRINT(ST[SL,I],NTAB,NCR); 3140 PRINT; 3150 ST[SL,0]:=ML; 3160 GOTO REP; 3170 R1: PRINT("REPEAT ",NTAB,NCR); 3180 REP: 3190 PRINT("REPORT",NTAB,NCR); 3200 READATA(TTY,HIT[1],HIT[2],HIT[3],HIT[4]); 3210 IF HIT[1]+HIT[2]+HIT[3]+HIT[4]>ML THEN GOTO R1; 3220 FOR I:=1 STEP 1 UNTIL 4 DO 3230 IF HIT[I]+Y[I,0]>G[I] THEN GO TO R1; 3240 FOR I:=1,2,3,4 DO 3250 IF Y[I,-1]<>0 THEN 3260 BEGIN 3270 IF Y[I,0]+HIT[I]=G[I] THEN Y[I,-1]:=0; 3280 FOR II:=1 STEP 1 UNTIL HIT[I] DO 3290 Y[I,Y[I,0]+II]:=SL; 3300 Y[I,0]:=Y[I,0]+HIT[I]; 3310 END; 3320 YL:=0; 3330 FOR I:=1,2,3,4 DO YL:=YL+Y[I,-1]; 3340 IF YL=0 THEN 3350 BEGIN 3360 PRINT("I WIN"); 3370 GOTO TD; 3380 END; 3390 YRTRN: 3400 ROUND; 3410 IF YL+YS>100 THEN 3420 BEGIN 3430 PRINT("YOU WIN"); 3440 ML:=YL; 3450 MS:=YS; 3460 GOTO TD; 3470 END; 3480 I:=MD(100); 3490 PRINT("YOUR",NTAB,YL,NTAB,"SHOTS, ",NTAB,NCR); 3500 IF YL99 THEN 3700 BEGIN 3710 PRINT(I,NTAB," IIS OUT OF BOUNDS."); 3720 GOTO B1; 3730 END; 3740 J:=MF[I]; 3750 IF J>0 THEN 3760 BEGIN 3770 PRINT(I,NTAB,"WAS TAKEN ON ROUND",NTAB,J); 3780 GOTO B1; 3790 END; 3800 IF J<0 THEN 3810 BEGIN 3820 J:=-J; 3830 HIT[0]:=1; 3840 HIT[J]:=HIT[J]+1; 3850 M[J,0]:=M[J,0]+1; 3860 END; 3870 MF[I]:=SL; 3880 END; 3890 IF HIT[0]=0 THEN PRINT("SPLASH") 3900 ELSE FOR K:=1,2,3,4 DO 3910 IF HIT[K]<>0 THEN 3920 BEGIN 3930 PRINT("YOU HIT MY ",NTAB,NCR); 3940 PS(K); 3950 PRINT(HIT[K],NTAB,"TIMES",NTAB,NCR); 3960 IF M[K,0]=G[K] THEN 3970 BEGIN 3980 PRINT(" AND SANK IT",NTAB,NCR); 3990 M[K,-1]:=0; 4000 END; 4010 B; 4020 END; 4030 ML:=0; 4040 FOR I:=1,2,3,4 DO ML := ML+M[I,-1]; 4050 IF ML<>0 THEN GOTO MYTRN; 4060 B; 4070 B; 4080 PRINT("YOU WIN"); 4090 GOTO TD; 4100 SS: 4110 PRINT(100-MS,NTAB,"SQUARES LEFT FOR",NTAB,ML,NTAB,"SHOTS"); 4120 TD: 4130 PRINT("MY SHIPS:"); 4140 FOR K:=1,2,3,4 DO 4150 BEGIN 4160 PS(K); 4170 FOR J:=1 STEP 1 UNTIL G[K] DO PRINT(M[K,J],NTAB,NCR); 4180 B; 4190 END; 4200 END