Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Game Tic Tac Toe tự động với số ngẫu nhiên trong Python

Game Tic Tac Toe (Caro 3x3) tự chơi: hai bot đặt dấu ngẫu nhiên trên bàn cờ cho đến khi có người thắng hoặc hòa.

Logic chính

  • Bàn cờ: ma trận 3x3 numpy (0=trống, 1=Player 1, 2=Player 2).
  • Mỗi lượt: chọn ô trống ngẫu nhiên.
  • Kiểm tra thắng: hàng, cột, đường chéo.
  • Hòa: bàn cờ đầy không ai thắng → trả về -1.

Code hoàn chỉnh

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):
    return [(i,j) for i in range(3) for j in range(3) if board[i][j]==0]

def random_place(board, player):
    loc = random.choice(possibilities(board))
    board[loc] = player
    return board

def row_win(board, player):
    return any(all(board[x][y]==player for y in range(3)) for x in range(3))

def col_win(board, player):
    return any(all(board[y][x]==player for y in range(3)) for x in range(3))

def diag_win(board, player):
    return all(board[i][i]==player for i in range(3)) or all(board[i][2-i]==player for i in range(3))

def evaluate(board):
    for player in [1,2]:
        if row_win(board,player) or col_win(board,player) or diag_win(board,player):
            return player
    if np.all(board!=0):
        return -1
    return 0

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(f"Board after {counter} move:\n{board}"); sleep(2)
            counter += 1
            winner = evaluate(board)
            if winner != 0: break
    return winner

print("Winner:", play_game())

Kết quả mẫu

[[0 0 0] [0 0 0] [0 0 0]]
Board after 1 move
[[0 1 0] [0 0 0] [0 0 0]]
...
Board after 7 move
[[0 1 1] [2 1 2] [0 1 2]]
Winner is: 1

Mở rộng

  • Thêm AI Minimax cho bot thông minh.
  • Giao diện GUI với Tkinter/Pygame.
  • Bàn cờ lớn hơn (4x4, 5x5).