Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

五子棋 (FiveChess)

这是一个基于 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统一接口处理

项目参考

亮点与优势

  • 界面整齐:在棋盘中间添加了-号来使棋盘呈现正方形。
  • 位运算优化:禁手判断、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.exe

2.编译发布版本:

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 debug

2.编译发布版本:

make release

运行

编译成功后,运行生成的可执行文件:

./FiveChess.exe

操作说明

  1. 模式选择:

    • 1 人人对战
    • 2 人机对战(玩家可选先后手)
    • 3 机机对战
  2. 基础输入:

    • 落子格式:列号行号(如 H8、A1、O15),字母区分大小写。
    • 悔棋:输入 @0 撤销上一步(开局前不可用)。
  3. 人人对战 (PvP):

    • 轮流落子,界面提示上一步坐标。
    • 开局可选棋谱记录:输入 1 并提供文件名。
  4. 人机对战 (PvE):

    • 开局选择执子方(1 玩家执黑,2 玩家执白)。
    • 输入 AI 搜索深度(整数,越大越强但更耗时)(实测7到8层效果最佳)。
    • 落子方式同 PvP,AI 自动落子;界面会显示上一回合 AI 思考用时。
  5. 机机对战 (EvE):

    • 可选开启棋谱记录。
    • 输入 AI 搜索深度后,双方 AI 自动博弈。(实测7到8层效果最佳)
  6. 棋谱记录 / 载入:

    • 记录:开局时输入 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 置换表、根节点并行、增量评估等)。

About

C 语言实现的五子棋对弈引擎:Alpha-Beta 搜索 + Zobrist 置换表 + 根节点多线程并行 + 连珠禁手规则

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages