2025-06-30 18:19:53 +08:00
2025-06-29 22:51:33 +08:00
2025-06-30 18:19:53 +08:00
2025-06-30 18:19:53 +08:00
2025-06-30 18:19:53 +08:00
2025-06-30 18:19:53 +08:00
2025-06-30 18:19:53 +08:00
2025-06-29 22:51:33 +08:00
2025-06-29 22:51:33 +08:00

🎲 五子棋人机对战AI

Build Status License Code Lines

目录

项目简介

基于C语言实现的五子棋人机对战系统,采用α-β剪枝优化的极小极大算法,支持自定义棋盘大小、游戏复盘和实时评分。

功能特性

  • 🎮 人机对战模式
  • ⚙️ 可调棋盘尺寸(5x5到25x25)
  • 🧠 智能AI决策(1-5级难度)
  • 🔍 完整游戏复盘功能
  • 📊 实时对局评分系统
  • ↩️ 悔棋功能(可撤销上一步)
  • 🖥️ 清晰的终端界面显示
  • ✔️ 健壮的输入验证(确保所有数字输入都在有效范围内)
  • ⏱️ 可选的回合计时器
  • 💾 自动游戏记录保存

🚀 快速开始

游戏演示

编译程序

gcc 五子棋.c gobang.c game_mode.c -o output/五子棋.exe

运行游戏

.\output\五子棋.exe

🎯 游戏玩法

  1. 启动后设置棋盘大小(默认15x15)
  2. 选择AI难度级别(1-5)
  3. 输入坐标进行游戏(格式:行 列)
    • 输入R/r可悔棋
  4. 游戏结束可查看完整复盘和评分

💻 开发环境

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

跨平台兼容性说明:

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

⚠️ 常见问题

权限问题

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

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

中文显示问题

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

chcp 65001

该命令会将当前终端的编码页切换到UTF-8,从而正确显示中文字符。为方便起见,你可以创建一个启动脚本(.bat 文件)来自动执行此操作:

start_game.bat

@echo off
chcp 65001
.\output\五子棋.exe

🛠️ 技术实现

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

核心决策算法

  • 极小极大算法 (Minimax):作为决策的基础,模拟对弈双方的每一步,选择对我方最有利的走法。
  • α-β 剪枝 (Alpha-Beta Pruning):对极小极大算法的關鍵優化,通过剪掉不可能影响最终决策的搜索分支,大幅提升AI的计算效率,使其能够在有限时间内达到更深的搜索深度。
  • 搜索深度:AI的思考深度,默认为3层,并可根据难度设置进行调整。搜索深度越深,AI的棋力越强,但计算耗时也越长。

启发式评估函数

为了判断棋局的优劣,AI使用了一套复杂的启发式评估函数,主要包括:

  • 棋型识别 (Pattern Recognition):能够识别并评估多种关键棋型,如“活四”、“冲四”、“活三”、“眠三”等,并为每种棋型赋予不同权重。
  • 位置权重 (Positional Value):棋盘上不同位置的战略价值不同,中心位置通常比边缘位置更有优势。评估函数会为中心区域的落子给予额外加分。
  • 威胁检测 (Threat Detection):优先搜索能够直接形成制胜威胁的棋步,如“连五”或“活四”,从而快速响应对手的进攻或抓住制胜机会。
  • 双向延伸评估:评估一个棋子在特定方向上是否有足够的空间形成连续棋型,避免在被封堵的位置浪费棋步。

📂 代码结构

  • 五子棋.c - 主程序入口,负责初始化和模式选择
  • gobang.c - 核心游戏逻辑,包括棋盘操作、胜负判断、AI算法等
  • gobang.h - gobang.c 的头文件,定义核心数据结构和函数原型
  • game_mode.c - 各种游戏模式的实现,如人机对战、双人对战和复盘模式
  • game_mode.h - game_mode.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%