#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char board[3][3]; // 'C' = 电脑, 'P' = 玩家

// Unicode 粗体数字
const char* boldNum[10] = {
    "𝟬","𝟭","𝟮","𝟯","𝟰","𝟱","𝟲","𝟳","𝟴","𝟵"
};

// 清屏(手机通用)
void clear() {
    printf("\033[2J\033[H");
}

// 打印棋盘
void printBoard() {
    clear();
    printf("╔═════════════════════╗\n");
    printf("║   🌟 手机三子棋 🌟   ║\n");
    printf("║   ❌ 电脑   🔵 你    ║\n");
    printf("╚═════════════════════╝\n\n");

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (board[i][j] == 'C')
                printf("  ❌  ");
            else if (board[i][j] == 'P')
                printf("  🔵  ");
            else
                printf("  %s  ", boldNum[i*3 + j + 1]);

            if (j < 2) printf("|");
        }
        printf("\n");
        if (i < 2) printf("-----+-----+-----\n");
    }
    printf("\n");
}

// 判断胜负
int checkWin(char p) {
    for (int i = 0; i < 3; i++)
        if (board[i][0]==p && board[i][1]==p && board[i][2]==p) return 1;
    for (int i = 0; i < 3; i++)
        if (board[0][i]==p && board[1][i]==p && board[2][i]==p) return 1;
    if (board[0][0]==p && board[1][1]==p && board[2][2]==p) return 1;
    if (board[0][2]==p && board[1][1]==p && board[2][0]==p) return 1;
    return 0;
}

// 电脑 AI
void computerPlay() {
    int r, c;
    for (r = 0; r < 3; r++)
        for (c = 0; c < 3; c++)
            if (!board[r][c]) {
                board[r][c] = 'C';
                if (checkWin('C')) return;
                board[r][c] = 0;
            }
    for (r = 0; r < 3; r++)
        for (c = 0; c < 3; c++)
            if (!board[r][c]) {
                board[r][c] = 'P';
                if (checkWin('P')) {
                    board[r][c] = 'C';
                    return;
                }
                board[r][c] = 0;
            }
    if (!board[1][1]) {
        board[1][1] = 'C';
        return;
    }
    int corner[4][2] = {{0,0},{0,2},{2,0},{2,2}};
    for (int i = 0; i < 4; i++) {
        r = corner[i][0];
        c = corner[i][1];
        if (!board[r][c]) {
            board[r][c] = 'C';
            return;
        }
    }
    do {
        r = rand()%3;
        c = rand()%3;
    }
    while(board[r][c]);
    board[r][c] = 'C';
}

int main() {
    int pos;
    int moves = 0;
    char turn = 'P';

    srand(time(NULL));

    while (moves < 9) {
        printBoard();

        if (turn == 'P') {
            while (1) {
                printf("👉 请输入位置 (1-9): ");
                if (scanf("%d", &pos) != 1 || pos < 1 || pos > 9) {
                    printf("❌ 请输入有效数字 1-9!\n");
                    while (getchar() != '\n');
                    continue;
                }
                int r = (pos-1)/3, c = (pos-1)%3;
                if (!board[r][c]) {
                    board[r][c] = 'P';
                    break;
                } else {
                    printf("⚠️ 该位置已被占用!\n");
                }
            }
            if (checkWin('P')) {
                printBoard();
                printf("\n🎉 恭喜你赢啦!❌ 被你打败了!\n");
                return 0;
            }
        } else {
            computerPlay();
            if (checkWin('C')) {
                printBoard();
                printf("\n😅 别灰心~下次一定能赢!\n");
                return 0;
            }
        }
        turn = (turn == 'P') ? 'C' : 'P';
        moves++;
    }

    printBoard();
    printf("\n🤝 棋盘已满,平局!\n");
    return 0;
}