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