文件名 | 说明 |
---|---|
twister.cpp |
包含程序主函数入口main() 和程序主流程 |
文件名 | 说明 |
---|---|
representation.h |
数据的表示,包括棋盘 棋子 着法等 |
representation.cpp |
数据的表示,包括棋盘 棋子 着法等 |
preset.h |
预置的数组与相关判断 |
preset.cpp |
预置的数组与相关判断 |
moves_getter.cpp |
着法生成器,生成当前所有着法 |
moves_sort.h |
着法排序,将所有着法排序 |
moves_sort.cpp |
着法排序,将所有着法排序 |
文件名 | 说明 |
---|---|
search.h |
实现博弈树搜索相关算法 |
search.cpp |
实现博弈树搜索相关算法 |
hash_table.h |
置换表相关操作 |
hash_table.cpp |
置换表相关操作 |
文件名 | 说明 |
---|---|
value.cpp |
局面评估方法 |
value.h |
局面评估方法 |
文件名 | 说明 |
---|---|
ucci_protocol.h |
处理UCCI 协议,完成界面与引擎之间的通讯 |
ucci_protocol.cpp |
处理UCCI 协议,完成界面与引擎之间的通讯 |
game_start_repos.h |
游戏开局库相关操作 |
game_start_repos.cpp |
游戏开局库相关操作 |
- 命名空间
C++ std
using namespace std;
- 命名规范
①不允许使用缩写
// α-β剪枝搜索函数
// 不允许使用
void ABSearch();
// 应使用命名
void AlphaBetaSearch();
// 着法计数器
// 不允许使用
int cnt;
// 应使用
int movements_counter;
③大括号使用{}
及代码书写
// { }
int main() {
}
// 空格
i = 9;
for(int i = 0; i < cnt; i ++){
a = b;
c += d;
}
④类型定义 和 宏定义 命名应使用全大写
// 类型定义
typedef unsigned char PLAYER;
// 宏定义
#define ISBLACK(x) (x >> 8)
⑤命名规则
// 函数命名用大驼峰
int GetMovementNumber();
// 全局变量用大驼峰
int School;
// 常量用大写
const int MAX_DEPTH;
// 局部变量命名用下划线
Movement best_move;
// 结构体用大驼峰
struct Movement{
}
⑥注释
// 变量注释(尽量在同一行,不同变量的注释尽量tab对齐)
Movement best_move; // 最佳的着法
const int MAX_DEPTH; // 最大搜索深度
// 函数注释
/*
* 函数名:xxx
* 描述:xxxxxxxxx
* 入参:
* - int a: xxxx
* - bool b: xxxx
* - double c: xxxx
* 返回值:
* - int h: xxxx
* 最后更新时间: xxxx
*/
int GetMovementNumber(){
// 1. xxxxx(独立成行)
a = 1;
// 2. xxxxx
b = 1;
// 3. xxxxx
cout << a + b << endl;
// 4. xxxx
return c;
}
// 文件注释
/*
* 文件名:xxx.xx
* 描述:xxxxxxxx
* 作者: xxx
* 最后更新时间: xxxx
*/
#include <iostream>
xxxxx
xxxxx
xxxxx
...
push
规范
$ git add .
$ git commit -m '-member -time -version -description'
$ git push ...
# 或者多行commit
$ git commit
# 在vscode中写多行注释
# title : -member -time -version -short_description
# content: -long_description
# 例子
$ git add.
$ git commit -m '-yao -03.21.17 -v0.5 -完善search.h'
由组员在开发过程中分文件进行不断完善,包括结构体定义,变量的含义,函数的接口定义以及备注是否存在bug