Tic-tac-toe é um jogo muito popular, então vamos implementar um jogo automático Tic-tac-toe usando Python.

O jogo é jogado automaticamente pelo programa e, portanto, nenhuma entrada do usuário é necessária. Ainda assim, desenvolver um jogo automático será muito divertido. Vamos ver como fazer isso.

numpye randombibliotecas Python são usadas para construir este jogo. Em vez de pedir ao usuário para colocar uma marca no tabuleiro, o código escolhe aleatoriamente um local no tabuleiro e coloca a marca. Ele exibirá o tabuleiro após cada jogada, a menos que um jogador ganhe. Se o jogo empatar, ele retorna -1.

Explicação:
play_game() é a função principal, que executa as seguintes tarefas:

  • Chama create_board() para criar uma placa 9 × 9 e inicializa com 0.
  • Para cada jogador (1 ou 2), chama a função random_place() para escolher aleatoriamente um local no tabuleiro e marcar esse local com o número do jogador, alternativamente.
  • Imprima o tabuleiro após cada movimento.
  • Avalie o tabuleiro após cada movimento para verificar se uma linha ou coluna ou diagonal tem o mesmo número de jogador. Em caso afirmativo, exibe o nome do vencedor. Se após 9 lances não houver vencedor, exibe -1.

Abaixo está o código para o jogo acima:



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())) 

Resultado :

[[0 0 0]
 [0 0 0]
 [0 0 0]]
Tabuleiro após 1 movimento
[[0 0 0]
 [0 0 0]
 [1 0 0]]
Tabuleiro após 2 movimentos
[[0 0 0]
 [0 2 0]
 [1 0 0]]
Tabuleiro após 3 movimentos
[[0 1 0]
 [0 2 0]
 [1 0 0]]
Tabuleiro após 4 movimentos
[[0 1 0]
 [2 2 0]
 [1 0 0]]
Tabuleiro após 5 movimentos
[[1 1 0]
 [2 2 0]
 [1 0 0]]
Tabuleiro após 6 movimentos
[[1 1 0]
 [2 2 0]
 [1 2 0]]
Tabuleiro após 7 movimentos
[[1 1 0]
 [2 2 0]
 [1 2 1]]
Tabuleiro após 8 movimentos
[[1 1 0]
 [2 2 2]
 [1 2 1]]
O vencedor é: 2