diff --git a/README.md b/README.md index 839333a..447915b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,30 @@ # 🎲 五子棋人机对战AI +![Build Status](https://img.shields.io/badge/build-passing-brightgreen) +![License](https://img.shields.io/badge/license-MIT-blue) +![Code Lines](https://img.shields.io/tokei/lines/github/your-username/your-repo) + +## 目录 +- [🎲 五子棋人机对战AI](#-五子棋人机对战ai) + - [目录](#目录) + - [项目简介](#项目简介) + - [✨ 功能特性](#-功能特性) + - [🚀 快速开始](#-快速开始) + - [编译程序](#编译程序) + - [运行游戏](#运行游戏) + - [🎯 游戏玩法](#-游戏玩法) + - [💻 开发环境](#-开发环境) + - [⚠️ 常见问题](#️-常见问题) + - [权限问题](#权限问题) + - [中文显示问题](#中文显示问题) + - [🛠️ 技术实现](#️-技术实现) + - [核心决策算法](#核心决策算法) + - [启发式评估函数](#启发式评估函数) + - [📂 代码结构](#-代码结构) + - [📜 许可证](#-许可证) + - [🙋 反馈与贡献](#-反馈与贡献) + - [🚀 未来计划](#-未来计划) + ## 项目简介 基于C语言实现的五子棋人机对战系统,采用α-β剪枝优化的极小极大算法,支持自定义棋盘大小、游戏复盘和实时评分。 @@ -11,12 +36,17 @@ - 📊 实时对局评分系统 - ↩️ 悔棋功能(可撤销上一步) - 🖥️ 清晰的终端界面显示 +- ✔️ 健壮的输入验证(确保所有数字输入都在有效范围内) +- ⏱️ 可选的回合计时器 +- 💾 自动游戏记录保存 ## 🚀 快速开始 +![游戏演示](https://your-gif-url.com/demo.gif) + ### 编译程序 ```bash -gcc 五子棋.c gobang.c -o output/五子棋.exe +gcc 五子棋.c gobang.c game_mode.c -o output/五子棋.exe ``` ### 运行游戏 @@ -32,43 +62,85 @@ gcc 五子棋.c gobang.c -o output/五子棋.exe 4. 游戏结束可查看完整复盘和评分 ## 💻 开发环境 -- 操作系统: Windows/Linux/macOS -- 编译器: GCC (MinGW on Windows) +- 操作系统: Windows (当前版本使用了Windows特有的 `_kbhit()` 和 `Sleep()` 函数,因此仅限Windows平台) +- 编译器: GCC (MinGW(gcc为14.2.0) on Windows) - 终端: 支持UTF-8编码的终端 +> **跨平台兼容性说明:** +> +> 为了未来能在Linux或macOS等其他操作系统上运行,需要将平台特定的代码(如 `_kbhit()`)替换为跨平台的实现,或使用条件编译(`#ifdef _WIN32`)进行隔离。 + ## ⚠️ 常见问题 ### 权限问题 -如果遇到无法创建记录文件的问题: -1. 以管理员身份运行程序 -2. 手动创建records目录 -3. 检查防病毒软件设置 +如果程序在保存游戏记录时提示“无法创建文件”或类似错误,通常是由于缺少写入权限。请尝试以下解决方案: + +1. **以管理员身份运行**:右键点击 `五子棋.exe` 或在管理员权限的终端中运行程序。 +2. **检查目录权限**:确保程序所在目录不是系统保护目录(如 `C:\Program Files`)。建议将项目放在用户目录下(如 `D:\Code`)。 +3. **手动创建 `records` 目录**:如果 `records` 目录不存在,请在 `output` 目录下手动创建一个。 ### 中文显示问题 -如果遇到乱码: -1. Windows: 确保终端使用UTF-8编码 -2. 添加启动参数: `chcp 65001` +如果在Windows终端中遇到中文字符显示为乱码,是由于终端编码页不匹配导致的。请在运行程序前执行以下命令: + +```bash +chcp 65001 +``` + +该命令会将当前终端的编码页切换到UTF-8,从而正确显示中文字符。为方便起见,你可以创建一个启动脚本(`.bat` 文件)来自动执行此操作: + +**start_game.bat** +```batch +@echo off +chcp 65001 +.\output\五子棋.exe +``` ## 🛠️ 技术实现 -### 核心算法 -- α-β剪枝优化的极小极大算法 -- 3层搜索深度(可调) -- 威胁检测优先机制 +项目的AI主要基于以下技术实现: -### 评估系统 -- 活四/冲四/活三等棋型识别 -- 位置权重评估(中心优先) -- 双向延伸检测 -- 复盘评分系统(计算双方得分占比) +### 核心决策算法 + +- **极小极大算法 (Minimax)**:作为决策的基础,模拟对弈双方的每一步,选择对我方最有利的走法。 +- **α-β 剪枝 (Alpha-Beta Pruning)**:对极小极大算法的關鍵優化,通过剪掉不可能影响最终决策的搜索分支,大幅提升AI的计算效率,使其能够在有限时间内达到更深的搜索深度。 +- **搜索深度**:AI的思考深度,默认为3层,并可根据难度设置进行调整。搜索深度越深,AI的棋力越强,但计算耗时也越长。 + +### 启发式评估函数 + +为了判断棋局的优劣,AI使用了一套复杂的启发式评估函数,主要包括: + +- **棋型识别 (Pattern Recognition)**:能够识别并评估多种关键棋型,如“活四”、“冲四”、“活三”、“眠三”等,并为每种棋型赋予不同权重。 +- **位置权重 (Positional Value)**:棋盘上不同位置的战略价值不同,中心位置通常比边缘位置更有优势。评估函数会为中心区域的落子给予额外加分。 +- **威胁检测 (Threat Detection)**:优先搜索能够直接形成制胜威胁的棋步,如“连五”或“活四”,从而快速响应对手的进攻或抓住制胜机会。 +- **双向延伸评估**:评估一个棋子在特定方向上是否有足够的空间形成连续棋型,避免在被封堵的位置浪费棋步。 ## 📂 代码结构 -- `五子棋.c` - 主程序(游戏流程控制) -- `gobang.c` - 核心算法实现 -- `gobang.h` - 公共定义和接口 +- `五子棋.c` - 主程序入口,负责初始化和模式选择 +- `gobang.c` - 核心游戏逻辑,包括棋盘操作、胜负判断、AI算法等 +- `gobang.h` - `gobang.c` 的头文件,定义核心数据结构和函数原型 +- `game_mode.c` - 各种游戏模式的实现,如人机对战、双人对战和复盘模式 +- `game_mode.h` - `game_mode.c` 的头文件,定义游戏模式相关函数原型 ## 📜 许可证 -自由使用,请注明原作者。 + +该项目采用 [MIT 许可证](https://opensource.org/licenses/MIT)进行授权。 + +简单来说,你可以自由地使用、复制、修改、合并、出版、分发、再授权和/或销售本软件的副本,只需在你的项目中包含原始的版权和许可声明即可。 ## 🙋 反馈与贡献 -欢迎提交Issue或Pull Request改进项目! + +我们非常欢迎任何形式的反馈和贡献!如果你发现了Bug、有功能建议,或者希望改进代码,请随时通过以下方式参与: + +- **提交 Issue**:如果你遇到问题或有新的想法,请在 [GitHub Issues](https://github.com/LHY0125/Gobang-Game/issues) 页面提交详细描述。 +- **发起 Pull Request**:如果你对代码进行了改进,欢迎提交 Pull Request。请确保你的代码风格与项目保持一致,并附上清晰的改动说明。 + +你的每一次贡献都将使这个项目变得更好! + +## 🚀 未来计划 + +为了让这个项目变得更完善,我们计划在未来实现以下功能: + +- [ ] **图形用户界面 (GUI)**:使用 `SDL2` 或 `Qt` 等库,将当前的终端界面升级为图形化界面,提升用户体验。 +- [ ] **网络对战功能**:增加一个在线对战模式,允许两名玩家通过网络进行对战。 +- [ ] **棋谱库集成**:引入开局库,使AI在游戏初期能够选择更优的开局走法。 +- [ ] **代码重构与优化**:持续优化现有代码,提高模块化程度和运行效率,并实现完全的跨平台兼容性。