Files
Gobang-Game/README.md
T
2025-06-30 22:27:15 +08:00

159 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ? 五子棋人机对战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语言实现的五子棋人机对战系统,采用α-β剪枝优化的极小极大算法,支持自定义棋盘大小、游戏复盘和实时评分。
## 功能特性
- 人机对战模式
- 可调棋盘尺寸(5x5到25x25)
- 智能AI决策(1-5级难度)
- 完整游戏复盘功能
- 实时对局评分系统
- 悔棋功能(可撤销上一步)
- 清晰的终端界面显示
- 健壮的输入验证(确保所有数字输入都在有效范围内)
- 可选的回合计时器
- 自动游戏记录保存
## 快速开始
![游戏演示](https://your-gif-url.com/demo.gif)
### 编译程序
```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在游戏初期能够选择更优的开局走法。
- [ ] **代码重构与优化**:持续优化现有代码,提高模块化程度和运行效率,并实现完全的跨平台兼容性。