mirror of
https://github.com/LHY0125/Gobang-Game.git
synced 2026-05-10 02:19:46 +08:00
Add files via upload
This commit is contained in:
@@ -1,95 +1,178 @@
|
||||
# C语言五子棋人机对战AI
|
||||
# C语言五子棋人机对战AI
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## 目录
|
||||
- [C语言五子棋人机对战AI](#c语言五子棋人机对战ai)
|
||||
- [目录](#目录)
|
||||
- [项目简介](#项目简介)
|
||||
- [功能特性](#功能特性)
|
||||
- [快速开始](#快速开始)
|
||||
- [编译项目](#编译项目)
|
||||
- [运行游戏](#运行游戏)
|
||||
- [游戏玩法](#游戏玩法)
|
||||
- [环境要求](#环境要求)
|
||||
- [常见问题](#常见问题)
|
||||
- [权限问题](#权限问题)
|
||||
- [乱码显示问题](#乱码显示问题)
|
||||
- [AI 设计实现](#ai-设计实现)
|
||||
- [核心算法](#核心算法)
|
||||
- [棋局评估函数](#棋局评估函数)
|
||||
- [项目结构](#项目结构)
|
||||
- [许可证](#许可证)
|
||||
- [欢迎贡献](#欢迎贡献)
|
||||
- [未来计划](#未来计划)
|
||||
> ? **最新版本 v4.0** - 全面重构,新增配置管理、复盘分析、评分系统等核心功能
|
||||
|
||||
## 项目简介
|
||||
这是一个使用C语言实现的五子棋人机对战系统,它基于 Alpha-Beta 剪枝优化的 Minimax 算法,并支持自定义棋盘大小、游戏存档和实时悔棋。
|
||||
## ? 版本更新
|
||||
|
||||
## 功能特性
|
||||
- 人机对战模式
|
||||
- chessboard 自定义棋盘尺寸 (5x5至25x25)
|
||||
- 多级AI难度 (1-5级可调)
|
||||
- 自动游戏存档与加载
|
||||
- 实时对局控制系统
|
||||
- 悔棋功能 (可撤销上一步)
|
||||
- 纯粹的终端界面显示
|
||||
- 完备的输入验证 (确保所有用户输入都在有效范围内)
|
||||
- 可选的回合计时器
|
||||
- 自动游戏记录保存
|
||||
- 复盘功能 (支持保存和回顾对局记录)
|
||||
- 评分系统 (可以对每一步棋进行评分和分析)
|
||||
- 禁手规则支持 (防止玩家进行无意义的走法)
|
||||
- 内存管理优化 (改进了内存管理,减少了资源占用)
|
||||
- 模块化设计 (便于功能扩展和维护)
|
||||
- 增强错误提示 (帮助用户快速定位问题)
|
||||
### v5.0 (2025-07-10) - 重大更新
|
||||
- ? **新增配置管理系统** - 支持INI配置文件持久化
|
||||
- ? **完整复盘功能** - 逐步回放对局并提供专业评分
|
||||
- ? **智能评分系统** - 每步棋评分分析和MVP评选
|
||||
- ? **现代化UI界面** - 重新设计的用户交互界面
|
||||
- ? **模块化重构** - 清晰的代码架构,便于维护扩展
|
||||
- ?? **禁手规则支持** - 可选启用标准五子棋禁手规则
|
||||
- ?? **计时器功能** - 支持每回合时间限制设置
|
||||
|
||||
## 快速开始
|
||||
## 目录
|
||||
- [C语言五子棋人机对战AI](#c语言五子棋人机对战ai)
|
||||
- [? 版本更新](#-版本更新)
|
||||
- [v5.0 (2025-07-10) - 重大更新](#v50-2025-07-10---重大更新)
|
||||
- [目录](#目录)
|
||||
- [项目简介](#项目简介)
|
||||
- [功能特性](#功能特性)
|
||||
- [? 游戏模式](#-游戏模式)
|
||||
- [?? 游戏设置](#?-游戏设置)
|
||||
- [? 游戏功能](#-游戏功能)
|
||||
- [? 用户体验](#-用户体验)
|
||||
- [? 技术特性](#-技术特性)
|
||||
- [快速开始](#快速开始)
|
||||
- [编译项目](#编译项目)
|
||||
- [运行游戏](#运行游戏)
|
||||
- [游戏玩法](#游戏玩法)
|
||||
- [? 快速开始](#-快速开始)
|
||||
- [? 对局操作](#-对局操作)
|
||||
- [?? 配置管理](#?-配置管理)
|
||||
- [? 复盘功能](#-复盘功能)
|
||||
- [环境要求](#环境要求)
|
||||
- [常见问题](#常见问题)
|
||||
- [权限问题](#权限问题)
|
||||
- [乱码显示问题](#乱码显示问题)
|
||||
- [AI 设计实现](#ai-设计实现)
|
||||
- [核心算法](#核心算法)
|
||||
- [棋局评估函数](#棋局评估函数)
|
||||
- [项目结构](#项目结构)
|
||||
- [? 核心模块](#-核心模块)
|
||||
- [? 功能模块](#-功能模块)
|
||||
- [? 配置和文档](#-配置和文档)
|
||||
- [? 开发工具](#-开发工具)
|
||||
- [许可证](#许可证)
|
||||
- [欢迎贡献](#欢迎贡献)
|
||||
- [未来计划](#未来计划)
|
||||
- [? 已完成功能](#-已完成功能)
|
||||
- [? 开发路线图](#-开发路线图)
|
||||
- [? 用户体验提升](#-用户体验提升)
|
||||
- [? 网络功能](#-网络功能)
|
||||
- [? AI增强](#-ai增强)
|
||||
- [? 技术优化](#-技术优化)
|
||||
|
||||
### 编译项目
|
||||
## 项目简介
|
||||
这是一个使用C语言实现的五子棋人机对战系统,它基于 Alpha-Beta 剪枝优化的 Minimax 算法,并支持自定义棋盘大小、游戏存档和实时悔棋。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### ? 游戏模式
|
||||
- **人机对战模式** - 与智能AI进行对弈
|
||||
- **双人对战模式** - 支持本地双人游戏
|
||||
- **复盘模式** - 回顾和分析历史对局
|
||||
|
||||
### ?? 游戏设置
|
||||
- **自定义棋盘尺寸** - 支持5x5至25x25可调节棋盘
|
||||
- **多级AI难度** - 1-5级智能难度可选
|
||||
- **配置管理系统** - 持久化保存游戏设置
|
||||
- **禁手规则支持** - 可选启用五子棋标准禁手规则
|
||||
- **回合计时器** - 可设置每回合思考时间限制
|
||||
|
||||
### ? 游戏功能
|
||||
- **实时对局控制** - 悔棋、认输、保存等操作
|
||||
- **自动游戏记录** - 完整保存对局过程到CSV文件
|
||||
- **智能评分系统** - 对每步棋进行专业评分和分析
|
||||
- **完整复盘功能** - 逐步回放对局并显示评分
|
||||
- **MVP评选系统** - 自动评选对局最佳表现者
|
||||
|
||||
### ? 用户体验
|
||||
- **现代化UI界面** - 清晰直观的终端用户界面
|
||||
- **完备输入验证** - 确保所有用户输入的有效性和安全性
|
||||
- **智能错误提示** - 详细的错误信息和操作指导
|
||||
- **跨平台兼容** - 支持Windows系统,预留跨平台扩展
|
||||
|
||||
### ? 技术特性
|
||||
- **模块化架构** - 清晰的代码结构,便于维护和扩展
|
||||
- **内存优化管理** - 高效的内存使用和资源管理
|
||||
- **配置文件支持** - INI格式配置文件自动加载保存
|
||||
- **UTF-8编码支持** - 完美支持中文显示
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 编译项目
|
||||
```bash
|
||||
gcc 五子棋.c gobang.c game_mode.c init_board.c record.c ai.c -o gobang.exe
|
||||
gcc -o gobang.exe main.c gobang.c game_mode.c ai.c record.c init_board.c ui.c config.c
|
||||
```
|
||||
|
||||
### 运行游戏
|
||||
或者使用优化编译:
|
||||
```bash
|
||||
gcc -O2 -o gobang.exe main.c gobang.c game_mode.c ai.c record.c init_board.c ui.c config.c
|
||||
```
|
||||
|
||||
### 运行游戏
|
||||
```bash
|
||||
.\gobang.exe
|
||||
```
|
||||
|
||||
## 游戏玩法
|
||||
1. 启动程序后设置棋盘大小 (默认为15x15)
|
||||
2. 选择AI难度等级 (1-5)
|
||||
3. 轮流输入坐标进行游戏 (格式:行 列)
|
||||
- 输入R/r可悔棋
|
||||
4. 游戏结束后可查看对局存档和日志
|
||||
## 游戏玩法
|
||||
|
||||
## 环境要求
|
||||
- 操作系统: Windows (当前版本使用了Windows特有的 `_kbhit()` 和 `Sleep()` 函数,因此暂不跨平台)
|
||||
- 编译器: GCC (MinGW-w64)
|
||||
- 终端: 支持UTF-8编码的终端
|
||||
### ? 快速开始
|
||||
1. **启动游戏**:运行 `gobang.exe` 进入主菜单
|
||||
2. **选择模式**:
|
||||
- `1` - 人机对战模式
|
||||
- `2` - 双人对战模式
|
||||
- `3` - 复盘模式
|
||||
- `4` - 配置管理
|
||||
- `5` - 游戏规则
|
||||
- `6` - 关于信息
|
||||
- `7` - 退出游戏
|
||||
|
||||
> **跨平台兼容性说明:**
|
||||
### ? 对局操作
|
||||
- **落子**:输入坐标 (格式: `行 列`,如 `8 8`)
|
||||
- **悔棋**:输入 `R` 或 `r` 撤销上一步
|
||||
- **认输**:输入 `S` 或 `s` 主动认输
|
||||
- **保存**:输入 `SAVE` 保存当前对局
|
||||
- **退出**:输入 `EXIT` 退出当前对局
|
||||
|
||||
### ?? 配置管理
|
||||
- **棋盘大小**:5x5 至 25x25 可调 (默认15x15)
|
||||
- **AI难度**:1-5级智能难度 (默认3级)
|
||||
- **禁手规则**:可选启用标准五子棋禁手
|
||||
- **计时器**:可设置每回合时间限制
|
||||
- **配置保存**:所有设置自动保存到 `gobang_config.ini`
|
||||
|
||||
### ? 复盘功能
|
||||
- **自动记录**:每局游戏自动保存到 `records/` 目录
|
||||
- **逐步回放**:按步骤重现整局对弈过程
|
||||
- **评分分析**:显示每步棋的专业评分
|
||||
- **MVP评选**:自动评选本局最佳表现者
|
||||
- **胜负统计**:完整的对局结果记录
|
||||
|
||||
## 环境要求
|
||||
- 操作系统: Windows (当前版本使用了Windows特有的 `_kbhit()` 和 `Sleep()` 函数,因此暂不跨平台)
|
||||
- 编译器: GCC (MinGW-w64)
|
||||
- 终端: 支持UTF-8编码的终端
|
||||
|
||||
> **跨平台兼容性说明:**
|
||||
>
|
||||
> 为了未来在Linux或macOS等其他操作系统上运行,需要将平台特定的代码(如 `_kbhit()`)替换为跨平台的实现,或使用条件编译(`#ifdef _WIN32`)进行隔离。
|
||||
> 为了未来在Linux或macOS等其他操作系统上运行,需要将平台特定的代码(如 `_kbhit()`)替换为跨平台的实现,或使用条件编译(`#ifdef _WIN32`)进行隔离。
|
||||
|
||||
## 常见问题
|
||||
## 常见问题
|
||||
|
||||
### 权限问题
|
||||
如果在保存游戏记录时提示“无法创建文件”,这通常是由于程序缺少写入权限。请尝试以下解决方案:
|
||||
### 权限问题
|
||||
如果在保存游戏记录时提示“无法创建文件”,这通常是由于程序缺少写入权限。请尝试以下解决方案:
|
||||
|
||||
1. **以管理员身份运行**:右键点击 `gobang.exe` 并在管理员权限的终端中运行程序。
|
||||
2. **更改项目目录权限**:确保项目目录不在受系统保护的目录(如 `C:\Program Files`),建议将项目放在用户目录下,例如 `D:\Code`。
|
||||
3. **手动创建 `records` 目录**:如果 `records` 目录不存在,请在 `gobang.exe` 所在目录手动创建一个。
|
||||
1. **以管理员身份运行**:右键点击 `gobang.exe` 并在管理员权限的终端中运行程序。
|
||||
2. **更改项目目录权限**:确保项目目录不在受系统保护的目录(如 `C:\Program Files`),建议将项目放在用户目录下,例如 `D:\Code`。
|
||||
3. **手动创建 `records` 目录**:如果 `records` 目录不存在,请在 `gobang.exe` 所在目录手动创建一个。
|
||||
|
||||
### 乱码显示问题
|
||||
如果在Windows终端中出现中文字符显示为乱码,这是由于终端代码页不匹配导致的。请在程序运行前执行以下命令:
|
||||
### 乱码显示问题
|
||||
如果在Windows终端中出现中文字符显示为乱码,这是由于终端代码页不匹配导致的。请在程序运行前执行以下命令:
|
||||
|
||||
```bash
|
||||
chcp 65001
|
||||
```
|
||||
|
||||
这会把当前终端的代码页切换为UTF-8,从而正确显示中文字符。为了方便,你可以创建一个批处理文件 `.bat` 来自动执行此操作。
|
||||
这会把当前终端的代码页切换为UTF-8,从而正确显示中文字符。为了方便,你可以创建一个批处理文件 `.bat` 来自动执行此操作。
|
||||
|
||||
**start_game.bat**
|
||||
```batch
|
||||
@@ -98,58 +181,93 @@ chcp 65001
|
||||
.\gobang.exe
|
||||
```
|
||||
|
||||
## AI 设计实现
|
||||
## AI 设计实现
|
||||
|
||||
项目的AI主要基于以下技术实现:
|
||||
项目的AI主要基于以下技术实现:
|
||||
|
||||
### 核心算法
|
||||
### 核心算法
|
||||
|
||||
- **Minimax算法 (Minimax)**:作为博弈树的基础模型,为双人对弈的每一步选择最优解法。
|
||||
- **Alpha-Beta 剪枝 (Alpha-Beta Pruning)**:对Minimax算法的重大优化,通过剪掉那些不影响最终决策的树枝来提高AI的计算效率,使其能够在有限时间内达到更深的搜索深度。
|
||||
- **搜索深度**:AI的思考深度,默认为3层,可以根据难度等级进行调整。深度越大,AI预测能力越强,但计算耗时也越长。
|
||||
- **Minimax算法 (Minimax)**:作为博弈树的基础模型,为双人对弈的每一步选择最优解法。
|
||||
- **Alpha-Beta 剪枝 (Alpha-Beta Pruning)**:对Minimax算法的重大优化,通过剪掉那些不影响最终决策的树枝来提高AI的计算效率,使其能够在有限时间内达到更深的搜索深度。
|
||||
- **搜索深度**:AI的思考深度,默认为3层,可以根据难度等级进行调整。深度越大,AI预测能力越强,但计算耗时也越长。
|
||||
|
||||
### 棋局评估函数
|
||||
### 棋局评估函数
|
||||
|
||||
为了对棋局进行价值评估,AI使用了一套复杂的评分系统,其主要依据包括:
|
||||
为了对棋局进行价值评估,AI使用了一套复杂的评分系统,其主要依据包括:
|
||||
|
||||
- **棋型识别 (Pattern Recognition)**:能够识别并评估游戏中的关键棋型,如“连五”、“活四”、“冲四”、“活三”等,并为每种棋型赋予不同权重。
|
||||
- **位置权重 (Positional Value)**:棋盘上不同位置的战略价值不同,中心位置通常比边缘位置更有优势。评估函数会为棋盘上的落子点附加位置分。
|
||||
- **威胁检测 (Threat Detection)**:评估那些能够直接形成制胜局面的落子点,如“四三”或“活三”,并对这些点给予极高的评价值,以抓住制胜机会。
|
||||
- **双向连通性**:在评估一个点时,会同时判断其是否拥有足够的空间形成有效棋型,避免在被封锁的位置下出无效棋。
|
||||
- **棋型识别 (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` 的头文件。
|
||||
## 项目结构
|
||||
|
||||
## 许可证
|
||||
### ? 核心模块
|
||||
- **`main.c`** - 主程序入口,负责初始化与游戏模式选择
|
||||
- **`gobang.c/h`** - 核心游戏逻辑,包括棋盘操作、胜负判断
|
||||
- **`game_mode.c/h`** - 游戏模式实现 (人机对战、双人对战、复盘模式)
|
||||
- **`ai.c/h`** - AI算法实现 (Minimax + Alpha-Beta剪枝)
|
||||
|
||||
本项目采用 [MIT 许可证](https://opensource.org/licenses/MIT)授权。
|
||||
### ? 功能模块
|
||||
- **`ui.c/h`** - 用户界面模块,负责所有显示和交互
|
||||
- **`record.c/h`** - 游戏记录系统 (保存、加载、复盘、评分)
|
||||
- **`init_board.c/h`** - 棋盘初始化和游戏设置
|
||||
- **`config.c/h`** - 配置管理系统 (参数设置、文件读写)
|
||||
|
||||
这意味着你可以自由地使用、复制、修改、合并、出版、分发、再授权和/或销售本软件的副本,只需在所有副本或重要部分中包含原始的版权声明和本许可声明即可。
|
||||
### ? 配置和文档
|
||||
- **`gobang_config.ini`** - 游戏配置文件 (自动生成和保存)
|
||||
- **`records/`** - 对局记录目录 (CSV格式存储)
|
||||
- **`MD/README.md`** - 项目说明文档
|
||||
- **`MD/AI_function.md`** - AI算法详细说明
|
||||
|
||||
## 欢迎贡献
|
||||
### ? 开发工具
|
||||
- **`.vscode/`** - VS Code 配置文件
|
||||
- **`.idea/`** - IntelliJ IDEA 配置文件
|
||||
- **`.vs/`** - Visual Studio 配置文件
|
||||
|
||||
我们非常欢迎任何形式的反馈和贡献!如果你发现了Bug、有功能建议,或希望改进代码,请随时通过以下方式参与:
|
||||
## 许可证
|
||||
|
||||
- **提交 Issue**:对于问题反馈或新想法,请在 [GitHub Issues](https://github.com/LHY0125/Gobang-Game/issues) 页面提交详细描述。
|
||||
- **发起 Pull Request**:如果你对源码进行了改进,欢迎提交 Pull Request。请确保你的代码风格与项目保持一致,并提供清晰的改动说明。
|
||||
本项目采用 [MIT 许可证](https://opensource.org/licenses/MIT)授权。
|
||||
|
||||
你的每一次贡献都将使这个项目变得更好!
|
||||
这意味着你可以自由地使用、复制、修改、合并、出版、分发、再授权和/或销售本软件的副本,只需在所有副本或重要部分中包含原始的版权声明和本许可声明即可。
|
||||
|
||||
## 未来计划
|
||||
## 欢迎贡献
|
||||
|
||||
为了让这个项目变得更好,我们计划在未来实现以下功能:
|
||||
我们非常欢迎任何形式的反馈和贡献!如果你发现了Bug、有功能建议,或希望改进代码,请随时通过以下方式参与:
|
||||
|
||||
- [ ] **图形用户界面 (GUI)**:使用 `SDL2` 或 `Qt` 等库,将当前的终端界面替换为图形化界面,提升用户体验。
|
||||
- [ ] **网络对战功能**:增加一个在线对战模式,让玩家可以通过网络进行对战。
|
||||
- [ ] **棋谱库工具**:引入开局库,使AI在游戏开局阶段能够选择最优的落子方案。
|
||||
- [ ] **代码重构与优化**:持续优化现有代码,提高模块化程度和运行效率,并实现完全的跨平台兼容性。
|
||||
- **提交 Issue**:对于问题反馈或新想法,请在 [GitHub Issues](https://github.com/LHY0125/Gobang-Game/issues) 页面提交详细描述。
|
||||
- **发起 Pull Request**:如果你对源码进行了改进,欢迎提交 Pull Request。请确保你的代码风格与项目保持一致,并提供清晰的改动说明。
|
||||
|
||||
你的每一次贡献都将使这个项目变得更好!
|
||||
|
||||
## 未来计划
|
||||
|
||||
### ? 已完成功能
|
||||
- [x] **模块化架构设计** - 完成代码重构,实现清晰的模块分离
|
||||
- [x] **配置管理系统** - 实现INI配置文件的自动加载和保存
|
||||
- [x] **完整复盘功能** - 支持对局记录、回放和专业评分分析
|
||||
- [x] **用户界面优化** - 实现现代化的终端UI界面
|
||||
- [x] **智能评分系统** - 完成每步棋的评分和MVP评选功能
|
||||
- [x] **禁手规则支持** - 添加标准五子棋禁手规则选项
|
||||
|
||||
### ? 开发路线图
|
||||
|
||||
#### ? 用户体验提升
|
||||
- [ ] **图形用户界面 (GUI)**:使用 `SDL2` 或 `Qt` 开发现代化图形界面
|
||||
- [ ] **主题系统**:支持多种UI主题和棋盘样式
|
||||
- [ ] **音效系统**:添加落子音效和背景音乐
|
||||
|
||||
#### ? 网络功能
|
||||
- [ ] **在线对战模式**:实现网络多人对战功能
|
||||
- [ ] **排行榜系统**:在线玩家等级和排名系统
|
||||
- [ ] **观战功能**:支持观看其他玩家对局
|
||||
|
||||
#### ? AI增强
|
||||
- [ ] **开局库系统**:集成专业开局棋谱数据库
|
||||
- [ ] **神经网络AI**:基于深度学习的高级AI对手
|
||||
- [ ] **AI训练模式**:允许AI通过对局学习和改进
|
||||
|
||||
#### ? 技术优化
|
||||
- [ ] **跨平台支持**:完整支持Linux和macOS系统
|
||||
- [ ] **性能优化**:多线程搜索和内存优化
|
||||
- [ ] **数据库支持**:使用SQLite存储对局历史和统计
|
||||
Reference in New Issue
Block a user