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]]”。您不了解它是如何工作的。退一步:忘记代码本身。该函数接受一个棋盘(列表
),并检查是否有赢家。对吗?然后,您发布的循环首先确定所有可能的移动(也就是说,他可以在板内的任何空的单元格中放置令牌)。对于每一个可能的动作,他都会生成一个应用了该动作的棋盘,并检查他是否会赢得该动作。如果他赢了,他会将这个动作应用到真正的棋盘上并赢得比赛,如果他不赢,他会尝试另一个动作。