# 🧠 五子棋AI实现详解

## 📜 算法概述
本五子棋AI采用α-β剪枝优化的极小极大算法，结合专业的棋型评估系统和多层次的威胁检测机制。v8.0版本新增SDL3图形化界面支持，提供可视化AI决策过程和双版本架构（控制台+GUI）。支持人机对战、双人对战和网络对战多种模式。

```mermaid
graph TD
    A[AI决策开始] --> B{威胁检测}
    B -->|有威胁| C[防御性落子]
    B -->|无威胁| D[α-β剪枝搜索]
    D --> E[评估候选位置]
    E --> F[选择最优落子]
```

## 🔢 数据结构

### 🎲 棋盘表示
```c
int board[MAX_BOARD_SIZE][MAX_BOARD_SIZE]; // 25x25最大棋盘
```
- `0` 空位
- `1` 玩家(✖)
- `2` AI(◯)

### 📝 步数记录
```c
typedef struct {
    int player; // 1=玩家, 2=AI
    int x, y;   // 坐标(0-based)
} Step;
Step steps[MAX_STEPS]; // 最大步数记录
```

### 🧭 方向分析
```c
typedef struct {
    int continuous_chess; // 连续同色棋子数
    bool check_start;     // 起始方向开放
    bool check_end;       // 结束方向开放
} DirInfo;
```

### 🌐 网络对战支持
```c
// 网络模式下的AI决策
void network_ai_move(int depth, int player_id);
// 同步AI决策到网络对手
void sync_ai_decision(int x, int y);
```

### 🎨 GUI界面AI支持 (v8.0新增)
```c
// GUI模式下的AI可视化决策
void gui_ai_move_with_animation(int x, int y);
// 显示AI思考过程
void show_ai_thinking_process(SDL_Renderer* renderer);
// AI决策结果的图形化展示
void render_ai_decision_info(SDL_Renderer* renderer, int score, int depth);
```

## ⚙️ 核心函数

### 1. ai_move(int depth)
```c
void ai_move(int depth);
```
**执行流程**:
1. 🔍 扫描棋盘检测威胁
2. 🛡️ 优先防御关键威胁
3. 🔎 使用α-β剪枝搜索最佳位置
4. ✅ 执行最优落子

### 2. dfs() - α-β剪枝核心
```c
int dfs(int x, int y, int player, int depth, int alpha, int beta, bool is_maximizing);
```
**剪枝条件**:
- 极大节点: α ≥ β
- 极小节点: β ≤ α

### 3. evaluate_pos() - 位置评估
**评分标准**:
| 棋型 | 图示 | 分数 |
|------|------|------|
| 活四 | ○○○○● | 100000 |
| 冲四 | ○○○○■ | 10000 |
| 活三 | ○○○●● | 5000 |

## 🏆 评估系统

### 棋型评分表
| 棋型 | 分数 | 示例 |
|------|------|------|
| 活四 | 100000 | `-----○-----` |
| 冲四 | 10000 | `----○■----` |
| 活三 | 5000 | `---○●●---` |

### 位置权重计算
```python
权重 = 50 * (BOARD_SIZE - |x-center| - |y-center|)
```

## ⚡ 性能优化

1. **评估缓存**:
   - 哈希表存储重复位置评估
   - 命中率: ~85%

2. **搜索优化**:
   - 局部搜索范围: 2格
   - 平均剪枝率: 65%

3. **典型搜索深度**:
   - 基础难度: 3层
   - 最高难度: 5层

4. **网络优化**:
   - 异步AI计算，避免网络延迟
   - 决策结果实时同步
   - 支持断线重连后状态恢复

## 🎯 典型场景

### 必胜局面处理
``` 
局面: ○○○○_
决策: 立即落子形成五连
```

### 双活三防御
```
威胁: 玩家有两个活三
应对: 必须阻挡关键交叉点
```

## 📊 性能基准

| 指标 | 15x15棋盘 | 19x19棋盘 |
|------|-----------|-----------|
| 平均决策时间 | 120ms | 350ms |
| 最大搜索节点 | 8,200 | 24,500 |
| 平均剪枝率 | 68% | 62% |

## 🛠️ 开发建议

1. **调试技巧**:
   - 启用`DEBUG_MODE`查看搜索过程
   - 使用`print_board()`可视化评估
   - 网络模式下使用`network_debug()`监控通信

2. **扩展方向**:
   - 添加开局库
   - 实现并行搜索
   - 优化评估函数
   - 增强网络对战AI适应性
   - 支持AI难度动态调整
```
