mirror of
https://github.com/LHY0125/Gobang-Game.git
synced 2026-05-10 02:19:46 +08:00
159 lines
7.4 KiB
Markdown
159 lines
7.4 KiB
Markdown
# ? 五子棋人机对战AI
|
||
|
||

|
||

|
||

|
||
|
||
## 目录
|
||
- [? 五子棋人机对战AI](#-五子棋人机对战ai)
|
||
- [目录](#目录)
|
||
- [项目简介](#项目简介)
|
||
- [功能特性](#功能特性)
|
||
- [快速开始](#快速开始)
|
||
- [编译程序](#编译程序)
|
||
- [运行游戏](#运行游戏)
|
||
- [游戏玩法](#游戏玩法)
|
||
- [开发环境](#开发环境)
|
||
- [常见问题](#常见问题)
|
||
- [权限问题](#权限问题)
|
||
- [中文显示问题](#中文显示问题)
|
||
- [技术实现](#技术实现)
|
||
- [核心决策算法](#核心决策算法)
|
||
- [启发式评估函数](#启发式评估函数)
|
||
- [代码结构](#代码结构)
|
||
- [许可证](#许可证)
|
||
- [反馈与贡献](#反馈与贡献)
|
||
- [未来计划](#未来计划)
|
||
|
||
## 项目简介
|
||
基于C语言实现的五子棋人机对战系统,采用α-β剪枝优化的极小极大算法,支持自定义棋盘大小、游戏复盘和实时评分。
|
||
|
||
## 功能特性
|
||
- 人机对战模式
|
||
- 可调棋盘尺寸(5x5到25x25)
|
||
- 智能AI决策(1-5级难度)
|
||
- 完整游戏复盘功能
|
||
- 实时对局评分系统
|
||
- 悔棋功能(可撤销上一步)
|
||
- 清晰的终端界面显示
|
||
- 健壮的输入验证(确保所有数字输入都在有效范围内)
|
||
- 可选的回合计时器
|
||
- 自动游戏记录保存
|
||
|
||
## 快速开始
|
||
|
||

|
||
|
||
### 编译程序
|
||
```bash
|
||
gcc 五子棋.c gobang.c game_mode.c ai.c -o gobang.exe
|
||
```
|
||
|
||
### 运行游戏
|
||
```bash
|
||
.\gobang.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终端中遇到中文字符显示为乱码,是由于终端编码页不匹配导致的。请在运行程序前执行以下命令:
|
||
|
||
```bash
|
||
chcp 65001
|
||
```
|
||
|
||
该命令会将当前终端的编码页切换到UTF-8,从而正确显示中文字符。为方便起见,你可以创建一个启动脚本(`.bat` 文件)来自动执行此操作:
|
||
|
||
**start_game.bat**
|
||
```batch
|
||
@echo off
|
||
chcp 65001
|
||
.\output\五子棋.exe
|
||
```
|
||
|
||
## 技术实现
|
||
|
||
项目的AI主要基于以下技术实现:
|
||
|
||
### 核心决策算法
|
||
|
||
- **极小极大算法 (Minimax)**:作为决策的基础,模拟对弈双方的每一步,选择对我方最有利的走法。
|
||
- **α-β 剪枝 (Alpha-Beta Pruning)**:对极小极大算法的關鍵優化,通过剪掉不可能影响最终决策的搜索分支,大幅提升AI的计算效率,使其能够在有限时间内达到更深的搜索深度。
|
||
- **搜索深度**:AI的思考深度,默认为3层,并可根据难度设置进行调整。搜索深度越深,AI的棋力越强,但计算耗时也越长。
|
||
|
||
### 启发式评估函数
|
||
|
||
为了判断棋局的优劣,AI使用了一套复杂的启发式评估函数,主要包括:
|
||
|
||
- **棋型识别 (Pattern Recognition)**:能够识别并评估多种关键棋型,如“活四”、“冲四”、“活三”、“眠三”等,并为每种棋型赋予不同权重。
|
||
- **位置权重 (Positional Value)**:棋盘上不同位置的战略价值不同,中心位置通常比边缘位置更有优势。评估函数会为中心区域的落子给予额外加分。
|
||
- **威胁检测 (Threat Detection)**:优先搜索能够直接形成制胜威胁的棋步,如“连五”或“活四”,从而快速响应对手的进攻或抓住制胜机会。
|
||
- **双向延伸评估**:评估一个棋子在特定方向上是否有足够的空间形成连续棋型,避免在被封堵的位置浪费棋步。
|
||
|
||
## 代码结构
|
||
|
||
项目采用模块化设计,各个文件的职责如下:
|
||
|
||
- `五子棋.c` - 主程序入口,负责初始化和模式选择
|
||
- `gobang.h` - 定义核心数据结构(如棋盘、步骤记录等)和基础函数原型
|
||
- `gobang.c` - 实现基础的棋盘操作(如落子、显示棋盘等)和胜负判断
|
||
- `ai.h` - 定义 AI 相关的函数原型
|
||
- `ai.c` - 实现 AI 的核心算法,包括:
|
||
- `evaluate_pos`: 启发式评估函数,为每个可能的落子位置打分
|
||
- `dfs`: 带 α-β 剪枝的极小极大搜索算法
|
||
- `ai_move`: AI 决策的主函数,实现防守和进攻的两阶段决策
|
||
- `game_mode.c` - 实现各种游戏模式(如人机对战、复盘等)和用户交互
|
||
- `game_mode.h` - 定义游戏模式相关的函数原型
|
||
|
||
这种模块化的结构使得:
|
||
1. 代码职责划分更加清晰
|
||
2. AI 算法相关代码被独立出来,便于维护和优化
|
||
3. 游戏逻辑和 AI 逻辑解耦,有利于后续扩展(如添加新的 AI 算法或游戏模式)
|
||
|
||
## 许可证
|
||
|
||
该项目采用 [MIT 许可证](https://opensource.org/licenses/MIT)进行授权。
|
||
|
||
简单来说,你可以自由地使用、复制、修改、合并、出版、分发、再授权和/或销售本软件的副本,只需在你的项目中包含原始的版权和许可声明即可。
|
||
|
||
## 反馈与贡献
|
||
|
||
我们非常欢迎任何形式的反馈和贡献!如果你发现了Bug、有功能建议,或者希望改进代码,请随时通过以下方式参与:
|
||
|
||
- **提交 Issue**:如果你遇到问题或有新的想法,请在 [GitHub Issues](https://github.com/LHY0125/Gobang-Game/issues) 页面提交详细描述。
|
||
- **发起 Pull Request**:如果你对代码进行了改进,欢迎提交 Pull Request。请确保你的代码风格与项目保持一致,并附上清晰的改动说明。
|
||
|
||
你的每一次贡献都将使这个项目变得更好!
|
||
|
||
## 未来计划
|
||
|
||
为了让这个项目变得更完善,我们计划在未来实现以下功能:
|
||
|
||
- [ ] **图形用户界面 (GUI)**:使用 `SDL2` 或 `Qt` 等库,将当前的终端界面升级为图形化界面,提升用户体验。
|
||
- [ ] **网络对战功能**:增加一个在线对战模式,允许两名玩家通过网络进行对战。
|
||
- [ ] **棋谱库集成**:引入开局库,使AI在游戏初期能够选择更优的开局走法。
|
||
- [ ] **代码重构与优化**:持续优化现有代码,提高模块化程度和运行效率,并实现完全的跨平台兼容性。 |