私はゲームの戦艦を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)
インデントを修正してください。あなたのエリフで評価したいことを考えてみましょう。角かっこを使用すると... – albert
まず、インデントを修正します。次に、[有効な応答を出すまで入力を求める]を読んでください(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)も参照してください。 –