Code gets passed, but my ship guess incorrectly shows on map as "X"


#1

Hi guys,

Battleships are over ! was tough though...

Anyways, it's bugging me that my battleship guess "X" shows incorrectly. Somehow the coordinates that are being passed are getting an addition of 1 i.e. guess of row 2 and col 3 shows as if it was row 3 and row 4.

Can't find the ■■■■ bug !

Help much appreciated !

from random import randint

board = []

for x in range(5):
    board.append(["O"] * 5)

def print_board(board):
    for row in board:
        print " ".join(row)

print "Let's play Battleship!"
print_board(board)

def random_row(board):
    return randint(0, len(board) - 1)

def random_col(board):
    return randint(0, len(board[0]) - 1)

ship_row = random_row(board)
ship_col = random_col(board)

# Everything from here on should go in your for loop!
# Be sure to indent four spaces!


for turn in range(4):
    if turn == 3:
        print "Game Over" 
        break
    print "Turn", turn + 1
    guess_row = int(raw_input("Guess Row:"))
    guess_col = int(raw_input("Guess Col:"))
    if guess_row == ship_row and guess_col == ship_col:
        print "Congratulations! You sunk my battleship!"
        break
    else:
        if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):
            print "Oops, that's not even in the ocean."
        elif(board[guess_row][guess_col] == "X"):
            print "You guessed that one already."
        else:
            print "You missed my battleship!"
            board[guess_row][guess_col] = "X"
        # Print (turn + 1) here!
        print_board(board)

#2

uhm... list are zero indexed based? And you start counting at 1? This causes the "bug"

You could of course code it to compensate for the zero indexed base of the lists


#3

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.