首先确保你的MinGW使用MSVCRT,gcc版本最好为11.2。如果不确定,请使用这个MinGW-w64或从群文件下载
使用方法:
- 将MinGW解压到某个地方,进入
/bin
目录,复制路径。 - 打开设置,进入系统-系统信息-高级系统设置,选择环境变量,在打开的窗口中双击用户变量里的
Path
,点击新建,把复制的路径粘贴进去,并把它上移到顶部。 win
+r
输入cmd
打开命令行,输入gcc -v
,如果输出的信息中COLLECT_LTO_WRAPPER=
大致为你复制的路径即为成功。
- git clone https://gitee.com/YunShu007/dots-and-boxes.git
- 进入项目目录,新建
build
文件夹,将3rdparty/SFML/bin
文件夹中的dll
文件复制到刚刚新建的build
文件夹中, 将res
目录复制进build
目录中 - 使用VS Code打开项目,请保证VSCode仅打开项目文件夹,而不是打开项目文件夹的父文件夹
- 新建
.vscode
文件夹,在.vscode
里新建文件tasks.json
和launch.json
.
tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "g++ src/*.cpp src/AI/*.cpp -o build/game.exe -I ./3rdparty/SFML/include -L./3rdparty/SFML/lib -lsfml-graphics -lsfml-window -lsfml-system"
}
]
}
如果你使用的是官方C++插件,launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\build\\game.exe",
"cwd": "${workspaceFolder}\\build",
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb.exe",
"preLaunchTask": "build"
}
]
}
- git clone https://gitee.com/YunShu007/dots-and-boxes.git
- 进入项目目录,新建
build
文件夹,将3rdparty/SFML/bin
文件夹中的dll
文件复制到刚刚新建的build
文件夹中,将res
目录复制进build
目录中 - 回到项目目录,打开命令行执行
g++ src/*.cpp src/AI/*.cpp src/element/*.cpp src/CJSON/*.cpp src/CJSON/*.h src/CJSON/*.c -o build/game.exe -I ./3rdparty/SFML/include -L./3rdparty/SFML/lib -lsfml-graphics -lsfml-window -lsfml-system
- 进入
build
文件夹,即可看到game.exe
, 执行即可。
首先安装CMake
- git clone https://gitee.com/YunShu007/dots-and-boxes.git
- 安装CMake Tools插件
- 重启VS Code
- 重新打开会让你选择工具,选择
GCC 11.2.0 X86_64-w64-mingw32-make
- 如果上一步不小心选错,按
Ctrl
+Shift
+P
打开指令栏,输入kit,点击CMake: 选择工具包
重新选择 - 成功后点击VS Code下方状态栏上的运行按钮即可运行,如需调试请安装官方插件C/C++
tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"type": "cmake",
"label": "CMake: build",
"command": "build",
"targets": [
"dots_and_boxes"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [],
"detail": "CMake template build task"
}
]
}
launch.json:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/dots_and_boxes.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/build/",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "CMake: build"
},
]
}
- 打开Clion,选择从VCS导入,输入https://gitee.com/YunShu007/dots-and-boxes.git
- 等待加载,完成后会弹出配置cmake的窗口,直接点确定即可。
Clion自带Cmake和符合要求的MinGW,所以可以开箱即用
入口函数为void UCT(Board *board, int player)
,在此函数中更改AI逻辑
棋盘是11x11大小,有点(DOT),横线(HENG),竖线(SHU),被占据的线(OCCLINE),格子(BOX),先手黑方格子(BLACK_BOX),后手白方格子(WHITE_BOX).
棋盘使用二位数组int8_t map[11][11]储存,横纵坐标皆为偶数时点,皆为奇数时格子,横偶竖奇是横线,横奇竖偶是竖线。
判定一个坐标是否为未被占据的线可以使用if(map[i][j]!=OCCLINE)或者if(map[i][j]==HENG||map[i][j]==SHU)
判定一个格子是否被占可以使用if(map[i][j]==BOX)
坐标LOC定义为std::pair<int,int>