我在Python中制作游戏战舰,并且陷入了一段代码。我制作了一个10×10的网格板,玩家/电脑将放置5个不同尺寸的船。这些船被存储在一本字典中。for循环播放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)
请修复您的缩进。想想你想在'elif'中评估什么。使用括号可能有帮助... – albert
首先,修复你的缩进。其次,阅读[询问用户输入,直到他们给出了有效的答复](http://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid-response ),但也[我如何测试一个变量对多个值?](https://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-multiple-values)。 –