在战舰Python游戏中,用循环遍历dict.items()

2024-05-08 18:11:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python制作战舰游戏,却被一段代码卡住了。我做了一个10x10网格板,玩家/计算机将放置5艘不同尺寸的飞船。船被保存在字典里。

我已经在我卡住的地方做了标记。当玩家尝试放置一艘飞船时,如果该船没有可用的位置,它会打印“无效选择”,玩家应该可以再次放置它。但是循环继续,因此跳过了放置飞船的步骤。我尝试过将函数称为“player-place-chu ships”,但是它会重新启动,并放置已经放置的飞船的副本。

我在考虑在for循环中创建一个count,并从“无效选择”之前停止的地方重新启动循环,但不确定从中启动for循环是否可行dict.项目在特定地点?

希望有一个好心的人能给我一些建议,我对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


Tags: 代码inboardforinput玩家rangeplace
1条回答
网友
1楼 · 发布于 2024-05-08 18:11:02

您可以使用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并从while中跳出,而不是改变ship_not_placed(我从来都不明白这两者之间的最佳实践是什么)

相关问题 更多 >

    热门问题