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