Listing of file='BSHIP.BAS;01' on disk='vmedia/bounce-sector.ccvf'
90 REM KY BATTLESHIP 100 REM V4/27/80 RHT 105 REM COPYRIGHT(C) 1980 BY COMPUCOLOR 110 REM WRITTEN BY GREG WHITTEN 120 CLEAR 500:PLOT 12,27,24,15,3,14,2 130 PRINT "{d {d ~| no en a en a a l {e l cf gd ab no "; 140 REM 150 PRINT "en l {d a" 160 PLOT 6,6,3,30,5:PRINT "BY":PLOT 3,21,8,14 170 PRINT "C O M P U C O L O R" 180 PLOT 14,3,0,31,6,6 190 REM 200 FOR I= 1TO 4:PRINT "^^^^^^^^^^^^^^^^";:NEXT :PRINT 210 PLOT 15,3,5,29,6,2 220 PRINT "v w{j}lll" 230 REM 240 REM 250 REM 260 PLOT 2,30,12,242,32,12,255,2,31,13,242,33,13,255 270 PLOT 3,40,29,6,1,118,6,8,32,32,32,32,32,32,32,32,32,32,32,32,6,1,119 280 PLOT 3,43,28,6,12,30,123,29,106,106,106,106,106,30,125,6,1,32,29,98 290 PLOT 3,44,27:PRINT " " 300 PLOT 6,7,3,44,26:PRINT "j j j" 310 PLOT 3,64,0,6,1,2,81,12,242,83,12,255,2,80,13,242,82,13,255 320 PLOT 3,64,0:GOSUB 360:FOR I= 1TO 1100:NEXT 330 PLOT 6,3:FOR I= 34TO 78:PLOT 2,I,16- I* .08,255,30,2,I,16- I* .08,255:NEXT I 340 FOR K= 1TO 5:FOR I= 1TO 4:PLOT 6,I* 8,12,3,64,0:NEXT I,K 350 PLOT 6,6,12,3,64,0:GOTO 410 360 DIM PS(5),CS(5),PB(9,9),CB(9,9),HT(16,2),S$(5),SC(5) 370 DATA 4,"1. AIRCRAFT CAR. (5)",3,"2. BATTLESHIP (4)",2 380 DATA "3. CRUISER (3)",2,"4. SUBMARINE (3)",1,"5. DESTROYER (2)" 390 CP= 5:CC= 5:LS= 1:NH= 0:D1= 0:D2= 0:D3= 0:D4= 0:S2= 1:FOR I= 1TO 5:READ PS(I),S$(I) 400 CS(I)= PS(I):NEXT :RETURN 410 C$= "A B C D E F G H I J":R$= "0 1 2 3 4 5 6 7 8 9" 420 PLOT 6,6,12,14 430 PLOT 3,0,10 440 INPUT "HOW MUCH INTELLIGENCE (1 IS STUPID -- 25 IS SMART) ? ";GM$ 450 GM= VAL (GM$) 460 IF GM< 1OR GM> 25THEN 420 470 GOTO 580 480 PLOT 3,25,10,6,67,14 490 PRINT "LET THE BATTLE":PLOT 3,29,14:PRINT "BEGIN!":PLOT 15:GOSUB 1260 500 PLOT 3,64,0:FOR I= 1TO 150:NEXT 510 GOSUB 570:FOR J= 9TO 15:PLOT 3,24,J:PRINT SPC( 17)"":NEXT 520 PLOT 15,6,2 530 GOSUB 950 540 PLOT 15,3,25,7:PRINT "COORDINATES OF":PLOT 3,27,9:PRINT "YOUR SHOT:" 550 PLOT 3,31,11:INPUT "";ST$:GOSUB 960:GOTO 1360 560 ON LSGOTO 1660,1770,1780 570 PLOT 3,64,26:RETURN :REM FORI=1TO950:NEXT:RETURN 580 PRINT "":PLOT 12,14:PRINT TAB( 6)"YOUR BOARD";TAB( 43)"COMPUCOLOR'S BOARD" 590 PLOT 15,3,0,2 600 PRINT " ";C$;"";TAB( 43);C$ 610 PLOT 3,2,24:PRINT "";C$;""TAB( 41);C$ 620 PLOT 27,24:X= 0:PRINT "":GOSUB 650:X= 22:GOSUB 650 630 PRINT "":X= 41:GOSUB 650:X= 63:GOSUB 650 640 PRINT "":PLOT 27,24:GOTO 660 650 PLOT 27,10,3,X,4:PRINT R$:PLOT 27,24:RETURN 660 X0= 1:Y0= 3:GOSUB 850:X0= 42:GOSUB 850 670 PLOT 6,3,3,0,26 680 PRINT " YOUR SHIPS H/V COL ROW";TAB( 42)"COMPUCOLOR'S SHIPS" 690 FOR I= 1TO 5:PLOT 6,2:PRINT S$(I);:PLOT 29,17 700 PRINT TAB( 41);S$(I):NEXT :Y= 27 710 GOSUB 2310:PLOT 3,26,Y:INPUT "";D$:GOSUB 910 720 PLOT 3,31,Y:INPUT "";C$:GOSUB 970 730 PLOT 3,36,Y:INPUT "";R$ 740 IF R$= ""THEN R= - 1:GOSUB 1030:GOTO 770 750 R= ASC (LEFT$ (R$,1))- 48:GOSUB 1030 760 GOSUB 2320 770 Y= Y+ 1:IF Y< 32THEN 710 780 FOR Y= 26TO 31:PLOT 3,24,Y:PRINT " ":NEXT 790 PLOT 6,7,3,25,27:PRINT "SUNKEN SHIPS":PLOT 3,25,29:PRINT " MARKED RED" 800 FOR I= 1TO 5 810 PS(I)= PS(I)+ 1:SC(I)= PS(I) 820 NEXT 830 GOTO 480 840 PLOT 3,31,10:GOSUB 350"";ST$:GOTO 1360 850 FOR I= 0TO 18STEP 2:PLOT 3,X0,Y0+ I 860 FOR J= 1TO 10:PRINT "ne";:NEXT :PRINT "a":NEXT 870 FOR I= 1TO 19STEP 2:PLOT 3,X0,Y0+ I 880 FOR J= 1TO 10:PRINT "a ";:NEXT :PRINT "a":NEXT 890 PLOT 3,X0,23:FOR K= 1TO 10:PRINT "ee";:NEXT :PRINT 900 RETURN 910 GOSUB 950:IF LEFT$ (D$,1)= "H" THEN SW= 1:GOSUB 1010:RETURN 920 IF LEFT$ (D$,1)= "V" THEN SW= 2:GOSUB 1010:RETURN 930 GOSUB 950:PRINT " PLEASE ENTER":PLOT 3,26,9:PRINT "EITHER H OR V" 940 PLOT 3,25,Y:PRINT SPC( 16)"":GOTO 710 950 FOR J= 5TO 12:PLOT 3,24,J:PRINT SPC( 17)"":NEXT :PLOT 3,24,7:RETURN 960 FOR J= 16TO 21:PLOT 3,24,J:PRINT SPC( 17)"":NEXT :PLOT 3,24,16:RETURN 970 GOSUB 950:IF LEFT$ (C$,1)< "A"OR LEFT$ (C$,1)> "J"THEN GOSUB 950:GOTO 990 980 GOSUB 1060:GOTO 1020 990 PRINT " PLEASE ENTER":PLOT 3,28,9:PRINT "A THRU J" 1000 GOSUB 1010:GOTO 720 1010 PLOT 3,27,Y:PRINT SPC( 14)"":RETURN 1020 C= ASC (C$)- 65:FOR I= 0TO C:Z= RND (1):NEXT :RETURN 1030 GOSUB 950:IF (R< 0)OR (R> 9)THEN PRINT " PLEASE ENTER":PLOT 3,28,9:PRINT "0 THRU 9":GOTO 1050 1040 PLOT 3,37,Y:PRINT SPC( 4):GOTO 1070 1050 GOSUB 1060:GOTO 730 1060 PLOT 3,32,Y:PRINT SPC( 9)"":RETURN 1070 S= Y- 26:FOR I= 0TO R:Z= RND (1):NEXT 1080 ON SWGOTO 1090,1120 1090 FOR I= 0TO PS(S):IF C+ I> 9 THEN ER= 1:GOTO 1150 1100 IF PB(C+ I,R)> 0THEN ER= 2:GOTO 1150 1110 NEXT :FOR I= 0TO PS(S):PB(C+ I,R)= S:NEXT :GOTO 1230 1120 FOR I= 0TO PS(S):IF R+ I> 9 THEN ER= 3:GOTO 1150 1130 IF PB(C,R+ I)> 0THEN ER= 4:GOTO 1150 1140 NEXT :FOR I= 0TO PS(S):PB(C,R+ I)= S:NEXT :GOTO 1230 1150 ON ERGOSUB 1160,1220,1160,1220:PLOT 3,26,Y:PRINT SPC( 15):GOTO 710 1160 GOSUB 950:PRINT "YOUR SHIP WOULD":PLOT 3,24,9:PRINT "BE OFF THE BOARD" 1170 PLOT 3,26,11:PRINT "TRY AGAIN!":RETURN 1180 GOSUB 950:PRINT " YOU PUT TWO":PLOT 3,28,9:PRINT "SHIPS IN" 1190 PLOT 3,26,11:PRINT "COLUMN "CHR$ (65+ C)" ROW"R+ I:RETURN 1200 GOSUB 950:PRINT " YOU PUT TWO":PLOT 3,28,9:PRINT "SHIPS IN" 1210 PLOT 3,26,11:PRINT "COLUMN "CHR$ (65+ C+ I)" ROW"R:RETURN 1220 ON SWGOSUB 1200,1180:RETURN 1230 PLOT 29:PLOT 19:S$= RIGHT$ (STR$ (S),1):ON SWGOTO 1240,1250 1240 FOR I= 0TO PS(S):PLOT 3,C+ C+ I+ I+ 2,R+ R+ 4:PRINT S$:NEXT :RETURN 1250 FOR I= 0TO PS(S):PLOT 3,C+ C+ 2,R+ R+ I+ I+ 4:PRINT S$:NEXT :RETURN 1260 S= 1:REM PLACE THE COMPUTER'S SHIPS IN MATRIX CB 1270 SW= INT (RND (1)* 2+ 1):C= INT (RND (1)* 10):R= INT (RND (1)* 10):ON SWGOTO 1280,1310 1280 FOR I= 0TO CS(S):IF C+ I> 9THEN GOTO 1270 1290 IF CB(C+ I,R)> 0THEN GOTO 1270 1300 NEXT :FOR I= 0TO CS(S):CB(C+ I,R)= S:NEXT :GOTO 1340 1310 FOR I= 0TO CS(S):IF R+ I> 9THEN GOTO 1270 1320 IF CB(C,R+ I)> 0THEN GOTO 1270 1330 NEXT :FOR I= 0TO CS(S):CB(C,R+ I)= S:NEXT 1340 S= S+ 1:IF S> 5THEN FOR I= 1TO 5:CS(I)= CS(I)+ 1:NEXT :RETURN 1350 GOTO 1270 1360 GOSUB 950:REM CHECK PLAYER'S SHOT 1370 IF LEFT$ (ST$,1)< "A"OR LEFT$ (ST$,1)> "J"OR LEN (ST$)< > 2THEN PLOT 3,23,11:PRINT SPC( 14)"":GOTO 540 1380 C= ASC (LEFT$ (ST$,1))- 65:R= ASC (MID$ (ST$,2,1))- 48 1390 IF R< 0OR R> 9THEN GOSUB 950:GOTO 530 1400 IF CB(C,R)= 0THEN CB(C,R)= - 18:GOTO 1470 1410 IF CB(C,R)> 0THEN CB(C,R)= CB(C,R)* - 1:GOTO 1500 1420 IF CB(C,R)< 0THEN GOSUB 950:PRINT " COLUMN "LEFT$ (ST$,1)" ROW "R 1430 PLOT 3,26,9:PRINT "ALREADY HIT!":PLOT 3,27,11:PRINT "TRY AGAIN!" 1440 PLOT 3,64,0:SEC= PEEK (33209) 1450 IF PEEK (33209)= SEC+ 3THEN 530 1460 GOTO 1450 1470 GOSUB 950:PRINT " "ST$" IS A MISS!":PLOT 3,27,9:PRINT "TOUGH LUCK!!":GOSUB 1490:PRINT "*" 1480 GOSUB 570:GOSUB 1490:PRINT "*":GOTO 560 1490 PLOT 3,C+ C+ 43,R+ R+ 4:RETURN :REM LOCATE SHOT ON COMPUTER'S BOARD 1500 GOSUB 950:PRINT " "ST$" IS A HIT!!":PLOT 3,28,9:PRINT "GOOD SHOT!":SB= ABS (CB(C,R)):REM A HIT 1510 CS(SB)= CS(SB)- 1:IF CS(SB)> = 1THEN 1550 1520 Q$= MID$ (S$(SB),4) 1530 GOSUB 960:PRINT " YOU SANK MY":PLOT 3,24,18:PRINT SPC( (17- LEN (Q$))/ 2);Q$ 1540 CC= CC- 1:PLOT 3,41,26+ SB,6,15:PRINT S$(SB):PLOT 6,2,3,64,0 1550 GOSUB 1490:PRINT "*":GOSUB 570:GOSUB 1490:PRINT "*":IF CC> 0THEN 560 1560 GOSUB 950:GOSUB 960:PLOT 3,28,7,14,31:PRINT "YOU WIN!" 1570 PLOT 3,64,0:FOR I= 1TO 500:NEXT I:GOSUB 570:GOSUB 960:GOSUB 950 1580 PLOT 15 1590 PLOT 3,25,9:PRINT "DO YOU WANT TO":PLOT 3,25,11 1600 PLOT 15,3,25,11:INPUT "PLAY AGAIN? ";AG$ 1610 IF LEFT$ (AG$,1)= "Y"THEN RUN 1645 1620 IF LEFT$ (AG$,1)= "N"THEN PLOT 1 1630 PLOT 3,25,11:PRINT SPC( 17)"":GOTO 1600 1645 CLEAR 500:RESTORE :GOSUB 360:GOTO 350 1660 GOSUB 2200:CS$= CHR$ (C1+ 65)+ CHR$ (R1+ 48):REM THE COMPUTER'S SHOTS 1670 IF PB(C1,R1)= 0THEN PB(C1,R1)= - 10:CL= C1:RL= R1:GOSUB 2160:GOTO 530 1680 IF PB(C1,R1)< 0 THEN GOTO 1660:REM SELECTED A PREVIOUS SHOT 1690 CL= C1:RL= R1:GOSUB 1950:LS= 2:GOTO 530 1700 PLOT 3,CL+ CL+ 2,RL+ RL+ 4:RETURN :REM LOCATE SHOT ON PLAYER'S BOARD 1710 GOSUB 950:GOSUB 960:PLOT 3,24,7,14,31:PRINT "COMPUCOLOR WINS!" 1720 GOSUB 570 1730 FOR C= 0TO 9:FOR R= 0TO 9 1740 PLOT 15:IF CB(C,R)> 0THEN GOSUB 1490:PRINT "*" 1750 NEXT :NEXT :GOSUB 950:PLOT 10:PLOT 10:PLOT 10:GOTO 1590 1760 CL= C1:RL= R1:D(DIR)= 1:RETURN :REM CAN'T GO THIS WAY 1770 DIR= INT (RND (1)* 4+ 1):IF D(DIR)= 1GOTO 1770:REM FIRE FOR EFFECT 1780 GOSUB 1810:IF PB(CL,RL)= 0THEN PB(CL,RL)= - 10:GOSUB 2160:GOSUB 1760:GOTO 530 1790 IF PB(CL,RL)< 0THEN GOSUB 1760:GOTO 1780:REM HIT PREVIOUS SHOT 1800 LS= 3:GOSUB 1950:GOTO 530 1810 K1= 0:K2= 0:K3= 0:K4= 0:Q1= 0:Q2= 0:Q3= 0:Q4= 0 1820 ON DIRGOSUB 1830,1860,1890,1920:CS$= CHR$ (CL+ 65)+ CHR$ (RL+ 48):RETURN 1830 K1= (D(1)= 0)+ (D(3)= 0):IF K1= 0 THEN DIR= 2:GOTO 1870 1840 Q1= (D(1)= 1)+ (CL+ 1> 9):IF Q1< 0 THEN GOSUB 1760:DIR= 3:GOTO 1890 1850 CL= CL+ 1:RETURN 1860 K2= (D(2)= 0)+ (D(4)= 0):IF K2= 0 THEN DIR= 3:GOTO 1900 1870 Q2= (D(2)= 1)+ (RL- 1< 0):IF Q2< 0 THEN GOSUB 1760:DIR= 4:GOTO 1920 1880 RL= RL- 1:RETURN 1890 K3= (D(3)= 0)+ (D(1)= 0):IF K3= 0 THEN DIR= 4:GOTO 1930 1900 Q3= (D(3)= 1)+ (CL- 1< 0):IF Q3< 0 THEN GOSUB 1760:DIR= 1:GOTO 1830 1910 CL= CL- 1:RETURN 1920 K4= (D(4)= 0)+ (D(2)= 0):IF K4= 0 THEN DIR= 1:GOTO 1840 1930 Q4= (D(4)= 1)+ (RL+ 1> 9):IF Q4< 0 THEN GOSUB 1760:DIR= 2:GOTO 1860 1940 RL= RL+ 1:RETURN 1950 IF (CL> 9OR CL< 0)OR (RL> 9OR RL< 0)THEN PRINT "CL=";CL,"RL=";RL 1951 IF SB> 5OR SB< 0THEN PRINT "SB=";SB 1952 IF NH> 16OR NH< 0THEN PRINT "NH=";NH 1955 SB= PB(CL,RL):PB(CL,RL)= PB(CL,RL)* - 1:GOSUB 2180:PS(SB)= PS(SB)- 1:HT(NH,0)= DIR 1960 HT(NH,1)= CL:HT(NH,2)= RL:IF PS(SB)= 0 THEN GOSUB 1980 1970 NH= NH+ 1:RETURN 1980 Q$= MID$ (S$(SB),4) 1990 GOSUB 960:PRINT " I SANK YOUR":PLOT 3,24,18:PRINT SPC( (17- LEN (Q$))/ 2);Q$ 2000 CP= CP- 1:PLOT 3,0,26+ SB,6,15:PRINT S$(SB):PLOT 6,2,3,64,0:IF CP= 0THEN 1710 2010 GOSUB 2070:SW= 0 2020 FOR I= NHTO 0STEP - 1:IF HT(I,0)> 0THEN C1= HT(I,1):R1= HT(I,2):DIR= HT(I,0):SW= 1 2030 NEXT :FOR I= 1TO 4:D(I)= 0:NEXT :IF SW= 0THEN LS= 1:GOTO 2050 2040 LS= 2:D(DIR)= 1:CL= C1:RL= R1:RETURN 2050 FOR I= 1TO 5:IF PS(I)> 0 THEN S1= I 2060 NEXT :S2= SC(S1)- 1:RETURN 2070 CW= CL:RW= RL:GOSUB 2140:I= 1 2080 I= I+ 1:IF I> SC(SB) THEN RETURN 2090 ON DIR GOSUB 2100,2110,2120,2130:GOTO 2080 2100 CW= CW- 1:GOSUB 2140:RETURN 2110 RW= RW+ 1:GOSUB 2140:RETURN 2120 CW= CW+ 1:GOSUB 2140:RETURN 2130 RW= RW- 1:GOSUB 2140:RETURN 2140 FOR J= 0TO NH:HT1= (HT(J,1)= CW)+ (HT(J,2)= RW):IF HT1= - 2 THEN HT(J,0)= 0 2150 NEXT :RETURN 2160 GOSUB 960:PRINT " MY SHOT "CS$:PLOT 3,24,18:PRINT " WAS A MISS!":GOSUB 1700:PRINT "*" 2170 GOSUB 570:GOSUB 1700:PRINT "*":RETURN 2180 GOSUB 960:PRINT " MY SHOT "CS$:PLOT 3,24,18:PRINT " WAS A HIT!":GOSUB 1700 2190 PRINT "*":GOSUB 570:GOSUB 1700:PRINT "*":RETURN 2200 KL= - 50:FOR J= 1TO GM:K9= 0 2210 C1= INT (RND (1)* 10):R1= INT (RND (1)* 10):IF PB(C1,R1)< 0 GOTO 2210 2220 FOR I= - S2TO S2:IF I= 0 GOTO 2240 2230 CT= C1+ I:RT= R1+ I:GOSUB 2260:GOSUB 2280 2240 NEXT :IF K9> KL THEN KL= K9:CL= C1:RL= R1 2250 NEXT :C1= CL:R1= RL:RETURN 2260 TST= (CT< 0)+ (CT> 9):IF TST< 0THEN K9= K9- .75:RETURN 2270 K9= K9+ (PB(CT,R1)< 0)* ABS (S2/ I):RETURN 2280 TST= (RT< 0)+ (RT> 9):IF TST< 0THEN K9= K9- .75:RETURN 2290 K9= K9+ (PB(C1,RT)< 0)* ABS (S2/ I):RETURN 2300 END 2310 PLOT 15,6,5,3,3,Y:PRINT MID$ (S$(Y- 26),4):PLOT 6,7:RETURN 2320 PLOT 15,6,2,3,0,Y:PRINT S$(Y- 26):RETURN