2017-07-28 51 views
0

我在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) 

下面是输出的一个屏幕截图,让你知道我的意思: invalid choice

+0

请修复您的缩进。想想你想在'elif'中评估什么。使用括号可能有帮助... – albert

+1

首先,修复你的缩进。其次,阅读[询问用户输入,直到他们给出了有效的答复](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)。 –

回答

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 (我从未理解这两者之间的最佳做法)

+0

非常感谢你们的这个诀窍!难以置信的是,一段时间:真假只是它需要的一切。我可能是过度的,而我的代码我认为= P – Tinadark

+0

@Tinadark这将是大多数编程语言的解决方案 – pwnsauce