0
我会尽我所能来形容这个问题,但我已经很困惑了!因此,这是获胜的功能:井字游戏michael dawson computer_move功能
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
这是computer_move函数内部循环,看看如果一台计算机可以赢,如果是的话然后采取招:
for move in legal_moves(board):
board[move] = computer
if winner(board) == computer:
print(move)
return move
我的问题是,在winner
函数检查所有组合赢得胜利,并且只返回第一块胜出的比赛,即(3,4,5)胜利将只返回'3'作为赢家,因为赢家=棋局[row [0]]
如果获胜的计算机移动在board[row[2]]
以及th e winner
函数返回board[row[0]]
,这样即使它是一个双赢行动,也不符合条件if winner(board) == computer
?
但是,如果赢的举动是在[2],但计算机只能通过“如果赢家(棋盘)==电脑”和赢家(棋盘)只返回赢得组合的第一个单元格来检查“赢家=棋盘[row [0]]“ –
你不理解它是如何工作的。退一步:忘记代码本身。该函数接受一个棋盘('list')并检查是否有胜者。对?然后,首先发布的循环决定了所有可能的移动(也就是说,他可以将一个标记放置在电路板内的任何“EMPTY”单元中)。对于这些可能的动作中的每一个,他都会生成一个应用此动作的棋盘,并检查他是否会以此动作获胜。如果他赢了,那么他将这个动作应用到真正的棋盘上并赢得比赛,如果他不尝试另一个动作的话。 – Adirio