Compucolor.org – Virtual Media

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      "