20 CLEAR : WIDE_LINE('W',10)

30 DIM A%(9,19),B%(7,1),S$(10)

35 S$(0)=' . ' : S$(1)=' S ' : S$(2)=' D ' : S$(3)=' B ' : S$(4)=' C '

100 HTEXT('B,F',10,6,"THIS IS THE GAME BATTLESHIP")

105 HTEXT(,15,17," IF YOU NEED INSTRUCTIONS, TYPE 'Y'")

110 INPUT M$

115 CLEAR : WIDE_LINE('-W',10)

120 IF M$<>"Y" THEN 420

125 CURSOR(1,1)

140 PRINT 

150 PRINT "   BATTLESHIP IS PLAYED ON A 10 X 10 MATRIX, YOU HAVE 8 SHIPS TO"

160 PRINT "TO PLACE ANYWHERE ON THE MATRIX. THE SHIPS MUST BE IN A STRAIGHT LINE"

170 PRINT "AND MUST OCCUPY THE NUMBER OF SQUARES INDICATED..."

180 PRINT "TWO SUBMARINES...2 SQUARES EACH"

190 PRINT "TWO DESTROYERS...2 SQUARES EACH"

200 PRINT "TWO BATTLESHIPS...3 SQUARES EACH"

210 PRINT "TWO AIRCRAFT CARRIERS...4 SQUARES EACH"

220 PRINT 

230 PRINT "TO SINK A SHIP, YOU MUST HIT EVERY SQUARE OCCUPIED BY THAT SHIP"

240 PRINT 

250 PRINT "INPUT COORDINATES AS WHOLE NUMBERS. FOR EXAMPLE: ENTER 159 FOR 15,9"

253 PRINT  : PRINT  : PRINT 

254 PRINT "TYPE A RETURN TO GET MORE EXPLANATION" : INPUT A$

255 CURSOR(1,1) : CLEAR

260 PRINT 

270 PRINT "***************STRATEGY HINTS****************"

280 PRINT 

290 PRINT 

300 PRINT "IT WILL BE TO YOUR ADVANTAGE TO SPACE YOUR SHIPS SO THAT"

310 PRINT "NONE WILL BE FOUND WHILE TRYING TO SINK ANOTHER SHIP"

320 PRINT "HOWEVER, YOU SHOULD NOT ASSUME THAT THE MACHINE WILL DO THIS."

330 PRINT 

340 PRINT "THE MORE METHODICAL YOUR SEARCH IS,THE BETTER YOUR CHANCES"

350 PRINT "YOU SHOULD USE THE BOARDS PRINTED OUT TO KEEP CLOSE TRACK OF"

360 PRINT "WHERE YOU HAVE SHOT OR HIT. THE MACHINE WILL NOT STOP YOU"

370 PRINT "FROM WASTING SHOTS. THAT'S YOUR OWN STUPIDITY."

380 PRINT "ALSO, NOTE THAT ANY ILLEGAL SHOT, SUCH AS A NEGATIVE NUMBER"

390 PRINT "OR ANY NUMBER <100 OR >199, IS LOST."

400 PRINT 

411 PRINT  : PRINT 

413 PRINT "TYPE A RETURN WHEN YOU ARE READY TO BEGIN THE GAME" : INPUT A$

414 CLEAR

420 ROLL_AREA(18,24) : WIDE_LINE('W',2)

422 WIDE_LINE('W',1) : HTEXT('U',1,14,'MINC Battleship')

425 HTEXT(,2,5,'Your board') : HTEXT(,2,25,'My board') : CURSOR(24,1)

426 VTEXT('R',3,41,'|||||||||||||')

429 CURSOR(24,1)

430 RANDOMIZE

440 FOR M%=0% TO 19%

450 FOR N%=0% TO 9%

460 A%(N%,M%)=1%

470 NEXT N%

480 NEXT M%

482 B%(0,0)=8% : B%(0,1)=2% : B%(1,0)=8% : B%(1,1)=3% : B%(2,0)=8% : B%(2,1)=4% : B%(3,0)=8% : B%(3,1)=5%

484 B%(4,0)=7% : B%(4,1)=6% : B%(5,0)=7% : B%(5,1)=7% : B%(6,0)=6% : B%(6,1)=8% : B%(7,0)=6% : B%(7,1)=9%

486 HTEXT(,16,1,'                                                                                ')

490 M1%=0%

500 M2%=9%

505 M9%=0%

510 GOSUB 3230

515 M9%=40% : GOSUB 3230 : M9%=0%

550 FOR X%=7% TO 0% STEP -1%

560 P%=INT(RND(0)*B%(X%,0%))

570 Q%=INT(RND(0)*10)

580 IF RND(0)>.5 THEN 2520

590 FOR Y%=1% TO (10%-B%(X%,0%))

600 F%=P%+Y%-1%

610 IF A%(F%,Q%)>1% THEN 560

620 E%=Q%+1%

630 IF E%>9% THEN 650

640 IF A%(F%,E%)>1% THEN 560

650 E%=Q%-1%

660 IF E%<0% THEN 680

670 IF A%(F%,E%)>1% THEN 560

680 NEXT Y%

690 FOR Y%=1% TO (10%-B%(X%,0%))

700 F%=P%+Y%-1%

710 A%(F%,Q%)=B%(X%,1%)*A%(F%,Q%)

720 NEXT Y%

730 NEXT X%

732 IF M$<>"MAGIC" THEN  GOTO 740

734 FOR Y%=0% TO 4% : FOR X%=0% TO 8% : PRINT A%(X%,Y%); : NEXT X% : PRINT A%(9%,Y%),

736 FOR X%=0% TO 9% : PRINT A%(X%,Y%+5%); : NEXT X% : PRINT  : NEXT Y% : INPUT M$

738 PRINT  : PRINT  : PRINT  : PRINT  : PRINT  : PRINT 

740 CURSOR(18,1) : PRINT "INPUT THE ENDPOINTS OF YOUR SHIPS AS YOU ARE ASKED FOR THEM"

750 FOR M%=2% TO 9%

760 IF M%<4% THEN 950

770 IF M%<6% THEN 970

780 IF M%<8% THEN 990

790 PRINT "AIRCRAFT CARRIER";

800 INPUT N%,P%

810 IF N%<100% THEN 1010

820 IF N%>199% THEN 1010

830 N1%=INT(N%/10%)

840 N%=INT(N%-10%*N1%)

850 IF P%<100% THEN 1010

860 IF P%>199% THEN 1010

870 P1%=INT(P%/10%)

880 P%=INT(P%-P1%*10%)

890 Y%=M%-2%

900 IF SQR((N%-P%)^2%+(N1%-P1%)^2%)<>9%-B%(Y%,0%) THEN 1010

910 GOTO 1030

950 PRINT "SUBMARINE";

960 GOTO 800

970 PRINT "DESTROYER";

980 GOTO 800

990 PRINT "BATTLESHIP";

1000 GOTO 800

1010 PRINT "ILLEGAL ENTRY, TRY AGAIN"

1020 GOTO 760

1030 IF P%>N% THEN 2680

1040 Y%=1%

1050 IF P1%>N1% THEN 2700

1060 Z%=1%

1070 FOR Q%=P% TO N% STEP Y%

1080 FOR F%=P1% TO N1% STEP Z%

1090 IF A%(Q%,F%)>1% THEN 1010

1100 NEXT F%

1110 NEXT Q%

1120 FOR Q%=P% TO N% STEP Y%

1130 FOR F%=P1% TO N1% STEP Z%

1140 A%(Q%,F%)=M%

1145 HTEXT(,5%+F%-10%,10%+2%*Q%,S$(ABS(A%(Q%,F%))/2%))

1150 NEXT F%

1160 NEXT Q%

1170 NEXT M%

1175 GOSUB 3030

1210 M1%=10%

1220 M2%=19%

1240 Q%=1%

1250 HTEXT(,16,39,"    ") : HTEXT(,18,1,"               YOU HAVE 5 SHOTS         ") : MOVE_CURSOR(19,1)

1252 FOR X%=1% TO 5% : HTEXT(,18+X%,1,"                                       ") : NEXT X%

1270 FOR X%=1% TO 5%

1280 HTEXT(,18+X%,1,"SHOT #"+STR$(X%)+" ") : MOVE_CURSOR(18+X%,12)

1290 INPUT N%

1310 N%=N%-100%

1320 IF N%<0% THEN 1370

1330 IF N%>99% THEN 1370

1340 E%=0%

1350 GOSUB 1390

1370 NEXT X%

1380 GOTO 1840

1390 P%=INT(N%/10%)

1400 N%=INT(N%-P%*10%)

1410 IF E%=10% THEN 2110

1420 A%(N%,P%)=-1%*ABS(A%(N%,P%))

1430 IF ABS(A%(N%,P%))>1% THEN 1500

1440 HTEXT('B',16,39,"MISS")

1443 IF P%<10% THEN HTEXT(,5%+P%,50%+2%*N%," *")

1446 IF P%>9% THEN HTEXT(,5%+P%-10%,10%+2%*N%," *")

1450 IF E%=0% THEN 1490

1460 IF Q%=-2% THEN 2000

1470 IF Q%=1% THEN 1490

1480 GOSUB 2290

1490 RETURN

1500 HTEXT('B,F',16,39,CHR$(7)+CHR$(7)+" HIT")

1502 IF P%<10% THEN HTEXT("F",5%+P%,50%+2%*N%," H") : H9%=5%+P% : H8%=50%+2%*N%

1503 IF P%>9% THEN HTEXT("F",5%+P%-10%,10%+2%*N%," H") : H9%=5%+P%-10% : H8%=10%+2%*N%

1504 GOSUB 3030 : REM UPDATE THE SCORE

1505 CURSOR(19,1)

1510 IF E%=0% THEN 1630

1520 IF Q%<>1% THEN 1590

1530 B%(4%,0%)=ABS(A%(N%,P%))

1540 B%(2%,0%)=P%*10%+N%

1550 B%(3%,0%)=ABS(A%(N%,P%))

1560 Q%=-1%

1570 GOSUB 2290

1580 IF Q%=-1% THEN 1610

1590 IF ABS(A%(N%,P%))<>B%(3%,0%) THEN 1610

1600 Q%=-2%

1610 M%=ABS(A%(N%,P%))-2%

1620 B%(M%,1%)=-1%*ABS(B%(M%,1%))

1630 FOR Y%=E% TO E%+9%

1640 FOR M%=0% TO 9%

1650 IF A%(M%,Y%)=ABS(A%(N%,P%)) THEN 1490

1660 NEXT M%

1670 NEXT Y%

1680 HTEXT('B,F,R',16,39,CHR$(7)+CHR$(7)+"SINK") : HTEXT('B,F,R',H9%,H8%+1%,'S')

1685 CURSOR(19,1)

1690 IF E%=0% THEN 1780

1700 M%=ABS(A%(N%,P%))-2%

1710 B%(M%,1%)=ABS(B%(M%,1%))

1720 M%=B%(4%,0%)-2%

1730 IF B%(4%,0%)<>B%(M%,1%) THEN 2000

1740 FOR M%=0% TO 7%

1750 IF B%(M%,1%)<0% THEN 2170

1760 NEXT M%

1770 Q%=1%

1780 FOR M%=0% TO 9%

1790 FOR Y%=E% TO E%+9%

1800 IF A%(M%,Y%)>1% THEN 1490

1810 NEXT Y%

1820 NEXT M%

1830 GOTO 2340

1840 E%=10%

1845 HTEXT(,16,39,"    ")

1860 HTEXT(,18,41,"               I HAVE 5 SHOTS          ")

1865 FOR X%=1% TO 5% : HTEXT(,18+X%,55,"               ") : NEXT X%

1870 FOR X%=1% TO 5%

1880 IF Q%>0% THEN 2040

1890 B%(1%,0%)=B%(1%,0%)+P1%

1900 N%=B%(1%,0%)

1910 GOSUB 1390

1920 NEXT X%

1940 GOTO 1250

1950 IF Q%=-2% THEN 2010

1960 IF Q%=1% THEN 1980

1970 GOSUB 2290

1980 X%=X%-1%

1990 GOTO 1490

2000 X%=X%+1%

2010 P1%=-1%*P1%

2020 B%(1%,0%)=B%(2%,0%)

2030 GOTO 1980

2040 M%=INT(RND(0)*5%)*2%

2050 N%=INT(RND(0)*10)+10%

2060 Y%=(-1%)^N%

2070 IF Y%>0% THEN 2090

2080 M%=M%-Y%

2090 N%=M%+N%*10%

2100 GOTO 1910

2110 IF P%*10%+N%<100% THEN 1950

2120 IF P%*10%+N%>199% THEN 1950

2130 IF A%(N%,P%)<1% THEN 1950

2150 HTEXT(,18+X%,41,"              MY SHOT #"+STR$(X%)+"  "+STR$(P%*10%+N%))

2160 GOTO 1420

2170 B%(3%,0%)=B%(M%,1%)

2180 FOR Y%=E% TO E%+9%

2190 FOR M%=0% TO 9%

2200 IF A%(M%,Y%)=B%(3%,0%) THEN 2250

2210 NEXT M%

2220 NEXT Y%

2230 Q%=1%

2240 GOTO 1880

2250 B%(2%,0%)=Y%*10%+M%

2260 Q%=-1%

2270 GOSUB 2290

2280 GOTO 1490

2290 P1%=INT(RND(0)*2%)*9%+1%

2300 B%(1%,0%)=B%(2%,0%)

2310 IF RND(0)>.5 THEN 2330

2320 P1%=-1%*P1%

2330 RETURN

2340 FOR X%=1% TO 60%

2350 PRINT CHR$(7);

2360 NEXT X%

2364 HTEXT(,16,39,"    ")

2365 FOR X%=18% TO 24% : HTEXT(,X%,1,'                                                                              ') : NEXT X%

2366 WIDE_LINE('W',18)

2370 IF E%=0% THEN 2500

2380 HTEXT('B,F,R',18,19,"I ")

2390 HTEXT('B,F,R',18,21,"WIN")

2395 WIDE_LINE('W',20)

2400 HTEXT(,20,18,'HALLO GERD!!')

2410 M1%=0%

2420 M2%=9%

2430 M4%=-1%

2450 M1%=10%

2460 M2%=19%

2490 PRINT  : PRINT  : PRINT 'DO YOU WISH TO PLAY AGAIN [Y/N]';

2492 INPUT Y$ : IF Y$='Y' THEN 20

2496 GOTO 3610

2500 HTEXT('B,F,R',18,17,"YOU ")

2510 GOTO 2390

2520 FOR Y%=1% TO (10%-B%(X%,0%))

2530 F%=P%+Y%-1%

2540 IF A%(Q%,F%)>1% THEN 560

2550 E%=Q%+1%

2560 IF E%>9% THEN 2580

2570 IF A%(E%,F%)>1% THEN 560

2580 E%=Q%-1%

2590 IF E%<0% THEN 2610

2600 IF A%(E%,F%)>1% THEN 560

2610 NEXT Y%

2620 FOR Y%=1% TO (10%-B%(X%,0%))

2630 F%=P%+Y%-1%

2640 A%(Q%,F%)=B%(X%,1%)*A%(Q%,F%)

2650 NEXT Y%

2660 GOTO 730

2680 Y%=-1%

2690 GOTO 1050

2700 Z%=-1%

2710 GOTO 1070

3030 M5%=10%

3040 M6%=19%

3050 GOSUB 3150

3075 HTEXT(,16,10,STR$(M4%)+" HITS OUT OF 22")

3080 M5%=0%

3090 M6%=9%

3100 GOSUB 3150

3135 HTEXT(,16,50,STR$(M4%)+" HITS OUT OF 22")

3145 RETURN

3150 M4%=0%

3160 FOR M7%=M5% TO M6%

3170 FOR N9%=0% TO 9%

3180 IF A%(N9%,M7%)>-2% THEN 3200

3190 M4%=M4%+1%

3200 NEXT N9%

3210 NEXT M7%

3220 RETURN

3230 MOVE_CURSOR(24,1)

3270 HTEXT(,4,11+M9%,'0 1 2 3 4 5 6 7 8 9') : REM PRINT M7;

3290 FOR M7%=M1% TO M2%

3320 HTEXT(,5%+M7%-M1%,7%+M9%,STR$(M7%+10%-M1%)+" ")

3340 HTEXT(,5%+M7%-M1%,10%+M9%,' . . . . . . . . . .')

3360 NEXT M7%

3390 RETURN

3610 END