import random
from typing import Optional

class TicTacToeGame:
    def __init__(self):
        self.board = [" "] * 9
        self.player_symbol = "X"
        self.computer_symbol = "O"
        self.current_player = "X"  # X先走

    def print_board(self) -> str:
        """返回棋盘字符串"""
        board_str = (
            f"\n {self.board[0]} | {self.board[1]} | {self.board[2]} \n"
            "-----------\n"
            f" {self.board[3]} | {self.board[4]} | {self.board[5]} \n"
            "-----------\n"
            f" {self.board[6]} | {self.board[7]} | {self.board[8]} \n"
        )
        return board_str

    def check_winner(self) -> Optional[str]:
        """检查是否有玩家获胜"""
        win_combinations = [
            [0, 1, 2], [3, 4, 5], [6, 7, 8],  # 横向
            [0, 3, 6], [1, 4, 7], [2, 5, 8],  # 纵向
            [0, 4, 8], [2, 4, 6]              # 对角线
        ]
        
        for combo in win_combinations:
            if self.board[combo[0]] == self.board[combo[1]] == self.board[combo[2]] != " ":
                return self.board[combo[0]]
        return None

    def is_board_full(self) -> bool:
        """检查棋盘是否已满"""
        return " " not in self.board

    def computer_move(self) -> int:
        """电脑AI移动"""
        for i in range(9):
            if self.board[i] == " ":
                self.board[i] = self.computer_symbol
                if self.check_winner() == self.computer_symbol:
                    return i
                self.board[i] = " "
        
        for i in range(9):
            if self.board[i] == " ":
                self.board[i] = self.player_symbol
                if self.check_winner() == self.player_symbol:
                    self.board[i] = self.computer_symbol
                    return i
                self.board[i] = " "
        
        move_order = [4, 0, 2, 6, 8, 1, 3, 5, 7]
        for move in move_order:
            if self.board[move] == " ":
                return move
        
        return -1

    def make_move(self, position: int) -> bool:
        """玩家移动"""
        if 0 <= position <= 8 and self.board[position] == " ":
            self.board[position] = self.current_player
            return True
        return False

    def switch_player(self):
        """切换当前玩家"""
        self.current_player = "O" if self.current_player == "X" else "X"