【问题标题】:Tic Tac Toe diagonal check井字游戏对角线检查
【发布时间】:2017-11-21 22:33:56
【问题描述】:

我正在构建一个井字游戏,我有一个看起来像这样的垂直和水平检查:

def check_win_left_vert (board):
    win = True
    x = 0
    for y in range (2):
        if board[y][x] != board[y+1][x]:
            win = False
    return win

它通过增加 y 轴来查看棋盘;我对 x 轴使用相同的方法。我将如何为对角轴执行此操作?我会增加两者吗?

【问题讨论】:

  • 只有 8 行要检查,因此创建相关索引的元组列表要简单得多,然后对其进行迭代以提取板值:XYZ = [(0,1,2), (3,4,5), ... ]; for x, y, z in XYZ: if board[x] == board[y] == board[z]: ...

标签: python tic-tac-toe


【解决方案1】:

您可以在一条对角线上使用相同的变量,而在另一条对角线上使用“2 反转”:

for x in range(2):
    if board[x][x] ...

for x in range(2):
    if board[x][2-x] ...

请注意,您必须注意边界条件。我强烈怀疑您还没有费心测试您的水平代码,因为它试图检查板右边缘的空间。缩小范围以解决该问题。

【讨论】:

    【解决方案2】:

    你需要在同一个循环中检查对角线大小写

        if board[y][y] != board[y+1][y+1] or board[2-y][y] != board[1-y][1+y]:
            win = False
        if win == False:
            break;
    

    【讨论】:

      【解决方案3】:

      所有带有列表推导的检查

      game_board = [ [1, 0, 1],
                     [0, 1, 0],
                     [0, 1, 0] ]
      
      # Horizontals
      h = [str(i+1) + ' Row' for i, v in enumerate(game_board) if sum(v) == 3]
      
      # Verticals
      v = [str(i+1) + ' Col' for i in range(3) if sum([j[i] for j in game_board]) == 3]
      
      # Diagonals
      d = [['Left Diag', '','Right Diag'][i+1] for i in [-1, 1] if sum([game_board[0][1+i], game_board[1][1]], game_board[2][1-i]) == 3]
      
      if any([h,v,d]):
          print('You won on:', h, v, d)
      else:
          print('No win yet')
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-16
        • 2013-10-22
        相关资源
        最近更新 更多