Ich werde mein Bestes versuchen, um die Frage zu beschreiben, aber ich bin schon sehr verwirrt! Das ist also die Gewinnfunktion:Tic Tac Toe Spiel von Michael Dawson die Computer_move Funktion
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
Und das ist die Schleife in computer_move Funktion, um zu sehen, ob ein Computer gewinnen kann, wenn ja, dann diesen Zug nehmen:
for move in legal_moves(board):
board[move] = computer
if winner(board) == computer:
print(move)
return move
Meine Frage ist, die winner
Die Funktion überprüft alle Kombinationen, um zu gewinnen, und gibt nur das erste Stück des Gewinnmatchs zurück, dh ein (3, 4, 5) Gewinn gibt nur "3" als Sieger zurück, weil Gewinner = Brett [Reihe [0]]
board[row[2]]
befindet, und th e
winner
Funktion gibt
board[row[0]]
zurück, so dass die Bedingung
if winner(board) == computer
nicht übereinstimmen würde, selbst wenn es sich um einen Gewinn handelt?
Aber was ist, wenn die Gewinnbewegung bei [2] ist, aber der Computer prüft nur durch "wenn Sieger (Brett) == Computer", und Sieger (Brett) gibt nur die erste Zelle der Gewinnkombination zurück "Gewinner = Brett [Zeile [0]] " –
Sie verstehen nicht, wie es funktioniert. Machen Sie einen Schritt zurück: Vergessen Sie den Code selbst. Die Funktion akzeptiert eine Tafel ("Liste") und prüft, ob es einen Gewinner gibt. Recht? Dann bestimmt die Schleife, die du zuerst gesetzt hast, alle möglichen Bewegungen (das heißt, er kann ein Token in irgendeine der "LEEREN" Zellen innerhalb der Tafel legen). Für jede dieser möglichen Bewegungen erzeugt er ein Brett mit dieser Bewegung und prüft, ob er mit dieser Bewegung gewinnt. Wenn er gewinnt, wendet er diese Bewegung auf das echte Brett an und gewinnt das Spiel, wenn er es nicht versucht, versucht er eine andere Bewegung. – Adirio