Listing of file='BSHIP.BAS;01' on disk='vmedia/battleship-sector.ccvf'
10 REM Y X10 REM BATTLESHIPS. COPYRIGHT (C) A.W.GROGONO, 1979 11 RESTORE :CLEAR 1000:C$(I)= "NOT ON MAP":C$(2)= "HIT ALREADY" 12 DIM SQ(99),SH(6,4),R$(99):REM SQUARES, SHIPS, REPORTS 15 DATA -9,1,11,10,9,-1,-11,-10:REM DIRECTIONS 16 FOR I= 0TO 7:READ DR(I):NEXT I:REM DR = DIREC 17 DATA "B A T T L E S H I P S",11,25,47 18 READ B$:FOR I= 0TO 2:READ CL(I):NEXT I:REM TITLE, COLS 20 DATA "BATTLESHIP","CRUISER","DESTROYER" 21 FOR I= 0TO 2:READ SH$(I):NEXT I:REM NAMES OF SHIPS 22 PLOT 27,24,29,15,14,6,6,12,3,20,5:PRINT B$ 23 PLOT 3,13,11:INPUT "DO YOU WANT INSTRUCTIONS, Y OR N ? ";Z$ 24 IF Z$< > "N"THEN GOSUB 2000 25 PLOT 6,2,12,14,3,17,5:INPUT "SELECT EASY OR DIFFICULT: ";Z$ 26 H= 2* (69- ASC (LEFT$ (Z$,1))):IF H< > 0AND H< > 2THEN 25 27 DATA "B","C","C","D","D","D"," "," ":REM CLUES 28 RESTORE 27:DIM CL$(8):FOR I= 1TO 8:READ CL$(I):NEXT I 30 DEF FN Y(S)= INT (S/ 10):REM Y FROM S 31 DEF FN X(S)= S- 10* FN Y(S):REM X FROM S 32 CS= 37:CH= 38:REM COLOR SEA & HIT 40 PLOT 27,24,29,15,14,6,1,12,3,28,1:PRINT B$:REM TITLE 50 DATA "teeeu","a b","vw":REM OUTLINE FOR SQUARE 60 FOR I= 1TO 3:READ I$(I):FOR J= 1TO 5:REM READ SHAPE 70 I$(I)= I$(I)+ CHR$ (26):NEXT J:REM BACKSPACES 80 I$(I)= I$(I)+ CHR$ (10- 15* (I= 3)):REM DOWN OR SPACE 90 NEXT I:I$= "":FOR I= 1TO 3:I$= I$+ I$(I):NEXT I 91 I$= I$+ CHR$ (25) 95 CL$= "" 100 PLOT 15,6,CS,30 110 FOR S= 0TO 99:R$(S)= "":GOSUB 900:PRINT :NEXT S:REM SEA 180 FOR S= 0TO 99:SQ(S)= 8:NEXT S:REM 8 = EMPTY 190 FOR I= 0TO PEEK (33209):R= RND (1):NEXT I:REM RND 200 PLOT 6,2,8:PRINT "BEING PLACED":GOSUB 910 205 FOR I= 1TO 6:PLOT 3,0,N+ 1:PRINT " ":NEXT I 210 N= 0:FOR L= 4TO 2STEP - 1:REM LENGTH 220 FOR M= 1TO 5- L:N= N+ 1:REM # IN CLASS, TOTAL # 230 SQ= INT (100* RND (1)):DR= INT (8* RND (1)):REM SQR & DIREC 240 FOR I= 0TO 34:SQ= SQ+ 7+ 100* (SQ> 92):REM INC SQUARE 244 SH= INT ((N+ 1.4)/ 2.5):REM SHIP NAME FROM N 246 PLOT 6,2* SH+ 1,3,0,N+ 1:PRINT SH$(SH) 250 FOR J= 0TO 7:DR= - (DR+ 1)* (DR< 7):D= DR(DR):REM DIREC 252 S= SQ:E= S+ L* D:REM START & END OF SHIP 254 IF SQ(S)< > 8THEN 340 256 IF E< 0OR E> 99THEN 340:REM JUMP IF OUT OF RANGE 258 IF INT (E/ 10)- INT (S/ 10)< > L* INT ((D+ 1)/ 10)THEN 340 260 IF S+ D< 9OR S+ D> 90OR FN X(S)= 9OR FN X(S)= 0THEN 340 270 FOR P= 0TO L:SH(N,P)= S+ P* D:REM POSNS ALONG SHIP 280 IF SQ(S+ P* D)< > 8THEN 340:REM TEST SQR EMPTY 290 NEXT P:FOR P= 0TO L:REM POSN ALONG SHIP 300 S= SH(N,P):SQ(S)= N:REM SQ #, # OF SHIP (1 - 6) 310 FOR K= 0TO 7:E= S+ DR(K):REM TOUCHING SQUARES 312 IF E< 0OR E> 99THEN 330:REM OUTSIDE MAX 314 IF ABS (FN X(S)- FN X(E))> 1THEN 330:REM OUTSIDE EDGES 320 IF SQ(E)< > NTHEN SQ(E)= 7:REM 7 = TOUCHING 330 NEXT K:NEXT P:NEXT M:NEXT L:GOTO 350 340 NEXT J:NEXT I:GOTO 180:REM RESTART IF NO ROOM 350 PLOT 6,2,8:PRINT "CHOOSE SQUARES:":GOSUB 910 360 GOTO 390:REM OMIT THIS STEP TO SEE SHIPS POSITIONED 370 GOSUB 1000:REM PRINTS ALL SHIPS 390 C= - 1:REM COUNT ATTEMPTS 395 REM SELECT SQUARE: 400 - 450 400 FOR I= 0TO H:C= C+ 1:A= INT (C/ 3):B= C- 3* A:REM POS SELEC 410 PLOT 6,2,3,3* B,2+ A,32,32,32,26,26,26:REM POSN SELECT 420 INPUT "";S:S(B)= S:J= - (S< 0OR S> 99):REM NOT IN MAP J=1 422 IF J= 0THEN J= - 2* (SQ(S)< 1):REM TAKEN 430 IF J= 0THEN GS(I)= SQ(S):SQ(S)= 0:NEXT I:GOTO 460 440 PLOT 6,3,3,0,3+ A:PRINT C$(J):FOR K= 1TO 600:NEXT K 450 PLOT 3,0,3+ A:PRINT " ":GOTO 410 460 ON - (H= 0)GOTO 500:REM AVOID SORT IF SINGLE SHOT 465 REM SORT SHIPS BY LENGTH: 470 -480 470 GS= GS(0):IF GS(1)< GSTHEN GS(0)= GS(1):GS(1)= GS:REM SORT 480 GS= GS(1):IF GS(2)< GSTHEN GS(1)= GS(2):GS(2)= GS:GOTO 470 490 REM ASSEMBLE CLUE & PRINT: 500 - 540 500 CL$= "":IF H= 0THEN CL$= " ":REM CLUE STRING 510 FOR I= 0TO H:CL$= CL$+ CL$(GS(I)):NEXT I:REM CLUE 520 IF H= 0THEN CL$= CL$+ " " 521 A$= STR$ (A+ 1):LA= LEN (A$):A$= RIGHT$ (A$,LA- 1):REM SLVO 522 A$= CHR$ (26)+ CHR$ (26)+ CHR$ (26)+ CHR$ (28)+ A$ 524 PLOT 6,11,3,9,A+ 2:PRINT " " 525 PLOT 3,10- H+ B,2+ A:IF H= 2THEN PRINT CL$;:GOTO 529 527 PRINT MID$ (CL$,2,1);:REM LIST CLUES 529 PRINT " ":IF H= 2THEN CL$= CL$+ A$ 530 FOR I= 0TO H:S= S(B- H+ I):N= GS(I):SH= INT ((N+ 1.4)/ 2.5) 540 R$(S)= CL$:PLOT 6,CH:GOSUB 900:PRINT :NEXT I:REM HITS 550 REM EXAMINE HITS: TEST SHIPS SUNK ? 560 - 700 560 FOR I= 0TO H:N= GS(I):SH= INT ((N+ 1.4)/ 2.5) 600 IF N> 6THEN 700:REM SKIP IF NO HIT 610 L= 4- SH:FOR P= 0TO L:S= SH(N,P):REM SQUARES 620 IF SQ(S)< > 0THEN 700:REM SKIP IF NO HIT 630 NEXT P: 640 FOR P= 0TO L:PLOT 6,CL(4- L):S= SH(N,P):REM POS COL SQ 645 SQ(S)= .1 650 GOSUB 900:PRINT :NEXT P:SK= SK+ 1:REM COL SQ, # SUNK 660 PLOT 3,0,A+ 3:PRINT SH$(SH):PRINT "SUNK" 670 FOR J= 1TO 500:NEXT J:PLOT 6,2,3,0,A+ 3:REM CLEAR SCREEN 680 FOR J= 1TO 2:PRINT " ":NEXT J 700 NEXT I:IF SK< 6THEN 400:REM REPEAT IF NOT ALL SUNK 790 REM END OF GAME 800 PLOT 3,0,A+ 3:PRINT "ALL SHIPS SUNK" 802 PRINT "USING";C+ 1;" SHOTS":IF H= 0THEN 810 804 PRINT "IN";A+ 1;" SALVOS" 810 PRINT :PRINT "HIT RETURN TO":PRINT "PLAY OR ENTER" 820 INPUT "M FOR MENU: ";Z$:IF Z$< > "M"THEN 10 830 LOAD "MENU":RUN 900 PLOT 3,14+ 5* FN X(S),2+ 3* FN Y(S):PRINT I$;:REM DRAW SQR 902 S$= STR$ (S):LS= LEN (STR$ (S)):IF LS< 3THEN PLOT 25:REM SPC 904 S$= RIGHT$ (S$,LS- 1):PRINT S$;:REM # OF SQR 906 PLOT 26,26,26,28,29:PRINT R$(S);:REM CLUES 907 RETURN 910 FOR I= 2TO 7:PLOT 3,0,I:PRINT " ":NEXT I:RETURN 1000 N= 0:FOR L= 4TO 2STEP - 1:REM SUBROUTINE TO PRINT SHIPS 1005 FOR M= 1TO 5- L:N= N+ 1:REM M= # OF EACH TYPE, N=TOTAL 1010 FOR P= 0TO L:S= SH(N,P):PLOT 6,CL(4- L):GOSUB 900 1020 PRINT :NEXT P:NEXT M:NEXT L:RETURN 2000 PLOT 6,11,12,3,20,3,14:PRINT B$:REM INSTRUCTIONS 2010 PLOT 15:PRINT ,"SIX SHIPS ARE HIDDEN IN THE SEA" 2020 PRINT ,"THE SEA IS A 1O X 1O SQUARE" 2030 PRINT ,"THE SQUARES ARE NUMBERED FROM 0 TO 99" 2040 PRINT ,"TO FIRE INTO A SQUARE, ENTER THAT NUMBER ":REM 2050 PRINT ,"IN THE EASY VERSION YOU FIRE SINGLE SHOTS" 2060 PRINT ,"IN THE DIFFICULT GAME, FIRE 3 AT A TIME" 2070 PRINT ,"YOU WILL SEE A REPORT PRINTED IN THE SQUARE(S)" 2080 PRINT ,"THE REPORT MIGHT BE BCD INDICATING":REM 2090 PRINT ,"THAT YOU HIT THREE SHIPS IN THAT SALVO" 2100 PRINT ,"A BATTLESHIP, A CRUISER & A DESTROYER" 2110 PRINT ,"FIND WHICH SHIP IS WHICH BY FURTHER SHOOTING ":REM 2120 PRINT :PRINT ,"RULES:":PRINT ,"NO SHIP TOUCHES ANOTHER" 2130 PRINT ,"NO SHIP LIES ALONGSIDE A WALL":PRINT 2140 PRINT ,"SHIPS: 1 BATTLESHIP":PRINT ,,"2 CRUISERS" 2150 PRINT ,,"3 DESTROYERS":PRINT :PRINT ,"AN EXAMPLE IS SHOWN" 2160 PRINT ,"WITH 6 SHIPS IN POSITION:":PRINT 2170 PRINT ,,"PRESS RETURN TO CONTINUE":RESTORE 2200 2180 FOR I= 1TO 10:PLOT 6,2,3,52,20+ I:READ I$:REM EXAMPLE 2190 PRINT I$:NEXT I:PLOT 6,11,3,42,30:INPUT "";Z$:RETURN 2200 DATA "D B " 2210 DATA " D B " 2220 DATA " D D C B " 2230 DATA " D C B " 2240 DATA " D C B " 2250 DATA " C B " 2260 DATA "C " 2270 DATA " C " 2280 DATA " C DDD " 2290 DATA " C "