Compucolor.org – Virtual Media

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