https://github.com/keyu-tian/cpp-gomoku-with-ai
C++ Gomoku with a strong AI based on minimax search and alpha-beta pruning with Qt5 GUI. *Dozens of C++ tricks & hacks are used to improve efficiency.* Come and try to see if you can beat the powerful AI!
https://github.com/keyu-tian/cpp-gomoku-with-ai
alpha-beta-pruning bitwise-operators gobang heuristic-search minmax-algorithm multi-threading qt qt5-gui
Last synced: 7 months ago
JSON representation
C++ Gomoku with a strong AI based on minimax search and alpha-beta pruning with Qt5 GUI. *Dozens of C++ tricks & hacks are used to improve efficiency.* Come and try to see if you can beat the powerful AI!
- Host: GitHub
- URL: https://github.com/keyu-tian/cpp-gomoku-with-ai
- Owner: keyu-tian
- License: mit
- Created: 2018-08-29T09:39:53.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2020-08-03T08:28:00.000Z (over 5 years ago)
- Last Synced: 2025-04-02T16:50:39.457Z (8 months ago)
- Topics: alpha-beta-pruning, bitwise-operators, gobang, heuristic-search, minmax-algorithm, multi-threading, qt, qt5-gui
- Language: C++
- Homepage:
- Size: 12.5 MB
- Stars: 81
- Watchers: 3
- Forks: 20
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Gobang_by_Kevin

# 简介
一个桌面五子棋应用程序。通过 Qt 5.11.1 (C++ 11) 开发,AI 最大搜索深度可达 18 层,棋力可观。
目前还不算严格的 AI。下一步会用 RL+MCTS(部分参考Alpha Zero)来做一个真正意义上的棋类AI(使用LibTorch)。
# 体验
Windows平台可下载exe文件夹下的.exe文件,直接打开即可。
若版本不兼容或使用其他平台,请将 headers 文件夹下所有文件、sources 文件夹下所有文件以及 gobang_by_Kevin.pro 三部分放在同一目录下,使用Qt打开 gobang_by_Kevin.pro,编译运行后即可体验
操作(皆通过鼠标完成):
- 落子:鼠标直接点击(待落子点有提示标记)
- 与AI对弈时切换先后手并重新开始游戏:new 按钮
- 重新开始游戏:restart 按钮
- 悔棋:retract 按钮
- 切换人机对弈模式与人人对弈模式:change 按钮
- 难度:可在 aithread_algo.cpp 最上方更改搜索深度
- BASE_DEPTH 基础深度 4-6、KILL_DEPTH 浅层算杀深度 8-14、RES_DEPTH 深层算杀深度 12-18
- (后续更新会增设配置设置界面)
(出现真香警告时,说明 AI 搜到了某一方的必胜情况~)
# 涉及算法/技术
- 状态压缩
- 极大极小搜索 + alpha-beta 剪枝 + 特殊剪枝(响应必杀棋)
- A*优化(启发式搜索)
- 迭代加深搜索
- 棋类算杀模块
- 棋型映射表
- Zobrist置换表(testing)
- 多线程
# 关于重构
- 目的在于进行更彻底的解耦,以及简化部分逻辑,以大幅提高可读性(将诸多奇技淫巧进行二次封装)
- 可能会改变状压方式(并利用__gnu_pbds::gp_hash_table进行更高效的棋型识别)