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