Page 1 of 1

Help with Battleship 10x10 Game

Posted: Mon Jan 09, 2006 12:30 pm
by xkse
I pretty much finished a 10x10 version of battleship but am having trouble having two different hit counters. Currently as soon as I sink one battleship, the game ends. However I need it to end after both are sunk. The program is finished except for that (I think).

My right click is working right now (?) so I can't post the code; I'll try at my house later.

If anyone could tell me how to differentiate between the hit counters it would be much appreciated.

Again, I'll try and post the code later

Thanks[/code]

Posted: Mon Jan 09, 2006 12:59 pm
by PQBC...
Since you are probably running Windows, it will take about a minute to do get your code here. Save your file as ********.TXT instead of ********.BAS. Then, open up notepad ad your file. Select all of your code, and then click copy. Open up a message here on the forums, and in the post box, press CTRL+V. The code sould appear.

But, an easy alternative should be this:
After you sink a ship, the game ends. (Thats what you explained) You could add an IF/THEN statement and a counter for how many ships have been sunk. EX:

Code: Select all

IF shotsonbattleship = 4 THEN shipssunk = shipssunk+1 'Or what ever event makes the ship "sunk"
IF shipssunk = 2 THEN CALL EndGame ' Ends the game if 2 ships are sunk.
Post your code and it will be alot easier to help.

Posted: Mon Jan 09, 2006 7:48 pm
by xkse
Ok thanks.

Will post code tomorrow

Posted: Tue Jan 10, 2006 12:18 pm
by xkse
Here is the code

I've set up two different hit counters, but only have set them to 0. I haven't done anything with them, however.

Here's the code:

Code: Select all

start:
CLS
DIM b$(10, 10)


RANDOMIZE TIMER

FOR r = 1 TO 10
FOR c = 1 TO 10
b$(r, c) = "e"
NEXT c
NEXT r


r1 = INT(8 * RND) + 1
c1 = INT(8 * RND) + 1

r2 = INT(8 * RND) + 1
c2 = INT(8 * RND) + 1

p1 = INT(2 * RND) + 1

p2 = INT(2 * RND) + 1


IF p1 = 1 THEN
        FOR i = c1 TO (c1 + 2)
        b$(r1, i) = "b"
        NEXT i
END IF

IF p1 = 2 THEN
        FOR i = r1 TO (r1 + 2)
        b$(i, c1) = "b"
        NEXT i
END IF

IF p2 = 1 THEN
        FOR i = c2 TO (c2 + 2)
        b$(r2, i) = "b"
        NEXT i
END IF

IF p2 = 2 THEN
        FOR i = r2 TO (r2 + 2)
        b$(i, c2) = "b"
        NEXT i
END IF

s = 0
h1 = 0
h2 = 0

        INPUT "What is the maximum number of shots"; maxshots

DO
        s = s + 1
       
        PRINT "Guess a point where the battleship is (max is 10, 10)"; "Shot number"; s;
        INPUT r, c

                IF b$(r, c) = "s" THEN
                        PRINT
                        PRINT "You already shot there"
                        PRINT
               
                ELSEIF b$(r, c) = "h" THEN
                        PRINT
                        PRINT "You already shot there (and it was a hit)"
                        PRINT

                ELSEIF b$(r, c) = "e" THEN
                        PRINT
                        PRINT "You missed, try again"
                        PRINT
                        b$(r, c) = "s"

                ELSE
                        PRINT
                        PRINT "That shot was a hit!"
                        PRINT
                        h = h + 1
                        b$(r, c) = "h"
                                IF h = 3 THEN
                                s = maxshots
                                PRINT "You sunk a battleship!"
                                END IF
                END IF
LOOP UNTIL s = maxshots


IF h1 = 3 AND h2 = 3 THEN PRINT "Great job, you sunk the battleships!"


IF p1 = 1 AND (h1 < 3 OR h2 < 3) THEN
PRINT "Unfortunately, you didn't sink the battleship(s)"
PRINT "The battleship was in spots"; r1; ","; c1; ";", r1; ","; (c1 + 1); ";"; ","; "and"; r1, (c1 + 2)
END IF

IF p1 = 2 AND (h1 < 3 OR h2 < 3) THEN
PRINT "Unfortunately, you didn't sink the battleship(s)"
PRINT "The battleship was in spots"; r1; ","; c1; ";", (r1 + 1); ","; c1; ";"; ","; "and"; (r1 + 2), c1
END IF

IF p2 = 1 AND (h1 < 3 OR h2 < 3) THEN
PRINT "Unfortunately, you didn't sink the battleship(s)"
PRINT "The battleship was in spots"; r2; ","; c2; ";", r2; ","; (c2 + 1); ";"; ","; "and"; r2, (c2 + 2)
END IF

IF p2 = 2 AND (h1 < 3 OR h2 < 3) THEN
PRINT "Unfortunately, you didn't sink the battleship(s)"
PRINT "The battleship was in spots"; r2; ","; c2; ";", (r2 + 1); ","; c2; ";"; ","; "and"; (r2 + 2), c2
END IF




INPUT "Would you like to play again(y, n)"; j$
j$ = LCASE$(j$)

IF j$ = "y" THEN GOTO start

finish:

END



Posted: Wed Jan 11, 2006 12:17 pm
by xkse
Anyone?

Posted: Wed Jan 11, 2006 9:08 pm
by moneo
xkse:

SEE MY COMMENTS WITHIN THE CODE.
*****Moneo*****

Code: Select all

start:
CLS
DIM b$(10, 10)

RANDOMIZE TIMER

FOR r = 1 TO 10
FOR c = 1 TO 10
b$(r, c) = "e"
NEXT c
NEXT r


r1 = INT(8 * RND) + 1
c1 = INT(8 * RND) + 1

r2 = INT(8 * RND) + 1
c2 = INT(8 * RND) + 1

p1 = INT(2 * RND) + 1

p2 = INT(2 * RND) + 1


IF p1 = 1 THEN
        FOR i = c1 TO (c1 + 2)
        b$(r1, i) = "b"
        NEXT i
END IF

IF p1 = 2 THEN
        FOR i = r1 TO (r1 + 2)
        b$(i, c1) = "b"
        NEXT i
END IF

IF p2 = 1 THEN
        FOR i = c2 TO (c2 + 2)
        b$(r2, i) = "b"
        NEXT i
END IF

IF p2 = 2 THEN
        FOR i = r2 TO (r2 + 2)
        b$(i, c2) = "b"
        NEXT i
END IF

s = 0
h1 = 0
h2 = 0

        INPUT "What is the maximum number of shots"; maxshots

DO
        s = s + 1
       
        PRINT "Guess a point where the battleship is (max is 10, 10)"; "Shot number"; s;
        INPUT r, c

                IF b$(r, c) = "s" THEN
                        PRINT
                        PRINT "You already shot there"
                        PRINT
               
                ELSEIF b$(r, c) = "h" THEN
                        PRINT
                        PRINT "You already shot there (and it was a hit)"
                        PRINT

                ELSEIF b$(r, c) = "e" THEN
                        PRINT
                        PRINT "You missed, try again"
                        PRINT
                        b$(r, c) = "s"

                ELSE
                        PRINT
                        PRINT "That shot was a hit!"
                        PRINT
                        h = h + 1
                        b$(r, c) = "h"
                                IF h = 3 THEN
                                s = maxshots
                                PRINT "You sunk a battleship!"
                                END IF
                END IF
LOOP UNTIL s = maxshots

REM *** SO FAR, YOU NEVER SET ANYTHING INTO H1 AND H2
REM *** WHICH YOU THEN TEST IN THE NEXT INSTRUCTION.

IF h1 = 3 AND h2 = 3 THEN PRINT "Great job, you sunk the battleships!"

REM *** HERE AGAIN, THE FOLLOWING "IF'S" TEST FOR H1 AND H2
REM *** WHICH WILL STILL BE ZERO.

IF p1 = 1 AND (h1 < 3 OR h2 < 3) THEN
PRINT "Unfortunately, you didn't sink the battleship(s)"
PRINT "The battleship was in spots"; r1; ","; c1; ";", r1; ","; (c1 + 1); ";"; ","; "and"; r1, (c1 + 2)
END IF

IF p1 = 2 AND (h1 < 3 OR h2 < 3) THEN
PRINT "Unfortunately, you didn't sink the battleship(s)"
PRINT "The battleship was in spots"; r1; ","; c1; ";", (r1 + 1); ","; c1; ";"; ","; "and"; (r1 + 2), c1
END IF

IF p2 = 1 AND (h1 < 3 OR h2 < 3) THEN
PRINT "Unfortunately, you didn't sink the battleship(s)"
PRINT "The battleship was in spots"; r2; ","; c2; ";", r2; ","; (c2 + 1); ";"; ","; "and"; r2, (c2 + 2)
END IF

IF p2 = 2 AND (h1 < 3 OR h2 < 3) THEN
PRINT "Unfortunately, you didn't sink the battleship(s)"
PRINT "The battleship was in spots"; r2; ","; c2; ";", (r2 + 1); ","; c2; ";"; ","; "and"; (r2 + 2), c2
END IF

INPUT "Would you like to play again(y, n)"; j$
j$ = LCASE$(j$)

IF j$ = "y" THEN GOTO start

finish:

END

Your next objective

Posted: Mon Jan 16, 2006 9:13 pm
by Mavrik
I hope you are working on a graphic type battleship game. That would be awesome. I tried your code and it plays very well. Have fun.

Russ ;-) Happy Programming!

Posted: Tue Jan 17, 2006 2:24 pm
by moneo
That's funny, I can't see how the code could "play very well" when the variables H1 and H2 are always zero, as indicated in my previous post.
*****