Source Code
10 FAST
50 GOSUB 6000
100 GOSUB 5000
110 CLS
115 GOSUB 5300
117 SLOW
120 GOSUB 6500
130 GOSUB 5400
135 LET Z=INT (RND*2)
137 IF Z=1 THEN GOTO 150
140 GOTO 700
150 GOTO 1000
700 PRINT AT 14,14;"YOUR MOVE"
710 INPUT D$
715 LET B$=D$(1)
717 LET C=VAL D$(2)
720 LET D=CODE B$-64
730 LET W=D
733 LET N=C+1
740 LET J=M(N,W)
750 IF M(N,W)<>143 THEN LET HITS=HITS+1
770 PRINT AT C,D;CHR$ J
772 IF J>100 THEN LET J=J-100
780 IF HITS=16 THEN GOTO 4000
790 GOTO 150
\n1000 IF LB=0 AND LD=0 THEN GOSUB 1500
\n1010 IF LB=1 OR LC=1 OR LD=1 THEN GOSUB 1800
\n1020 IF LB>1 OR LC>1 THEN GOSUB 2000
\n1030 INPUT M$
\n1033 IF NOT M$="H" AND NOT M$="M" THEN GOTO 1030
\n1040 IF M$="M" THEN GOSUB 1550
\n1050 IF M$="H" THEN GOSUB 1580
\n1060 PRINT AT X-4,Y+9;CHR$ J
\n1061 IF J>100 THEN LET JJ=J-100
\n1062 IF J<100 THEN LET JJ=J
\n1063 PRINT "%1";AT X+7,Y-3;CHR$ J
\n1064 IF J>100 THEN PRINT "%0";AT X+7,Y-3;CHR$ J
\n1065 LET L(X,Y)=J
\n1070 IF HATS=16 THEN GOTO 4020
\n1080 GOTO 140
\n1500 LET X=INT (RND*10)+4
\n1502 LET Y=INT (RND*10)+4
\n1510 IF L(X,Y)<>46 THEN GOTO 1500
\n1515 IF L(X+1,Y)<>46 AND L(X,Y-1)<>46 AND L(X-1,Y)<>46 AND L(X,Y+1)<>46 THEN GOTO 1500
\n1520 LET YA=Y+61
\n1530 PRINT AT 14,14;"MY TURN";YA;X-4
\n1535 PRINT AT X+7,Y-3;"?"
\n1540 RETURN
\n1550 LET J=143
\n1560 IF LB=1 OR LC=1 OR LD=1 THEN LET LZ=LZ+1
\n1570 RETURN
\n1580 PRINT AT 16,14;"B,C OR D?"
\n1590 INPUT N$
\n1591 FOR N=1 TO 9
\n1592 PRINT AT 16,N+13;CHR$ 32
\n1593 NEXT N
\n1600 LET HATS=HATS+1
\n1610 IF N$="B" THEN GOSUB 1750
\n1620 IF N$="C" THEN GOSUB 1700
\n1630 IF N$="D" THEN GOSUB 1650
\n1640 RETURN
\n1650 LET J=CODE "D"
\n1660 LET LD=LD+1
\n1670 IF LD=2 THEN LET LZ=0
\n1680 IF LD=2 THEN LET LD=0
\n1690 RETURN
\n1700 LET J=CODE "C"
\n1710 LET LC=LC+1
\n1720 IF LC=3 THEN LET LZ=0
\n1722 LET LY=0
\n1730 IF LC=3 THEN LET LC=0
\n1740 RETURN
\n1750 LET J=CODE "B"
\n1760 LET LB=LB+1
\n1770 IF LB=4 THEN LET LZ=0
\n1772 LET LY=0
\n1774 LET LR=0
\n1780 IF LB=4 THEN LET LB=0
\n1790 RETURN
\n1800 IF (LB=1 OR LC=1) AND LZ=0 THEN IF (L(X-2,Y)<>46 AND L(X+1,Y)<>46) OR (L(X-1,Y)<>46 AND L(X+2,Y)<>46) THEN LET Y=Y-1
\n1802 LET LZ=2
\n1804 GOTO 1970
\n1810 IF (LB=1 OR LC=1) AND LZ=1 THEN IF L(X+3,Y)<>46 THEN LET X=X+1
\n1812 LET Y=Y-1
\n1814 LET LZ=2
\n1816 GOTO 1970
\n1850 IF LZ=0 THEN GOTO 1890
\n1860 IF LZ=1 THEN GOTO 1930
\n1870 IF LZ=2 THEN GOTO 1965
\n1880 IF LZ=3 THEN GOTO 1985
\n1890 LET X=X-1
\n1900 IF L(X,Y)<>46 THEN GOTO 1920
\n1910 LET LZD=1
\n1912 GOTO 1990
\n1920 LET LZ=LZ+1
\n1930 LET X=X+2
\n1940 IF L(X,Y)<>46 THEN GOTO 1960
\n1950 LET LZD=2
\n1952 GOTO 1990
\n1960 LET LZ=LZ+1
\n1965 LET X=X-1
\n1966 LET Y=Y-1
\n1970 IF L(X,Y)<>46 THEN GOTO 1980
\n1975 LET LZD=3
\n1976 GOTO 1990
\n1980 LET LZ=LZ+1
\n1985 LET Y=Y+2
\n1986 LET LZD=4
\n1990 GOSUB 1520
\n1995 RETURN
\n2000 IF LZD=1 THEN GOSUB 2050
\n2010 IF LZD=2 THEN LET X=X+1
\n2020 IF LZD=3 THEN GOSUB 2080
\n2030 IF LZD=4 THEN LET Y=Y+1
\n2040 GOSUB 1520
\n2042 RETURN
\n2050 IF LB=2 OR LC=2 THEN GOSUB 2110
\n2060 IF LB=3 THEN GOSUB 2300
\n2070 RETURN
\n2080 IF LB=2 OR LC=2 THEN GOSUB 2160
\n2090 IF LB=3 THEN GOTO 2400
\n2100 RETURN
\n2110 IF (LB=2 OR LC=2) AND LY=1 THEN LET X=X+3
\n2112 RETURN
\n2120 LET X=X-1
\n2130 IF X=3 THEN GOTO 2150
\n2140 IF L(X,Y)=46 THEN LET LY=LY+1
\n2142 RETURN
\n2150 IF LB=2 OR LC=2 THEN LET X=X+3
\n2152 RETURN
\n2160 IF (LB=2 OR LC=2) AND LY=1 THEN LET Y=Y+3
\n2162 RETURN
\n2170 LET Y=Y-1
\n2180 IF Y=3 THEN GOTO 2200
\n2190 IF L(X,Y)=46 THEN LET LY=LY+1
\n2192 RETURN
\n2200 IF LB=2 OR LC=2 THEN LET Y=Y+3
\n2202 RETURN
\n2300 IF LR=1 THEN LET X=X+4
\n2302 RETURN
\n2310 LET X=X-1
\n2320 IF X=3 THEN LET X=X+4
\n2322 RETURN
\n2330 IF L(X,Y)<>46 THEN LET X=X+2
\n2332 RETURN
\n2340 IF L(X,Y)=46 THEN LET LR=1
\n2342 RETURN
\n2400 IF LR=1 THEN LET Y=Y+4
\n2402 RETURN
\n2410 LET Y=Y-1
\n2420 IF Y=3 THEN LET Y=Y+4
\n2422 RETURN
\n2430 IF L(X,Y)<>46 THEN LET Y=Y+2
\n2432 RETURN
\n2440 IF L(X,Y)=46 THEN LET LR=1
\n2442 RETURN
\n4000 PRINT AT 16,14;"YOU WON"
\n4002 GOTO 4040
\n4020 PRINT AT 16,14;" I WON "
\n4022 GOTO 4040
\n4040 PRINT AT 16,14;"AGAIN? (Y/N)"
\n4050 INPUT Y$
\n4055 IF NOT Y$="Y" THEN GOTO 4070
\n4060 IF Y$="Y" THEN RUN
\n4070 PRINT AT 21,14;"OK BYE"
\n4072 STOP
\n5000 DIM L(16,16)
\n5025 DIM M(10,10)
\n5026 FOR N=1 TO 10
\n5027 FOR W=1 TO 10
\n5028 LET M(N,W)=143
\n5030 NEXT W
\n5032 NEXT N
\n5035 RAND
\n5040 LET HITS=0
\n5042 LET HATS=0
\n5050 LET LB=0
\n5052 LET LC=0
\n5054 LET LD=0
\n5056 LET LZ=0
\n5058 LET LA=0
\n5060 LET LZD=0
\n5070 LET LX=0
\n5072 LET LY=0
\n5074 LET XX=0
\n5076 LET LR=0
\n5080 FOR X=1 TO 3
\n5082 FOR Y=1 TO 3
\n5090 LET L(X,Y)=100
\n5092 NEXT Y
\n5094 NEXT X
\n5100 FOR X=4 TO 13
\n5102 FOR Y=4 TO 13
\n5110 LET L(X,Y)=46
\n5112 NEXT Y
\n5114 NEXT X
\n5120 FOR X=14 TO 16
\n5122 FOR Y=14 TO 16
\n5130 LET L(X,Y)=100
\n5132 NEXT Y
\n5134 NEXT X
\n5136 RETURN
\n5300 FOR A=0 TO 9
\n5310 PRINT A;".......... ..........";A
\n5320 NEXT A
\n5330 PRINT " ABCDEFGHIJ ABCDEFGHIJ "
\n5350 FOR A=0 TO 9
\n5360 PRINT A;".........."
\n5362 NEXT A
\n5400 LET AB=6
\n5402 GOSUB 5600
\n5404 FOR P=1 TO 4
\n5420 LET M(N,W)=CODE "B"
\n5430 GOSUB 5640
\n5432 NEXT P
\n5440 FOR E=1 TO 2
\n5450 LET AB=7
\n5452 GOSUB 5600
\n5454 GOSUB 5670
\n5456 IF A=1 THEN GOTO 5450
\n5460 FOR P=1 TO 3
\n5470 LET M(N,W)=CODE "C"
\n5480 GOSUB 5640
\n5482 NEXT P
\n5484 NEXT E
\n5490 FOR E=1 TO 3
\n5500 LET AB=8
\n5502 GOSUB 5600
\n5504 GOSUB 5700
\n5506 IF A=1 THEN GOTO 5500
\n5510 FOR P=1 TO 2
\n5520 LET M(N,W)=CODE "D"
\n5530 GOSUB 5640
\n5532 NEXT P
\n5534 NEXT E
\n5540 RETURN
\n5600 LET A=0
\n5602 LET AA=INT (RND*2)
\n5610 IF AA=0 THEN LET N=INT (RND*AB)+1
\n5612 LET W=INT (RND*10)+1
\n5620 IF AA=1 THEN LET N=INT (RND*10)+1
\n5622 LET W=INT (RND*AB)+1
\n5630 RETURN
\n5640 IF AA=0 THEN LET N=W+1
\n5650 IF AA=1 THEN LET W=W+1
\n5660 RETURN
\n5670 IF AA=0 THEN IF M(N,W)<>143 OR M(N+1,W)<>143 OR M(N+2,W)<>143 THEN LET A=1
\n5680 IF AA=1 THEN IF M(N,W)<>143 OR M(N,W+1)<>143 OR M(N,W+2)<>143 THEN LET A=1
\n5700 IF AA=0 THEN IF M(N,W)<>143 OR M(N+1,W)<>143 THEN LET A=1
\n5710 IF AA=1 THEN IF M(N,W)<>143 OR M(N,W+1)<>143 THEN LET A=1
\n5720 RETURN
\n6418 RETURN
\n6500 LET X$="BATTLESHIP (4)"
\n6520 LET DF=6
\n6522 LET J=66
\n6530 LET X=4
\n6532 GOSUB 6700
\n6540 LET X$="CRUISER (3)"
\n6550 LET DF=7
\n6552 LET J=67
\n6554 LET X=3
\n6560 GOSUB 6700
\n6562 GOSUB 6700
\n6570 LET X$="DESTROYER (2)"
\n6580 LET DF=8
\n6582 LET J=68
\n6584 LET X=2
\n6590 GOSUB 6700
\n6592 GOSUB 6700
\n6594 GOSUB 6700
\n6596 RETURN
\n6600 PRINT AT 14,17;" ";AT 15,15;" ";AT 16,15;" ";AT 17,18;" ";AT 18,13;" "
\n6610 RETURN
\n6630 IF BR=1 THEN LET C=C+1
\n6640 IF BR=2 THEN LET D=D+1
\n6650 RETURN
\n6700 PRINT AT 14,17;"INPUT";AT 15,15;"1 FOR N/S";AT 16,15;"2 FOR E/W"
\n6710 INPUT BR
\n6712 IF BR<1 OR BR>2 THEN GOTO 6710
\n6720 IF BR=1 THEN LET DD=DF
\n6722 LET DE=9
\n6730 IF BR=2 THEN LET DD=9
\n6732 LET DE=DF
\n6740 PRINT AT 14,17;"ENTER";AT 15,15;"STARTING ";AT 16,15;" SQUARE ";AT 17,18;"FOR";AT 18,13;X$
\n6750 INPUT A$
\n6760 LET B$=A$(1)
\n6762 LET C=VAL A$(2)
\n6770 LET D=CODE B$-65
\n6800 GOSUB 6600
\n6834 RETURN
\n6840 CLEAR
\n6850 SAVE "1033%3"
\n6860 RUN