10 ON ERROR CLOSE#0:RUN 20 MODE7:VDU23,1,0;0;0;0; 30 PRINTTAB(12,10);CHR$141;CHR$134"BATTLESHIPS";TAB(12,11);CHR$141;CHR$134"BATTLESHIPS" 40 PRINTTAB(11,13);CHR$132"By John Henson" 50 PRINTTAB(14,23);"Press Space" 60 PROCdefine 70 REPEAT:UNTIL INKEY$(0)=" " 80 DIM P1 100,P2 100 90 PROCWIPE 100 MODE1:GCOL3,3:VDU23,1,0;0;0;0; 110 PROCGRID_DRAW 120 PROCLABEL 130 VDU29,640;0; 140 GCOL3,3:PROCGRID_DRAW:PROCLABEL 150 VDU29,0;0; 160 PROCPLACE(1) 170 VDU29,640;0; 180 PROCPLACE(2) 190 ON ERROR GOTO 1220 200 *DELETE BFILE 210 ON ERROR CLOSE#0:RUN 220 CH=OPENOUT("BFILE") 230 FORI=0TO99:BPUT#CH,P1?I:NEXT 240 FORI=0TO99:BPUT#CH,P2?I:NEXT 250 CLOSE#CH 260 CLS:PRINT'"Will you be using joysticks for your"''"battle ?"; 270 REPEAT:J$=GET$:UNTIL J$="Y" OR J$="N":PRINTJ$ 280 IF J$="Y" J%=1 ELSE J%=0 290 CHAIN"SHIP" 300 END 310 DEFFNSQUARE(J,X,Y) 320 IF J=1 =?(P1+(Y*10)+X) 330 IF J=2 =?(P2+(Y*10)+X) 340 DEFPROCWIPE 350 LOCAL I 360 FORI=0 TO 100 370 P1?I=0:P2?I=0:NEXT:ENDPROC 380 DEFPROCSET(J,X,Y,I) 390 IF J=1 ?(P1+(Y*10)+X)=I 400 IF J=2 ?(P2+(Y*10)+X)=I 410 ENDPROC 420 DEFPROCGRID_DRAW 430 LOCAL I 440 FOR I=0 TO 10*48 STEP 48 450 MOVE 0,I:DRAW 480,I:NEXT 460 FOR I=0 TO 10*48 STEP 48 470 MOVE I,0:DRAW I,480:NEXT 480 ENDPROC 490 DEFPROCFILL_SQUARE(X,Y) 500 LOCAL X1,Y1,I 510 X1=X*48:Y1=Y*48 520 FORI=X1+8 TO X1+48-8 STEP 4 530 MOVE I,Y1+4:DRAW I,Y1+48-4:NEXT 540 ENDPROC 550 DATA 5,"n Aircraft Carrier",4," Battle ship",3," Destroyer",2,"n Escort",2," Submarine" 560 DEFPROCLABEL 570 LOCAL I 580 GCOL0,1:VDU5 590 FORI=0 TO 432 STEP 48 600 MOVEI,528:PRINTCHR$((I/48)+65) 610 MOVE504,I+32:PRINTCHR$((I/48)+65) 620 NEXT 630 ENDPROC 640 DEFPROCPLACE(J) 650 RESTORE 660 GCOL0,1:VDU4,17,3,28,0,12,39,0 670 Q=0 680 REPEAT 690 READ A,A$ 700 CLS 710 CLS:PRINT"Player ";J;", please enter X and Y grid"''"co-ordinates for a";A$''"which is ";A;" squares long." 720 PRINT'"X is ?";:INPUT""X$ 730 PRINT'"Y is ?";:INPUT""Y$ 740 X=ASC(X$)-65:Y=ASC(Y$)-65 750 IF LEN(X$)<>1 OR LEN(Y$)<>1 CLS:GOTO 710 760 IFX<0 ORX>9 ORY<0 ORY>9 CLS:GOTO 710 770 CLS 780 PRINT"Player ";J;", enter the direction"''"the ";RIGHT$(A$,LEN(A$)-1);" will go"''"from location ";X$;",";Y$;"." 790 PRINTTAB(34,0);"1 2 3";TAB(34,1);" ";TAB(34,2);"4 6";TAB(34,3);" ";TAB(34,4);"7 8 9" 800 INPUT'"Direction 1 to 9 (not 5) ",D 810 IFD=5 OR D<1 OR D>9 GOTO 770 820 IFD=1 AND (X-A<1 OR Y+A>10)GOTO710 830 IFD=2 AND Y+A>10 GOTO 710 840 IFD=3 AND (X+A>10 OR Y+A>10)GOTO710 850 IFD=4 AND X-A<1 GOTO 710 860 IFD=9 AND (X+A>10 OR Y-A<1)GOTO710 870 IFD=6 AND X+A>10 GOTO 710 880 IFD=7 AND (X-A<1 OR Y-A<1)GOTO710 890 IFD=8 AND Y-A<1 GOTO 710 900 X$="":Y$="" 910 ON D GOTO 920,930,940,950,960,970,980,990,1000 920 X$="-":Y$="+":GOTO1010 930 X$="":Y$="+":GOTO1010 940 X$="+":Y$="+":GOTO1010 950 X$="-":Y$="":GOTO1010 960 X$="":Y$="":GOTO1010 970 X$="+":Y$="":GOTO1010 980 X$="-":Y$="-":GOTO1010 990 X$="":Y$="-":GOTO1010 1000 X$="+":Y$="-":GOTO1010 1010 IF X$<>"" XT=EVAL("X"+X$+"A") ELSE XT=99 1020 IF Y$<>"" YT=EVAL("Y"+Y$+"A") ELSE YT=99 1030 FLAG=FALSE:TEMPX=X:TEMPY=Y 1040 REPEAT 1050 IF FNSQUARE(J,X,Y)<>0 FLAG=TRUE:GOTO 1080 1060 IF X$<>"" X=EVAL("X"+X$+"1") 1070 IF Y$<>"" Y=EVAL("Y"+Y$+"1") 1080 UNTIL FLAG OR X=XT OR Y=YT 1090 IF FLAG GOTO 710 1100 X=TEMPX:Y=TEMPY 1110 REPEAT 1120 PROCFILL_SQUARE(X,Y) 1130 PROCSET(J,X,Y,1) 1140 IF X$<>"" X=EVAL("X"+X$+"1") 1150 IF Y$<>"" Y=EVAL("Y"+Y$+"1") 1160 UNTIL FLAG OR X=XT OR Y=YT 1170 Q=Q+1 1180 CLS:UNTIL Q=5 1190 GCOL0,2:VDU19,2,2,0,0,0 1200 FORI%=4 TO 476 STEP 8:MOVE4,I%:DRAW476,I%:NEXT:FOR I%=8 TO 476 STEP 8:MOVE4,I%:DRAW476,I%:NEXT 1210 ENDPROC 1220 IF ERR=214 GOTO 210 1230 CLS 1240 REPORT:PRINT;" at line ";ERL:END 1250 DEFPROCdefine:FORL%=128 TO 224 STEP 96 1260 VDU23,L%,16,56,124,254,56,56,56,56 1270 VDU23,L%+1,63,31,15,31,59,113,224,64 1280 VDU23,L%+2,8,12,126,127,126,12,8,0 1290 VDU23,L%+3,64,224,113,59,31,15,31,63 1300 VDU23,L%+4,56,56,56,56,254,124,56,16 1310 VDU23,L%+5,2,7,142,220,248,240,248,252 1320 VDU23,L%+6,16,48,126,254,126,48,16,0 1330 VDU23,L%+7,252,248,240,248,220,142,7,2:NEXT 1340 ENDPROC