基本的蟒蛇战舰游戏需要指导

时间:2016-04-11 18:39:32

标签: python pyscripter

我正在制作一个基本战舰游戏的剧本。我是python的新手,想要指导哪里出错了。我认为所有代码都在那里需要任何帮助将非常感谢谢谢!

 def main():

   from random import randint

#initializing board

board = []

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

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

#starting the game and printing the board

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

#defining where the ship is
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)

#asking the user for a guess

for turn in range(4):
    guess_row = int(raw_input("Guess Row:"))
    guess_col = int(raw_input("Guess Col:"))

    # if the user's right, the game ends
    if guess_row == ship_row and guess_col == ship_col:
        print ("Congratulations! You sunk my battleship!")
        break
    else:
        #warning if the guess is out of the board
        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.")

        #warning if the guess was already made

        elif(board[guess_row][guess_col] == "X"):
            print ("You guessed that one already.")

        #if the guess is wrong, mark the point with an X and start again

        else:
            print ("You missed my battleship!")
            board[guess_row][guess_col] = "X"

        # Print turn and board again here
        print ( "Turn " + str(turn+1) + " out of 4.")
        print_board(board)

#if the user have made 4 tries, it's game over
if turn >= 10:
    print ("Game Over")



if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:1)

首先,您的代码不会像这样运行,因为缩进被破坏了。在Python中,缩进不仅仅是一种好的风格,它使您的程序更具可读性;这是告诉计算机程序结构的原因。修复缩进后,我尝试了你的程序,它按预期工作。但是,不打印“游戏结束”消息,因为在打印时,变量turn包含最后分配给它的值3,而不是{{1 }}

对您的代码有一些随意的想法:

  • 将所有import语句放在文件的开头是一种很好的方式,除非你有理由不这样做。
  • 变量10在定义boardrandom_row的范围内可见,因此您无需将其作为参数传递。
  • 电路板尺寸和匝数是硬编码两次;在后一种情况下,你(可能是错误的)使用不同的数字。您可以通过为这些值定义常量(具有无法更改的大写名称的变量)并稍后使用它们来使代码更具可读性:

    random_col
  • BOARD_WIDTH = 5 BOARD_HEIGHT = 5 MAX_TURNS = 4 ... def random_col(): return random.randint(0, BOARD_WIDTH - 1) 之后,您不需要break,因为无论如何都会留下循环。

  • 您不需要使用else括号。