2017-07-28 11 views
0

私はゲームの戦艦をPythonで作っており、コードの一部にこだわりました。私はプレーヤー/コンピュータが異なるサイズの5つの船を置く10x10グリッドボードを作った。船は辞書に保管されています。戦艦パイソンゲームでのdict.items()のループの場合

私は#私が立ち往生している場所を不自然にしました。プレイヤーが利用できない場所に船を置こうとすると、「無効な選択」が表示され、プレイヤーはそれを再び置くことができます。しかし、ループは継続しているため、その船を飛ばすことはスキップします。私は関数 "player_place_ships"を呼び出すことを試みましたが、それはすべて開始し、既に配置されている船舶の複製を置きます。

私は、forループでカウントを作成し、 "無効な選択"の前に中断した場所からループを開始することを考えていましたが、特定の場所でdict.itemsからforループを開始することができるかどうかは不明です。

そこにある種の洞察がありますが、私はむしろPythonで新しいので、悪い/非正統的なコードをここで使用している可能性があります。ここで

はコードです:あなたは私が何を意味するか知っているので、ここで

#Dictionary for ships 
ships = {'A': 5, 'B': 4, 'C': 3, 'S': 3, 'D': 2} 

#Create player board 
player_board = [] 

for player_row in range(10): 
    player_board.append([]) 
    for player_col in range(10): 
     player_board[player_row].append('.') 

#Print player board 
def print_player_board(player_board): 
    for player_row in player_board: 
     print(" ".join(player_row)) 



def player_place_ships(player_board, ships): 

    for i, j in ships.items(): 

    ori = input('Enter orientation, v or h: ') 
    x = int(input('Enter row: ')) 
    y = int(input('Enter col: ')) 
    place = x,y 
    placement = player_board[x][y] 
    if ori == 'v' and placement == '.': 
     for k in range(j): 
      player_board[x][y] = i 
      player_board[x+k][y] = i 
    elif ori == 'h' and placement == '.': 
     player_board[x][y] = i 
     player_board[x][y+k] = i 
    elif ori != 'v' or 'h' and placement != '.': 
     print('Invalid choice, please try again.') #This is where I'm stuck 

player_place_ships(player_board, ships) 
print_player_board(player_board) 

は、出力のスクリーンショットです: invalid choice

+0

インデントを修正してください。あなたのエリフで評価したいことを考えてみましょう。角かっこを使用すると... – albert

+1

まず、インデントを修正します。次に、[有効な応答を出すまで入力を求める]を読んでください(http://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid-response )[複数の値に対して1つの変数をテストするにはどうすればよいですか](https://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-multiple-values)も参照してください。 –

答えて

0

あなたはwhile ship_not_placed

def player_place_ships(player_board, ships): 
    for i, j in ships.items(): 
    ship_not_place = true 
    while ship_not_placed : 
     ori = input('Enter orientation, v or h: ') 
     x = int(input('Enter row: ')) 
     y = int(input('Enter col: ')) 
     place = x,y 
     placement = player_board[x][y] 
     if ori == 'v' and placement == '.': 
     for k in range(j): 
      player_board[x][y] = i 
      player_board[x+k][y] = i 
     ship_not_place = false 
     elif ori == 'h' and placement == '.': 
     player_board[x][y] = i 
     player_board[x][y+k] = i 
     ship_not_place = false 
     elif ori != 'v' or 'h' and placement != '.': 
     print('Invalid choice, please try again.') 
であなたの問題を解決するかもしれません

またはちょうどwhile trueとし、変更する代わりに中断してくださいship_not_placed (私は2つのベストプラクティスを理解したことはありません)

+0

本当にありがとうpwnsauce、それはトリックをした!信じられないほどのこと:真実/偽はすべてそれが働く必要があった。私は考えている間に思うかもしれない= P – Tinadark

+0

@Tinadarkこれはほとんどのプログラミング言語の解決策になるだろう – pwnsauce

関連する問題