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