Tic-Tac-Toe ist ein sehr beliebtes Spiel. Implementieren wir also ein automatisches Tic-Tac-Toe-Spiel mit Python.

Das Spiel wird automatisch vom Programm gespielt und daher sind keine Benutzereingaben erforderlich. Trotzdem wird die Entwicklung eines automatischen Spiels viel Spaß machen. Mal sehen, wie das geht.

numpyund randomPython-Bibliotheken werden verwendet, um dieses Spiel zu erstellen. Anstatt den Benutzer zu bitten, eine Markierung auf die Tafel zu setzen, wählt der Code zufällig eine Stelle auf der Tafel aus und setzt die Markierung. Es wird das Brett nach jedem Zug angezeigt, es sei denn, ein Spieler gewinnt. Wenn das Spiel unentschieden ist, gibt es -1 zurück.

Erläuterung:
play_game() ist die Hauptfunktion, die folgende Aufgaben ausführt:

  • Ruft create_board() auf, um eine 9 × 9-Karte zu erstellen, und initialisiert mit 0.
  • Ruft für jeden Spieler (1 oder 2) die Funktion random_place() auf, um zufällig einen Ort an Bord auszuwählen und diesen Ort alternativ mit der Spielernummer zu markieren.
  • Drucken Sie die Tafel nach jedem Zug.
  • Bewerten Sie das Brett nach jedem Zug, um zu überprüfen, ob eine Zeile, Spalte oder Diagonale dieselbe Spielernummer hat. Wenn ja, wird der Name des Gewinners angezeigt. Wenn es nach 9 Zügen keinen Gewinner gibt, wird -1 angezeigt.

Unten ist der Code für das obige Spiel:



  
import numpy as np 
import random 
from time import sleep 
  
def create_board(): 
    return(np.array([[0, 0, 0], 
                     [0, 0, 0], 
                     [0, 0, 0]])) 
  
def possibilities(board): 
    l = [] 
      
    for i in range(len(board)): 
        for j in range(len(board)): 
              
            if board[i][j] == 0: 
                l.append((i, j)) 
    return(l) 
  
def random_place(board, player): 
    selection = possibilities(board) 
    current_loc = random.choice(selection) 
    board[current_loc] = player 
    return(board) 
  
def row_win(board, player): 
    for x in range(len(board)): 
        win = True
          
        for y in range(len(board)): 
            if board[x, y] != player: 
                win = False
                continue
                  
        if win == True: 
            return(win) 
    return(win) 
  
def col_win(board, player): 
    for x in range(len(board)): 
        win = True
          
        for y in range(len(board)): 
            if board[y][x] != player: 
                win = False
                continue
                  
        if win == True: 
            return(win) 
    return(win) 
  
def diag_win(board, player): 
    win = True
    y = 0
    for x in range(len(board)): 
        if board[x, x] != player: 
            win = False
    if win: 
        return win 
    win = True
    if win: 
        for x in range(len(board)): 
            y = len(board) - 1 - x 
            if board[x, y] != player: 
                win = False
    return win 
  
def evaluate(board): 
    winner = 0
      
    for player in [1, 2]: 
        if (row_win(board, player) or
            col_win(board,player) or 
            diag_win(board,player)): 
                 
            winner = player 
              
    if np.all(board != 0) and winner == 0: 
        winner = -1
    return winner 
  
def play_game(): 
    board, winner, counter = create_board(), 0, 1
    print(board) 
    sleep(2) 
      
    while winner == 0: 
        for player in [1, 2]: 
            board = random_place(board, player) 
            print("Board after " + str(counter) + " move") 
            print(board) 
            sleep(2) 
            counter += 1
            winner = evaluate(board) 
            if winner != 0: 
                break
    return(winner) 
  
print("Winner is: " + str(play_game())) 

Ausgabe :

[[0 0 0]
 [0 0 0]
 [0 0 0]]
Board nach 1 Zug
[[0 0 0]
 [0 0 0]
 [100]]
Board nach 2 Zug
[[0 0 0]
 [0 2 0]
 [100]]
Board nach 3 Zug
[[0 1 0]
 [0 2 0]
 [100]]
Board nach 4 Zug
[[0 1 0]
 [2 2 0]
 [100]]
Board nach 5 Zug
[[1 1 0]
 [2 2 0]
 [100]]
Board nach 6 Zug
[[1 1 0]
 [2 2 0]
 [1 2 0]]
Board nach 7 Zug
[[1 1 0]
 [2 2 0]
 [1 2 1]]
Board nach 8 Zug
[[1 1 0]
 [2 2 2]
 [1 2 1]]
Gewinner ist: 2