2016-04-11 6 views
-1

私は基本的な戦艦ゲームのこのスクリプトに取り組んでいます。私はPythonには初心者で、どこが間違っているかについていくつかの指導をしたいと思います。私はすべてのコードが必要だと思っています。基本的な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()関数は1行だけであり、import randintだけです。 –

+2

何が問題なのですか? – jDo

+0

こんにちはその主にどこが間違って行く! – John

答えて

1

まず、インデントが壊れているため、コードはこのように実行されません。 Pythonでは、字下げは、プログラムを読みやすくする良いスタイルではありません。それはコンピュータにあなたのプログラムの構造を伝えるものです。インデントを修正した後、あなたのプログラムを試してみましたが、期待どおりに動作しました。しかし、 "Game Over"メッセージは印刷されません。なぜなら、印刷されるポイントでは、変数turnには3という値が最後に割り当てられていて、10ではないためです。

あなたのコードのいくつかのランダムな思考:

  • それはあなたがそうでなければ行うには理由がない限り、ファイルの先頭にすべてのimport文を入れて良いスタイルです。
  • 変数boardは、random_rowrandom_colが定義されているスコープで表示されるため、パラメータとして渡す必要はありません。
  • ボードサイズとターン数は2回ハードコードされています。後者の場合は、おそらく間違って別の番号を使用しています。あなたはこれらの値の定数(変更することはできません大文字の名前を持つ変数)を定義し、後でそれを使用して、コードを読みやすくすることができます

    BOARD_WIDTH = 5 
    BOARD_HEIGHT = 5 
    MAX_TURNS = 4 
    
    ... 
    
    def random_col(): 
        return random.randint(0, BOARD_WIDTH - 1) 
    
  • breakした後、あなたはelseためには必要ありませんループはとにかく残されます。

  • 括弧はelifでは必要ありません。
関連する問題