Python Tic-Tac-Toe游戏由michael dawson编写,具有计算机移动功能

Python Tic-Tac-Toe游戏由michael dawson编写,具有计算机移动功能,python,python-3.x,Python,Python 3.x,我会尽力描述这个问题,但我已经很困惑了!这就是获胜的功能: def winner(board): WAYS_TO_WIN = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6), (1, 4, 7), (2, 5, 8), (0

我会尽力描述这个问题,但我已经很困惑了!这就是获胜的功能:

def winner(board):
    WAYS_TO_WIN = ((0, 1, 2),
                   (3, 4, 5),
                   (6, 7, 8),
                   (0, 3, 6),
                   (1, 4, 7),
                   (2, 5, 8),
                   (0, 4, 8),
                   (2, 4, 6))

    for row in WAYS_TO_WIN:
        if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
            winner = board[row[0]]
            return winner
这是电脑移动功能中的循环,看看一台电脑是否能赢,如果能赢,那就采取行动:

for move in legal_moves(board):
    board[move] = computer
    if winner(board) == computer:
        print(move)
        return move
我的问题是,
winner
函数检查所有要赢的组合,并且只返回获胜比赛的第一个部分,即(3,4,5)赢了只会返回“3”作为赢家,因为winner=board[row[0]]


如果获胜的计算机移动位于
board[row[2]]
,并且
winner
函数返回
board[row[0]]
,那么即使是获胜的移动,也不符合条件
if winner(board)=computer

第一个函数是检查任何获胜组合的3个单元格是否具有相同的值,并且该值不是
空的
,并返回值,该值可以是播放器或计算机

电脑会模拟每一个合法的动作,看看他是否能用这个动作赢,如果他找到一个能让他赢的动作,他就会这么做

例如:

player computer EMPTY
EMPTY  computer player
EMPTY  EMPTY    player

计算机将检查是否有任何空单元格使他获胜,当他填充居中的
单元格时会发生什么,从而使他必须采取行动才能到达获胜位置。

但是如果获胜移动位于[2],但计算机仅通过“如果胜者(棋盘)=计算机”和胜者(棋盘)进行检查仅返回winner组合的第一个单元格“winner=board[row[0]]”。您不了解它是如何工作的。退一步:忘记代码本身。该函数接受一个棋盘(
列表
),并检查是否有赢家。对吗?然后,您发布的循环首先确定所有可能的移动(也就是说,他可以在板内的任何
空的
单元格中放置令牌)。对于每一个可能的动作,他都会生成一个应用了该动作的棋盘,并检查他是否会赢得该动作。如果他赢了,他会将这个动作应用到真正的棋盘上并赢得比赛,如果他不赢,他会尝试另一个动作。