#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;
}