2017-03-02 2 views
0

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]]

Was ist, wenn der gewinnende Computer sich bei 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?

Antwort

0

Die erste Funktion überprüft, ob die 3 Zellen einer der Gewinnkombinationen den gleichen Wert haben und das ist nicht EMPTY und gibt den Wert zurück, der ein Spieler oder der Computer sein kann.

Der Computer simuliert einen jeden legalen Zug und sieht, ob er mit diesem Zug gewinnt, und wenn er einen Zug findet, der ihn gewinnt, macht er es.

Zum Beispiel:

player computer EMPTY 
EMPTY computer player 
EMPTY EMPTY player 

Computer überprüfen, ob einer der leeren Zelle ihn gewinnen macht, was passiert, wenn er die zentrierte EMPTY Zelle füllt, und macht somit die Bewegung, die er zu tun hatte, um zu bekommen Gewinnposition.

+0

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]] " –

+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