2025-07-09 23:00:26 +08:00
2025-06-29 22:51:33 +08:00
2025-07-09 23:00:26 +08:00
2025-07-03 09:31:48 +08:00
2025-07-09 23:00:26 +08:00
2025-07-09 23:00:26 +08:00
2025-07-07 18:24:02 +08:00
2025-07-09 23:00:26 +08:00
2025-07-07 18:24:02 +08:00
2025-07-09 23:00:26 +08:00
2025-07-03 09:31:48 +08:00
2025-07-09 23:00:26 +08:00
2025-07-09 23:00:26 +08:00
2025-07-09 23:00:26 +08:00
2025-07-09 23:00:26 +08:00

C语言五子棋人机对战AI

Build Status License

目录

项目简介

这是一个使用C语言实现的五子棋人机对战系统,它基于 Alpha-Beta 剪枝优化的 Minimax 算法,并支持自定义棋盘大小、游戏存档和实时悔棋。

功能特性

  • 人机对战模式
  • chessboard 自定义棋盘尺寸 (5x5至25x25)
  • 多级AI难度 (1-5级可调)
  • 自动游戏存档与加载
  • 实时对局控制系统
  • 悔棋功能 (可撤销上一步)
  • 纯粹的终端界面显示
  • 完备的输入验证 (确保所有用户输入都在有效范围内)
  • 可选的回合计时器
  • 自动游戏记录保存
  • 复盘功能 (支持保存和回顾对局记录)
  • 评分系统 (可以对每一步棋进行评分和分析)
  • 禁手规则支持 (防止玩家进行无意义的走法)
  • 内存管理优化 (改进了内存管理,减少了资源占用)
  • 模块化设计 (便于功能扩展和维护)
  • 增强错误提示 (帮助用户快速定位问题)

快速开始

编译项目

gcc 五子棋.c gobang.c game_mode.c init_board.c record.c ai.c -o gobang.exe

运行游戏

.\gobang.exe

游戏玩法

  1. 启动程序后设置棋盘大小 (默认为15x15)
  2. 选择AI难度等级 (1-5)
  3. 轮流输入坐标进行游戏 (格式:行 列)
    • 输入R/r可悔棋
  4. 游戏结束后可查看对局存档和日志

环境要求

  • 操作系统: Windows (当前版本使用了Windows特有的 _kbhit()Sleep() 函数,因此暂不跨平台)
  • 编译器: GCC (MinGW-w64)
  • 终端: 支持UTF-8编码的终端

跨平台兼容性说明:

为了未来在Linux或macOS等其他操作系统上运行,需要将平台特定的代码(如 _kbhit())替换为跨平台的实现,或使用条件编译(#ifdef _WIN32)进行隔离。

常见问题

权限问题

如果在保存游戏记录时提示“无法创建文件”,这通常是由于程序缺少写入权限。请尝试以下解决方案:

  1. 以管理员身份运行:右键点击 gobang.exe 并在管理员权限的终端中运行程序。
  2. 更改项目目录权限:确保项目目录不在受系统保护的目录(如 C:\Program Files),建议将项目放在用户目录下,例如 D:\Code
  3. 手动创建 records 目录:如果 records 目录不存在,请在 gobang.exe 所在目录手动创建一个。

乱码显示问题

如果在Windows终端中出现中文字符显示为乱码,这是由于终端代码页不匹配导致的。请在程序运行前执行以下命令:

chcp 65001

这会把当前终端的代码页切换为UTF-8,从而正确显示中文字符。为了方便,你可以创建一个批处理文件 .bat 来自动执行此操作。

start_game.bat

@echo off
chcp 65001
.\gobang.exe

AI 设计实现

项目的AI主要基于以下技术实现:

核心算法

  • Minimax算法 (Minimax):作为博弈树的基础模型,为双人对弈的每一步选择最优解法。
  • Alpha-Beta 剪枝 (Alpha-Beta Pruning):对Minimax算法的重大优化,通过剪掉那些不影响最终决策的树枝来提高AI的计算效率,使其能够在有限时间内达到更深的搜索深度。
  • 搜索深度:AI的思考深度,默认为3层,可以根据难度等级进行调整。深度越大,AI预测能力越强,但计算耗时也越长。

棋局评估函数

为了对棋局进行价值评估,AI使用了一套复杂的评分系统,其主要依据包括:

  • 棋型识别 (Pattern Recognition):能够识别并评估游戏中的关键棋型,如“连五”、“活四”、“冲四”、“活三”等,并为每种棋型赋予不同权重。
  • 位置权重 (Positional Value):棋盘上不同位置的战略价值不同,中心位置通常比边缘位置更有优势。评估函数会为棋盘上的落子点附加位置分。
  • 威胁检测 (Threat Detection):评估那些能够直接形成制胜局面的落子点,如“四三”或“活三”,并对这些点给予极高的评价值,以抓住制胜机会。
  • 双向连通性:在评估一个点时,会同时判断其是否拥有足够的空间形成有效棋型,避免在被封锁的位置下出无效棋。

项目结构

  • 五子棋.c - 主程序入口,负责初始化与游戏模式选择。
  • gobang.c - 核心游戏逻辑,包括棋盘操作、胜负判断。
  • gobang.h - gobang.c 的头文件,定义了核心数据结构和函数原型。
  • game_mode.c - 各种游戏模式的实现,如人机对战、双人对战和观战模式。
  • game_mode.h - game_mode.c 的头文件,声明游戏模式相关函数原型。
  • init_board.c - 棋盘初始化相关功能,包括设置棋盘大小、游戏选项等。
  • init_board.h - init_board.c 的头文件。
  • record.c - 游戏记录的保存和读取功能。
  • record.h - record.c 的头文件。
  • ai.c - AI算法的实现,包括Minimax和Alpha-Beta剪枝。
  • ai.h - ai.c 的头文件。

许可证

本项目采用 MIT 许可证授权。

这意味着你可以自由地使用、复制、修改、合并、出版、分发、再授权和/或销售本软件的副本,只需在所有副本或重要部分中包含原始的版权声明和本许可声明即可。

欢迎贡献

我们非常欢迎任何形式的反馈和贡献!如果你发现了Bug、有功能建议,或希望改进代码,请随时通过以下方式参与:

  • 提交 Issue:对于问题反馈或新想法,请在 GitHub Issues 页面提交详细描述。
  • 发起 Pull Request:如果你对源码进行了改进,欢迎提交 Pull Request。请确保你的代码风格与项目保持一致,并提供清晰的改动说明。

你的每一次贡献都将使这个项目变得更好!

未来计划

为了让这个项目变得更好,我们计划在未来实现以下功能:

  • 图形用户界面 (GUI):使用 SDL2Qt 等库,将当前的终端界面替换为图形化界面,提升用户体验。
  • 网络对战功能:增加一个在线对战模式,让玩家可以通过网络进行对战。
  • 棋谱库工具:引入开局库,使AI在游戏开局阶段能够选择最优的落子方案。
  • 代码重构与优化:持续优化现有代码,提高模块化程度和运行效率,并实现完全的跨平台兼容性。
S
Description
这是一个使用纯 C 语言编写的现代化五子棋系统。采用轻量级的 IUP 库构建原生风格的图形化用户界面。系统不仅支持基于 Minimax 算法(带 Alpha-Beta 剪枝)的高级人机对战,还完美支持基于 ENet 的局域网多人实时联机对弈。
https://github.com/LHY0125/Gobang-Game
Readme 5.4 MiB
Languages
C 82.6%
C++ 15.4%
Makefile 0.7%
CMake 0.6%
Inno Setup 0.3%
Other 0.4%