2016-04-11 60 views
-1

我正在研究基本戰列艦遊戲的這個腳本。我是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() 
+2

你有什麼問題?你發佈的代碼很奇怪,你的main()函數只有一行,它所做的只是導入randint。 –

+2

這是什麼問題? – jDo

+0

您好,主要是我會出錯! – John

回答

1

首先,您的代碼不會像這樣運行,因爲縮進被打破。在Python中,縮進不僅僅是一種很好的樣式,它使得程序更具可讀性;這就是告訴計算機程序的結構。修復了縮進之後,我嘗試了您的程序,並按預期工作。但是,「遊戲結束」消息未打印,因爲在打印時,變量turn包含最後分配給它的值3,而不是10

在你的代碼的一些雜感:

  • 這是很好的風格把所有import語句在文件的開頭,除非你有一個理由不這樣做。
  • 變量boardrandom_rowrandom_col被定義的範圍內可見,所以您不需要將它作爲參數傳遞。
  • 板的大小和圈數是硬編碼的兩倍;在後一種情況下,你(可能是錯誤的)使用不同的數字。您可以使代碼更易讀定義常量的值(與不能改變大寫名稱變量),然後再使用它們:

    BOARD_WIDTH = 5 
    BOARD_HEIGHT = 5 
    MAX_TURNS = 4 
    
    ... 
    
    def random_col(): 
        return random.randint(0, BOARD_WIDTH - 1) 
    
  • break,你不需要else因爲無論如何,該循環仍然存在。

  • 您不需要與elif的括號。