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