这是一个基于 C 语言实现的五子棋游戏,支持人人对战、人机对战、机机对战、禁手判断、棋谱记录与悔棋等功能。
项目采用模块化设计,主要文件结构如下:
FiveChessWin/
├── AIEngine.c # AI 搜索与评估
├── main.c # 程序入口,主菜单逻辑
├── Game.c # 游戏核心流程 (PvP, PvE等模式调度)
├── board.c # 棋盘数据管理与绘制
├── Input.c # 用户输入处理与校验
├── Judge.c # 胜负判定与禁手
├── history.c # 棋谱记录与悔棋功能
├── include/ # 头文件目录
│ ├── common.h # 通用宏定义与常量
│ ├── board.h # 棋盘相关声明
│ ├── game.h # 游戏流程声明
│ ├── ai.h # AI 接口
│ ├── rules.h # 规则判定声明
│ └── history.h # 历史记录声明
└── README.md # 项目说明文档
- 人人对战部分:
- 先实现棋盘绘制
- 再实现落子
- 然后实现胜负判定
- 最后添加禁手判断与棋谱记录功能
- 接着添加悔棋功能
- 最后进行界面优化与代码重构
- 简述一下我的禁手逻辑:
- 位运算优化:使用位运算表示棋盘状态,移位操作快速初步判断连珠。
- 活四判定:匹配 011110 模式,并递归检查两端空位是否为禁点。
- 三三禁手:遍历所有潜在活三结构,模拟落子并复用活四判断,通过递归深度限制避免死循环。
- 四四禁手:遍历模拟落子,精确识别活四及双冲四情况。
- 逻辑封装:核心判断整合进无输出的 judge 函数供 AI 使用,输出逻辑分离。
- AI逻辑:
- 初始化Zobrist哈希表和置换表
- 先对棋局进行总体评估
- 然后由走法函数,实现禁手过滤和邻近裁剪以优化搜索,生成候选落子列表
- 根节点并行,进入AlphaBeta搜索
- 在搜索过程中使用单子增量更新棋局评估分数
- 利用置换表缓存已评估节点以加速搜索
- 返回最佳落子位置,并记录搜索时间,将最佳落子位置送入AiInput统一接口处理
- 禁手判断逻辑参考借鉴了github上的dhbloo大神的开源程序rapfi [https://github.com/dhbloo/rapfi] ,具体参看这个项目中的第423行到第520行代码。
- AI部分参考了[https://kimlongli.github.io/2016/12/14/%E5%A6%82%E4%BD%95%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E8%BF%98%E5%8F%AF%E4%BB%A5%E7%9A%84%E4%BA%94%E5%AD%90%E6%A3%8BAI/] 的AI设计思路。
- 对以上项目表示感谢!
- 界面整齐:在棋盘中间添加了-号来使棋盘呈现正方形。
- 位运算优化:禁手判断、AI棋形评估等关键逻辑均采用位运算提升效率。
- 棋谱系统:支持将对局记录保存为文件。
- 支持悔棋:输入@0即可悔棋。
- 代码风格: 采用驼峰命名法,变量命名清晰易懂。
- AI 支持:AlphaBeta 搜索 + 棋形评分表 + 禁手过滤 + 邻近裁剪 + Zobrist 哈希与置换表,根节点并行可加速,搜索深度可在开局输入。
本项目使用 GCC 编译器。请确保您的环境中已安装 GCC(如 MinGW 或 MSYS2)。
也支持make命令进行编译。
在项目根目录下打开终端,执行以下命令:
1.编译调试版本:
gcc -g -Wall -Wextra board.c Game.c history.c Input.c Judge.c AIEngine.c main.c -I include -o FiveChess.exe2.编译发布版本:
gcc -O2 -Wall -Wextra board.c Game.c history.c Input.c Judge.c AIEngine.c main.c -I include -o FiveChess.exe若配置好了Makefile,也可以直接运行:
1.编译调试版本:
make debug2.编译发布版本:
make release编译成功后,运行生成的可执行文件:
./FiveChess.exe-
模式选择:
1人人对战2人机对战(玩家可选先后手)3机机对战
-
基础输入:
- 落子格式:
列号行号(如H8、A1、O15),字母区分大小写。 - 悔棋:输入
@0撤销上一步(开局前不可用)。
- 落子格式:
-
人人对战 (PvP):
- 轮流落子,界面提示上一步坐标。
- 开局可选棋谱记录:输入
1并提供文件名。
-
人机对战 (PvE):
- 开局选择执子方(
1玩家执黑,2玩家执白)。 - 输入 AI 搜索深度(整数,越大越强但更耗时)(实测7到8层效果最佳)。
- 落子方式同 PvP,AI 自动落子;界面会显示上一回合 AI 思考用时。
- 开局选择执子方(
-
机机对战 (EvE):
- 可选开启棋谱记录。
- 输入 AI 搜索深度后,双方 AI 自动博弈。(实测7到8层效果最佳)
-
棋谱记录 / 载入:
- 记录:开局时输入
1并输入文件名(如game1.txt),结束后文件保存在程序同级目录。 - 载入:棋谱格式为
A1\nA2\n...,可直接粘贴到控制台载入。
- 记录:开局时输入
- 人人对战:轮流落子。
- 胜负判定:
- 白棋:五连即胜。
- 黑棋:五连即胜。
- 禁手判断(仅限黑棋):
- 长连禁手(六子及以上)。
- 三三禁手(两个活三)。
- 四四禁手(两个四,包括冲四和活四)。
- 辅助功能:
- 上一步落子位置提示。
- 悔棋功能。
- 棋谱文件保存。
- [x]人机对战:
- AI 使用 Alpha-Beta 搜索算法。
- 支持禁手过滤、邻近裁剪、根节点并行、zobrist 哈希与置换表。
- 可调节搜索深度。(实测15s内8层效果最好)
- 机机对战:双方 AI 自动博弈。
- 最初是用来调试AI的,加上也无所谓
- 开发环境:Windows 11 / VS Code / GCC。
- 开发配置:Intel i9-13980HX, 16GB RAM.
本项目采用 GNU General Public License v3.0 (GPL-3.0) 发布,完整条款见 LICENSE。
Copyright (C) 2025 Psi215
- 本项目禁手判断逻辑参考并改编自开源项目 rapfi(https://github.com/dhbloo/rapfi),该项目以 GPL-3.0 许可证发布;
- 依据 GPL-3.0 的 copyleft 条款,本项目作为其衍生作品,同样以 GPL-3.0 发布;
- AI 搜索部分的设计思路参考了公开技术博客,具体实现为本人独立编写,并做了若干优化(Zobrist 置换表、根节点并行、增量评估等)。