c64-basic/submarine-hunt/submarine-hunt.bas

27 lines
1.2 KiB
QBasic

10 PRINT CHR$(147):PRINT " SUBMARINE HUNT":PRINT
20 PRINT "THREE SUBS HIDE IN AN 8 BY 8 SEA.":PRINT "ENTER ROW,COLUMN. YOU HAVE 15 SHOTS.":PRINT
25 R=RND(-TI)
30 DIM S(8,8),F(8,8):FOR I=1 TO 3
40 R=INT(RND(1)*8)+1:C=INT(RND(1)*8)+1:IF S(R,C) THEN 40
50 S(R,C)=1:NEXT:H=0
60 FOR T=1 TO 15:GOSUB 150:PRINT "SHOT";T;" ROW,COLUMN (0,0 QUITS)";:INPUT R,C
70 IF R=0 AND C=0 THEN 210
80 IF R<1 OR R>8 OR C<1 OR C>8 THEN PRINT "OUTSIDE THE SEA.":GOTO 60
90 IF F(R,C) THEN PRINT "ALREADY CHECKED.":GOTO 60
100 F(R,C)=1:IF S(R,C) THEN H=H+1:PRINT "DIRECT HIT!":GOTO 120
110 PRINT "MISS. SONAR RANGE";:GOSUB 190:PRINT D
120 IF H=3 THEN PRINT "ALL SUBMARINES FOUND!":GOTO 200
130 NEXT:PRINT "OUT OF SHOTS. THE FLEET ESCAPED."
140 GOTO 200
150 PRINT CHR$(147):PRINT " 1 2 3 4 5 6 7 8":FOR Y=1 TO 8:PRINT Y;" ";
160 FOR X=1 TO 8:IF F(Y,X)=0 THEN PRINT ". ";
170 IF F(Y,X)=1 AND S(Y,X)=0 THEN PRINT "O ";
180 IF F(Y,X)=1 AND S(Y,X)=1 THEN PRINT "X ";
185 NEXT:PRINT:NEXT:PRINT "SUBS";H;"/3":RETURN
190 D=9:FOR Y=1 TO 8:FOR X=1 TO 8:IF S(Y,X)=1 AND F(Y,X)=0 THEN Q=ABS(Y-R)+ABS(X-C):IF Q<D THEN D=Q
195 NEXT X,Y:RETURN
200 PRINT:PRINT "R=REPLAY Q=QUIT"
210 GET A$:IF A$="R" THEN RUN
220 IF A$<>"Q" THEN 210
230 PRINT CHR$(147):END