import pygame
import sys
import random

# 初始化Pygame
pygame.init()

# 窗口设置
WIDTH, HEIGHT = 300, 300
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("井字棋 最弱随机AI")

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
GRAY = (128, 128, 128)

# 棋盘参数
LINE_WIDTH = 5
BOARD_SIZE = 3
CELL_SIZE = WIDTH // BOARD_SIZE

# 棋盘状态：0空，1玩家X，2AI O
board = [[0 for _ in range(BOARD_SIZE)] for _ in range(BOARD_SIZE)]
game_over = False
winner = 0

# 字体
font = pygame.font.SysFont(None, 48)
tip_font = pygame.font.SysFont(None, 32)

def draw_board():
    SCREEN.fill(WHITE)
    for i in range(1, BOARD_SIZE):
        pygame.draw.line(SCREEN, BLACK, (0, i * CELL_SIZE), (WIDTH, i * CELL_SIZE), LINE_WIDTH)
        pygame.draw.line(SCREEN, BLACK, (i * CELL_SIZE, 0), (i * CELL_SIZE, HEIGHT), LINE_WIDTH)

def draw_pieces():
    for row in range(BOARD_SIZE):
        for col in range(BOARD_SIZE):
            xc = col * CELL_SIZE + CELL_SIZE // 2
            yc = row * CELL_SIZE + CELL_SIZE // 2
            r = CELL_SIZE // 3
            if board[row][col] == 1:
                pygame.draw.line(SCREEN, RED, (xc-r, yc-r), (xc+r, yc+r), LINE_WIDTH)
                pygame.draw.line(SCREEN, RED, (xc+r, yc-r), (xc-r, yc+r), LINE_WIDTH)
            elif board[row][col] == 2:
                pygame.draw.circle(SCREEN, BLUE, (xc, yc), r, LINE_WIDTH)

def check_win(player):
    # 横
    for row in board:
        if all(c == player for c in row):
            return True
    # 竖
    for c in range(3):
        if all(board[r][c]==player for r in range(3)):
            return True
    # 对角线
    if board[0][0]==board[1][1]==board[2][2]==player:
        return True
    if board[0][2]==board[1][1]==board[2][0]==player:
        return True
    return False

def is_board_full():
    for r in board:
        if 0 in r:
            return False
    return True

def reset_game():
    global board, game_over, winner
    board = [[0]*3 for _ in range(3)]
    game_over = False
    winner = 0

# 纯随机AI，无任何策略
def ai_move():
    empty = [(r,c) for r in range(3) for c in range(3) if board[r][c]==0]
    if empty:
        r,c = random.choice(empty)
        board[r][c] = 2

def draw_result_text():
    if winner == 1:
        text = font.render("你赢了!", True, RED)
    elif winner == 2:
        text = font.render("AI获胜", True, BLUE)
    elif winner == 3:
        text = font.render("平局", True, GRAY)
    else:
        return
    rect = text.get_rect(center=(WIDTH//2, HEIGHT//2))
    SCREEN.blit(text, rect)
    tip = tip_font.render("点击任意处重开", True, BLACK)
    SCREEN.blit(tip, tip.get_rect(center=(WIDTH//2, HEIGHT//2+50)))

def main():
    global game_over, winner
    clock = pygame.time.Clock()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                mx, my = pygame.mouse.get_pos()
                row = my // CELL_SIZE
                col = mx // CELL_SIZE
                if game_over:
                    reset_game()
                    continue
                if board[row][col] == 0:
                    board[row][col] = 1
                    if check_win(1):
                        game_over = True
                        winner = 1
                    elif is_board_full():
                        game_over = True
                        winner = 3
                    else:
                        ai_move()
                        if check_win(2):
                            game_over = True
                            winner = 2
                        elif is_board_full():
                            game_over = True
                            winner = 3
        draw_board()
        draw_pieces()
        if game_over:
            draw_result_text()
        pygame.display.update()
        clock.tick(60)

if __name__ == "__main__":
    main()