mirror of
https://github.com/LHY0125/Gobang-Game.git
synced 2026-05-10 02:19:46 +08:00
v7.0: 代码架构重构完成 - 模块化设计、配置统一管理、类型定义标准化
This commit is contained in:
@@ -0,0 +1,461 @@
|
||||
# 🚀 五子棋AI增强指南
|
||||
|
||||
## 📋 概述
|
||||
|
||||
本文档详细介绍了提升五子棋AI水平的各种方法和实现策略,基于当前项目的代码架构,提供从简单参数调优到复杂算法改进的完整方案。
|
||||
|
||||
## 🎯 当前AI分析
|
||||
|
||||
### 现有优势
|
||||
- ✅ 模块化设计良好
|
||||
- ✅ 基础Minimax + α-β剪枝算法
|
||||
- ✅ 完整的棋型评估系统
|
||||
- ✅ 威胁检测机制
|
||||
- ✅ 防御优先策略
|
||||
|
||||
### 改进空间
|
||||
- 🔄 搜索深度有限(当前3层)
|
||||
- 🔄 评估函数相对简单
|
||||
- 🔄 缺乏开局库和残局库
|
||||
- 🔄 没有学习机制
|
||||
- 🔄 搜索效率可优化
|
||||
|
||||
## 🛠️ 改进方案
|
||||
|
||||
### 1. 立即可实施的改进(难度:⭐)
|
||||
|
||||
#### 1.1 参数调优
|
||||
|
||||
**修改 `config.h` 中的关键参数:**
|
||||
|
||||
```c
|
||||
// 增加搜索深度
|
||||
#define DEFAULT_AI_DEPTH 5 // 从3提升到5
|
||||
|
||||
// 优化防守系数
|
||||
#define DEFAULT_DEFENSE_COEFFICIENT 1.5 // 从1.2提升到1.5
|
||||
|
||||
// 扩大搜索范围
|
||||
#define AI_NEARBY_RANGE 3 // 从2扩大到3
|
||||
|
||||
// 降低搜索范围限制阈值
|
||||
#define AI_SEARCH_RANGE_THRESHOLD 8 // 从10降低到8
|
||||
```
|
||||
|
||||
#### 1.2 评分系统优化
|
||||
|
||||
**在 `config.h` 中添加新的评分项:**
|
||||
|
||||
```c
|
||||
// 组合棋型评分
|
||||
#define AI_SCORE_DOUBLE_THREE 50000 // 双三
|
||||
#define AI_SCORE_FOUR_THREE 200000 // 四三
|
||||
#define AI_SCORE_THREAT_SEQUENCE 80000 // 威胁序列
|
||||
#define AI_SCORE_POTENTIAL_FIVE 300000 // 潜在五连
|
||||
```
|
||||
|
||||
### 2. 短期改进(1-2周,难度:⭐⭐)
|
||||
|
||||
#### 2.1 移动排序优化
|
||||
|
||||
**在 `ai.c` 中添加移动排序函数:**
|
||||
|
||||
```c
|
||||
// 移动排序结构
|
||||
typedef struct {
|
||||
int x, y;
|
||||
int score;
|
||||
} ScoredMove;
|
||||
|
||||
// 移动排序函数
|
||||
int compare_moves(const void *a, const void *b) {
|
||||
ScoredMove *moveA = (ScoredMove*)a;
|
||||
ScoredMove *moveB = (ScoredMove*)b;
|
||||
return moveB->score - moveA->score;
|
||||
}
|
||||
|
||||
// 生成并排序候选移动
|
||||
int generate_candidate_moves(ScoredMove *moves, int player) {
|
||||
int count = 0;
|
||||
for (int i = 0; i < BOARD_SIZE; i++) {
|
||||
for (int j = 0; j < BOARD_SIZE; j++) {
|
||||
if (board[i][j] == EMPTY && is_near_stones(i, j)) {
|
||||
moves[count].x = i;
|
||||
moves[count].y = j;
|
||||
moves[count].score = evaluate_move(i, j);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
qsort(moves, count, sizeof(ScoredMove), compare_moves);
|
||||
return count;
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.2 威胁检测增强
|
||||
|
||||
**添加多层次威胁检测:**
|
||||
|
||||
```c
|
||||
// 威胁类型枚举
|
||||
typedef enum {
|
||||
THREAT_NONE = 0,
|
||||
THREAT_WIN = 5, // 直接获胜
|
||||
THREAT_FOUR = 4, // 活四/冲四
|
||||
THREAT_THREE = 3, // 活三
|
||||
THREAT_DOUBLE = 2, // 双威胁
|
||||
THREAT_POTENTIAL = 1 // 潜在威胁
|
||||
} ThreatLevel;
|
||||
|
||||
// 威胁检测函数
|
||||
ThreatLevel detect_threat(int x, int y, int player) {
|
||||
// 实现威胁检测逻辑
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 中期改进(1-2月,难度:⭐⭐⭐)
|
||||
|
||||
#### 3.1 置换表实现
|
||||
|
||||
**添加置换表缓存系统:**
|
||||
|
||||
```c
|
||||
// 置换表项
|
||||
typedef struct {
|
||||
uint64_t hash_key; // 棋盘哈希值
|
||||
int score; // 评估分数
|
||||
int depth; // 搜索深度
|
||||
int best_x, best_y; // 最佳移动
|
||||
int flag; // 节点类型(精确值/上界/下界)
|
||||
} TranspositionEntry;
|
||||
|
||||
// 置换表
|
||||
#define TT_SIZE 1048576 // 2^20
|
||||
TranspositionEntry transposition_table[TT_SIZE];
|
||||
|
||||
// 棋盘哈希函数
|
||||
uint64_t zobrist_hash() {
|
||||
// 实现Zobrist哈希
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.2 开局库系统
|
||||
|
||||
**创建开局库数据结构:**
|
||||
|
||||
```c
|
||||
// 开局库项
|
||||
typedef struct {
|
||||
int moves[20][2]; // 开局移动序列
|
||||
int move_count; // 移动数量
|
||||
int win_rate; // 胜率
|
||||
char name[50]; // 开局名称
|
||||
} OpeningEntry;
|
||||
|
||||
// 开局库
|
||||
OpeningEntry opening_book[] = {
|
||||
// 天元开局
|
||||
{{{7,7}, {6,6}, {8,8}, {6,8}, {8,6}}, 5, 65, "天元开局"},
|
||||
// 花月开局
|
||||
{{{7,7}, {6,7}, {8,7}, {7,6}, {7,8}}, 5, 70, "花月开局"},
|
||||
// 更多开局...
|
||||
};
|
||||
```
|
||||
|
||||
#### 3.3 改进的评估函数
|
||||
|
||||
**实现更复杂的位置评估:**
|
||||
|
||||
```c
|
||||
// 高级评估函数
|
||||
int advanced_evaluate_pos(int x, int y, int player) {
|
||||
int score = 0;
|
||||
|
||||
// 1. 基础棋型评分
|
||||
score += basic_pattern_score(x, y, player);
|
||||
|
||||
// 2. 组合棋型评分
|
||||
score += combination_pattern_score(x, y, player);
|
||||
|
||||
// 3. 位置价值评分
|
||||
score += positional_value_score(x, y);
|
||||
|
||||
// 4. 威胁序列评分
|
||||
score += threat_sequence_score(x, y, player);
|
||||
|
||||
// 5. 防守价值评分
|
||||
score += defensive_value_score(x, y, player);
|
||||
|
||||
return score;
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 长期改进(3-6月,难度:⭐⭐⭐⭐)
|
||||
|
||||
#### 4.1 蒙特卡洛树搜索(MCTS)
|
||||
|
||||
**MCTS节点结构:**
|
||||
|
||||
```c
|
||||
// MCTS节点
|
||||
typedef struct MCTSNode {
|
||||
int x, y; // 移动位置
|
||||
int visits; // 访问次数
|
||||
double wins; // 胜利次数
|
||||
struct MCTSNode *parent; // 父节点
|
||||
struct MCTSNode **children; // 子节点数组
|
||||
int child_count; // 子节点数量
|
||||
bool fully_expanded; // 是否完全展开
|
||||
} MCTSNode;
|
||||
|
||||
// MCTS主函数
|
||||
int mcts_search(int simulations) {
|
||||
MCTSNode *root = create_node(-1, -1, NULL);
|
||||
|
||||
for (int i = 0; i < simulations; i++) {
|
||||
MCTSNode *node = selection(root);
|
||||
node = expansion(node);
|
||||
double result = simulation(node);
|
||||
backpropagation(node, result);
|
||||
}
|
||||
|
||||
return best_child(root);
|
||||
}
|
||||
```
|
||||
|
||||
#### 4.2 神经网络集成
|
||||
|
||||
**神经网络评估接口:**
|
||||
|
||||
```c
|
||||
// 神经网络评估函数
|
||||
float neural_network_evaluate(int board[BOARD_SIZE][BOARD_SIZE]) {
|
||||
// 调用训练好的神经网络模型
|
||||
// 返回位置评估值
|
||||
// ...
|
||||
}
|
||||
|
||||
// 混合评估函数
|
||||
int hybrid_evaluate(int x, int y, int player) {
|
||||
// 传统评估
|
||||
int traditional_score = evaluate_pos(x, y, player);
|
||||
|
||||
// 神经网络评估
|
||||
float nn_score = neural_network_evaluate(board);
|
||||
|
||||
// 加权组合
|
||||
return (int)(0.7 * traditional_score + 0.3 * nn_score * 10000);
|
||||
}
|
||||
```
|
||||
|
||||
## 📊 性能优化策略
|
||||
|
||||
### 1. 搜索优化
|
||||
|
||||
#### 1.1 迭代加深搜索
|
||||
```c
|
||||
int iterative_deepening_search(int max_depth, int time_limit) {
|
||||
int best_move = -1;
|
||||
clock_t start_time = clock();
|
||||
|
||||
for (int depth = 1; depth <= max_depth; depth++) {
|
||||
if ((clock() - start_time) * 1000 / CLOCKS_PER_SEC > time_limit) {
|
||||
break;
|
||||
}
|
||||
best_move = alpha_beta_search(depth);
|
||||
}
|
||||
|
||||
return best_move;
|
||||
}
|
||||
```
|
||||
|
||||
#### 1.2 空窗搜索
|
||||
```c
|
||||
int null_window_search(int depth, int beta) {
|
||||
return alpha_beta_search(depth, beta - 1, beta);
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 内存优化
|
||||
|
||||
#### 2.1 位棋盘表示
|
||||
```c
|
||||
// 使用位操作优化棋盘表示
|
||||
typedef struct {
|
||||
uint64_t player1_board[4]; // 玩家1的棋盘(4个64位整数)
|
||||
uint64_t player2_board[4]; // 玩家2的棋盘
|
||||
} BitBoard;
|
||||
```
|
||||
|
||||
## 🎮 实战策略
|
||||
|
||||
### 1. 自适应难度系统
|
||||
|
||||
```c
|
||||
// 难度等级
|
||||
typedef enum {
|
||||
DIFFICULTY_EASY = 1,
|
||||
DIFFICULTY_NORMAL = 2,
|
||||
DIFFICULTY_HARD = 3,
|
||||
DIFFICULTY_EXPERT = 4,
|
||||
DIFFICULTY_MASTER = 5
|
||||
} DifficultyLevel;
|
||||
|
||||
// 根据难度调整AI参数
|
||||
void adjust_ai_parameters(DifficultyLevel level) {
|
||||
switch (level) {
|
||||
case DIFFICULTY_EASY:
|
||||
ai_depth = 2;
|
||||
defense_coefficient = 1.0;
|
||||
break;
|
||||
case DIFFICULTY_NORMAL:
|
||||
ai_depth = 3;
|
||||
defense_coefficient = 1.2;
|
||||
break;
|
||||
case DIFFICULTY_HARD:
|
||||
ai_depth = 4;
|
||||
defense_coefficient = 1.5;
|
||||
break;
|
||||
// ...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 学习系统
|
||||
|
||||
```c
|
||||
// 对局记录
|
||||
typedef struct {
|
||||
int moves[MAX_STEPS][2];
|
||||
int move_count;
|
||||
int winner;
|
||||
int ai_mistakes;
|
||||
float game_quality;
|
||||
} GameRecord;
|
||||
|
||||
// 学习函数
|
||||
void learn_from_game(GameRecord *record) {
|
||||
// 分析对局,更新评估参数
|
||||
// 识别AI的错误决策
|
||||
// 调整相关参数
|
||||
}
|
||||
```
|
||||
|
||||
## 📈 测试与评估
|
||||
|
||||
### 1. 性能测试
|
||||
|
||||
```c
|
||||
// 性能测试函数
|
||||
void performance_test() {
|
||||
clock_t start = clock();
|
||||
|
||||
// 执行1000次AI决策
|
||||
for (int i = 0; i < 1000; i++) {
|
||||
ai_move(DEFAULT_AI_DEPTH);
|
||||
// 重置棋盘
|
||||
}
|
||||
|
||||
clock_t end = clock();
|
||||
double time_taken = ((double)(end - start)) / CLOCKS_PER_SEC;
|
||||
printf("平均决策时间: %.2f ms\n", time_taken);
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 棋力测试
|
||||
|
||||
```c
|
||||
// 自我对弈测试
|
||||
int self_play_test(int games) {
|
||||
int wins = 0;
|
||||
|
||||
for (int i = 0; i < games; i++) {
|
||||
// AI vs AI(不同版本或参数)
|
||||
int result = play_game();
|
||||
if (result == 1) wins++;
|
||||
}
|
||||
|
||||
return (wins * 100) / games; // 胜率
|
||||
}
|
||||
```
|
||||
|
||||
## 🚀 实施路线图
|
||||
|
||||
### 阶段1:基础优化(1周)
|
||||
- [ ] 调整搜索深度和评分参数
|
||||
- [ ] 优化移动排序
|
||||
- [ ] 增强威胁检测
|
||||
|
||||
### 阶段2:算法改进(2-4周)
|
||||
- [ ] 实现置换表
|
||||
- [ ] 添加开局库
|
||||
- [ ] 改进评估函数
|
||||
|
||||
### 阶段3:高级功能(1-2月)
|
||||
- [ ] 实现MCTS
|
||||
- [ ] 添加学习机制
|
||||
- [ ] 性能优化
|
||||
|
||||
### 阶段4:AI增强(2-3月)
|
||||
- [ ] 神经网络集成
|
||||
- [ ] 并行搜索
|
||||
- [ ] 完整的自适应系统
|
||||
|
||||
## 📚 参考资源
|
||||
|
||||
### 算法资料
|
||||
- 《人工智能:一种现代方法》- Stuart Russell
|
||||
- 《游戏编程中的人工智能技术》- Mat Buckland
|
||||
- AlphaGo论文系列
|
||||
|
||||
### 开源项目
|
||||
- Stockfish(国际象棋引擎)
|
||||
- Leela Zero(围棋AI)
|
||||
- Gomoku AI项目
|
||||
|
||||
### 在线资源
|
||||
- Chess Programming Wiki
|
||||
- Computer Olympiad
|
||||
- AI游戏编程社区
|
||||
|
||||
## 🏗️ 代码架构优化 (v7.0新增)
|
||||
|
||||
### 配置管理统一化
|
||||
|
||||
在v7.0版本中,我们完成了重要的代码架构重构:
|
||||
|
||||
#### 配置参数集中管理
|
||||
- **统一配置文件**:所有AI相关参数现在集中在`config.h`中定义
|
||||
- **参数分类管理**:AI参数按功能分组(搜索深度、评分权重、时间限制等)
|
||||
- **配置文件支持**:AI参数可通过`gobang_config.ini`文件动态调整
|
||||
- **运行时修改**:支持游戏过程中实时调整AI难度和参数
|
||||
|
||||
#### 代码模块化优化
|
||||
- **清晰的模块分离**:AI逻辑与游戏逻辑完全分离
|
||||
- **接口标准化**:统一的AI接口设计,便于算法替换和升级
|
||||
- **全局变量管理**:AI相关全局变量集中在`globals`模块中
|
||||
- **类型定义统一**:所有数据结构定义集中在`type.h`中
|
||||
|
||||
#### 维护性提升
|
||||
- **宏定义优化**:消除重复定义,提高代码一致性
|
||||
- **注释规范化**:完善的代码注释和文档
|
||||
- **错误处理统一**:标准化的错误处理机制
|
||||
- **调试支持增强**:更好的调试信息和日志记录
|
||||
|
||||
这些架构优化为后续的AI算法改进奠定了坚实的基础,使得实施复杂的AI增强方案变得更加容易和可靠。
|
||||
|
||||
## 💡 总结
|
||||
|
||||
通过系统性的改进,可以将当前的五子棋AI从业余水平提升到接近专业水平。关键是要循序渐进,先实施简单的改进,再逐步引入复杂的算法。每个阶段都要进行充分的测试和评估,确保改进的有效性。
|
||||
|
||||
建议按照优先级顺序实施:
|
||||
|
||||
1. **短期目标**:参数调优 + 开局库 + 棋型优化
|
||||
2. **中期目标**:搜索算法优化 + 评估函数改进
|
||||
3. **长期目标**:机器学习集成 + MCTS实现
|
||||
|
||||
v7.0的架构重构为所有这些改进提供了更好的代码基础。
|
||||
|
||||
记住:**好的AI不仅要算得深,更要算得准!**
|
||||
@@ -0,0 +1,268 @@
|
||||
# 五子棋项目代码架构重构指南
|
||||
|
||||
## 📋 概述
|
||||
|
||||
本文档详细记录了五子棋项目在v7.0版本中进行的重大代码架构重构,包括重构的目标、实施过程、技术细节和带来的改进。
|
||||
|
||||
## 🎯 重构目标
|
||||
|
||||
### 主要目标
|
||||
1. **代码模块化** - 实现清晰的模块分离和职责划分
|
||||
2. **配置统一管理** - 集中管理所有配置参数和宏定义
|
||||
3. **全局变量规范化** - 统一管理全局变量,避免散乱分布
|
||||
4. **类型定义标准化** - 集中定义所有数据结构和类型
|
||||
5. **提升可维护性** - 降低代码耦合度,提高可读性和可维护性
|
||||
|
||||
### 预期收益
|
||||
- 减少代码重复和冗余
|
||||
- 提高开发效率和调试便利性
|
||||
- 增强代码的可扩展性和可移植性
|
||||
- 为后续功能开发奠定坚实基础
|
||||
|
||||
## 🏗️ 重构实施
|
||||
|
||||
### 1. 配置参数统一管理
|
||||
|
||||
#### 重构前状态
|
||||
- 配置参数散落在多个头文件中
|
||||
- 存在重复定义和不一致的问题
|
||||
- 网络相关配置分散在`network.h`中
|
||||
- 缺乏统一的配置管理机制
|
||||
|
||||
#### 重构措施
|
||||
- **集中到config.h**:将所有配置宏定义迁移到`config.h`文件
|
||||
- **分类管理**:按功能模块对配置参数进行分组
|
||||
- **消除重复**:移除重复的宏定义,确保唯一性
|
||||
- **标准化命名**:统一配置参数的命名规范
|
||||
|
||||
#### 配置分类结构
|
||||
```c
|
||||
// 棋盘配置
|
||||
#define BOARD_SIZE 15
|
||||
#define MIN_BOARD_SIZE 5
|
||||
#define MAX_BOARD_SIZE 25
|
||||
|
||||
// 游戏模式配置
|
||||
#define MODE_HUMAN_VS_AI 1
|
||||
#define MODE_HUMAN_VS_HUMAN 2
|
||||
#define MODE_NETWORK_BATTLE 3
|
||||
|
||||
// AI参数配置
|
||||
#define DEFAULT_AI_DEPTH 3
|
||||
#define MAX_AI_DEPTH 6
|
||||
#define AI_TIMEOUT_MS 5000
|
||||
|
||||
// 网络配置
|
||||
#define DEFAULT_PORT 8888
|
||||
#define BUFFER_SIZE 1024
|
||||
#define MAX_IP_LENGTH 16
|
||||
|
||||
// 评分参数
|
||||
#define SCORE_FIVE 100000
|
||||
#define SCORE_LIVE_FOUR 10000
|
||||
#define SCORE_RUSH_FOUR 1000
|
||||
```
|
||||
|
||||
### 2. 全局变量统一管理
|
||||
|
||||
#### 重构前状态
|
||||
- 全局变量分散在各个源文件中
|
||||
- 缺乏统一的声明和定义管理
|
||||
- 变量作用域不清晰
|
||||
- 初始化逻辑分散
|
||||
|
||||
#### 重构措施
|
||||
- **创建globals模块**:新建`globals.h`和`globals.c`文件
|
||||
- **集中声明**:在`globals.h`中统一声明所有全局变量
|
||||
- **集中定义**:在`globals.c`中统一定义和初始化
|
||||
- **访问规范化**:通过包含`globals.h`访问全局变量
|
||||
|
||||
#### 全局变量分类
|
||||
```c
|
||||
// 游戏状态变量
|
||||
extern int current_board[MAX_BOARD_SIZE][MAX_BOARD_SIZE];
|
||||
extern int current_player;
|
||||
extern int game_over;
|
||||
|
||||
// 配置变量
|
||||
extern GameConfig game_config;
|
||||
extern AIConfig ai_config;
|
||||
extern NetworkConfig network_config;
|
||||
|
||||
// 统计变量
|
||||
extern GameStats game_stats;
|
||||
extern int total_games_played;
|
||||
```
|
||||
|
||||
### 3. 类型定义标准化
|
||||
|
||||
#### 重构前状态
|
||||
- 结构体定义分散在各个头文件中
|
||||
- 类型定义不统一
|
||||
- 缺乏标准的数据结构规范
|
||||
|
||||
#### 重构措施
|
||||
- **创建type.h**:集中定义所有数据结构和类型
|
||||
- **标准化命名**:采用统一的命名规范
|
||||
- **逻辑分组**:按功能对类型进行分组
|
||||
- **文档化**:为每个类型添加详细注释
|
||||
|
||||
#### 类型定义结构
|
||||
```c
|
||||
// 基础类型定义
|
||||
typedef enum {
|
||||
PLAYER_NONE = 0,
|
||||
PLAYER_BLACK = 1,
|
||||
PLAYER_WHITE = 2
|
||||
} PlayerType;
|
||||
|
||||
// 游戏配置结构
|
||||
typedef struct {
|
||||
int board_size;
|
||||
int ai_level;
|
||||
int enable_forbidden;
|
||||
int time_limit;
|
||||
} GameConfig;
|
||||
|
||||
// 网络消息结构
|
||||
typedef struct {
|
||||
int type;
|
||||
int x, y;
|
||||
int player;
|
||||
char data[256];
|
||||
} NetworkMessage;
|
||||
```
|
||||
|
||||
### 4. 网络配置重构
|
||||
|
||||
#### 具体实施
|
||||
1. **迁移宏定义**:将`network.h`中的配置宏移动到`config.h`
|
||||
2. **统一命名**:规范网络相关宏的命名
|
||||
3. **添加引用**:在`network.h`中添加`#include "config.h"`
|
||||
4. **消息类型统一**:将消息类型定义集中管理
|
||||
|
||||
#### 迁移的配置项
|
||||
```c
|
||||
// 从network.h迁移到config.h
|
||||
#define DEFAULT_PORT 8888
|
||||
#define BUFFER_SIZE 1024
|
||||
#define MAX_IP_LENGTH 16
|
||||
#define MSG_MOVE 1
|
||||
#define MSG_CHAT 2
|
||||
#define MSG_SURRENDER 3
|
||||
#define MSG_DISCONNECT 4
|
||||
```
|
||||
|
||||
## 📊 重构效果评估
|
||||
|
||||
### 代码质量提升
|
||||
- **模块耦合度降低**:各模块职责更加清晰
|
||||
- **代码重复减少**:消除了重复的宏定义和类型定义
|
||||
- **可读性增强**:统一的命名规范和代码结构
|
||||
- **维护性提高**:集中管理使得修改更加便捷
|
||||
|
||||
### 开发效率提升
|
||||
- **配置修改便捷**:只需在一个地方修改配置参数
|
||||
- **调试更容易**:全局变量集中管理,状态更清晰
|
||||
- **扩展更简单**:标准化的接口和数据结构
|
||||
- **错误减少**:统一管理避免了不一致性错误
|
||||
|
||||
### 性能影响
|
||||
- **编译时间**:略有增加(由于更多的头文件包含)
|
||||
- **运行时性能**:无显著影响
|
||||
- **内存使用**:无显著变化
|
||||
- **整体评估**:性能影响微乎其微,收益远大于成本
|
||||
|
||||
## 🔧 技术细节
|
||||
|
||||
### 文件结构变化
|
||||
|
||||
#### 新增文件
|
||||
- `type.h` - 类型定义集中文件
|
||||
- `globals.h` - 全局变量声明文件
|
||||
- `globals.c` - 全局变量定义文件
|
||||
|
||||
#### 修改文件
|
||||
- `config.h` - 扩展为完整的配置管理文件
|
||||
- `network.h` - 移除配置定义,添加config.h引用
|
||||
- 所有源文件 - 更新头文件包含关系
|
||||
|
||||
### 编译依赖关系
|
||||
|
||||
```
|
||||
type.h (基础类型)
|
||||
↓
|
||||
config.h (配置参数)
|
||||
↓
|
||||
globals.h (全局变量声明)
|
||||
↓
|
||||
各功能模块头文件
|
||||
↓
|
||||
源文件实现
|
||||
```
|
||||
|
||||
### 包含关系规范
|
||||
|
||||
1. **type.h**:被所有需要类型定义的文件包含
|
||||
2. **config.h**:被所有需要配置参数的文件包含
|
||||
3. **globals.h**:被所有需要访问全局变量的文件包含
|
||||
4. **功能模块头文件**:按需包含上述基础头文件
|
||||
|
||||
## 📝 最佳实践
|
||||
|
||||
### 配置管理
|
||||
1. **新增配置参数**:统一添加到`config.h`的相应分组中
|
||||
2. **命名规范**:使用描述性的宏名称,避免缩写
|
||||
3. **分组管理**:按功能模块对配置进行逻辑分组
|
||||
4. **文档注释**:为每个配置参数添加清晰的注释
|
||||
|
||||
### 全局变量管理
|
||||
1. **声明规范**:在`globals.h`中使用extern声明
|
||||
2. **定义规范**:在`globals.c`中进行实际定义和初始化
|
||||
3. **访问规范**:通过包含`globals.h`访问,避免重复声明
|
||||
4. **初始化管理**:在`globals.c`中集中进行初始化
|
||||
|
||||
### 类型定义管理
|
||||
1. **命名规范**:使用PascalCase命名结构体和枚举
|
||||
2. **分组管理**:按功能对类型进行逻辑分组
|
||||
3. **文档化**:为每个类型和字段添加详细注释
|
||||
4. **版本兼容**:考虑结构体的向后兼容性
|
||||
|
||||
## 🚀 未来扩展
|
||||
|
||||
### 短期计划
|
||||
1. **配置文件增强**:支持更多配置项的动态加载
|
||||
2. **类型安全增强**:添加更多的类型检查和验证
|
||||
3. **模块接口标准化**:定义标准的模块接口规范
|
||||
|
||||
### 长期规划
|
||||
1. **插件架构**:基于当前架构实现插件系统
|
||||
2. **配置热重载**:支持运行时配置的动态更新
|
||||
3. **跨平台适配**:利用统一架构实现跨平台支持
|
||||
|
||||
## 📚 参考资料
|
||||
|
||||
### 相关文档
|
||||
- [C语言编程规范](https://www.kernel.org/doc/html/latest/process/coding-style.html)
|
||||
- [软件架构设计原则](https://en.wikipedia.org/wiki/Software_architecture)
|
||||
- [模块化编程最佳实践](https://en.wikipedia.org/wiki/Modular_programming)
|
||||
|
||||
### 工具推荐
|
||||
- **静态分析**:使用cppcheck进行代码质量检查
|
||||
- **格式化**:使用clang-format统一代码格式
|
||||
- **文档生成**:使用Doxygen生成API文档
|
||||
|
||||
## 📈 总结
|
||||
|
||||
v7.0版本的代码架构重构是一次重要的技术升级,通过系统性的重构实现了:
|
||||
|
||||
✅ **配置参数的统一管理** - 提高了配置的一致性和可维护性
|
||||
✅ **全局变量的规范化** - 降低了代码的复杂度和耦合度
|
||||
✅ **类型定义的标准化** - 增强了代码的可读性和类型安全
|
||||
✅ **模块结构的优化** - 为后续功能扩展奠定了坚实基础
|
||||
|
||||
这次重构不仅解决了当前的技术债务,更为项目的长期发展提供了良好的架构基础。后续的功能开发将能够更加高效和稳定地进行。
|
||||
|
||||
---
|
||||
|
||||
*本文档将随着项目的发展持续更新,记录架构演进的每一个重要节点。*
|
||||
@@ -131,6 +131,12 @@ telnet <对方IP地址> <端口号>
|
||||
|
||||
## 更新日志
|
||||
|
||||
### v7.0 (2025-07-20)
|
||||
- 网络配置参数统一管理 - 所有网络相关配置集中到config.h
|
||||
- 消息类型定义优化 - 统一消息协议宏定义
|
||||
- 代码架构重构 - 提升网络模块的可维护性
|
||||
- 配置文件支持 - 网络参数可通过配置文件调整
|
||||
|
||||
### v6.1 (2025-07-10)
|
||||
- 完善网络对战功能
|
||||
- 支持TCP/IP通信
|
||||
|
||||
Reference in New Issue
Block a user