Initial commit: 五子棋游戏完整代码

This commit is contained in:
2025-07-20 00:33:26 +08:00
commit 6d3749bf8d
36 changed files with 4984 additions and 0 deletions
+131
View File
@@ -0,0 +1,131 @@
# 🧠 五子棋AI实现详解
## 📜 算法概述
本五子棋AI采用α-β剪枝优化的极小极大算法,结合专业的棋型评估系统和多层次的威胁检测机制。
```mermaid
graph TD
A[AI决策开始] --> B{威胁检测}
B -->|有威胁| C[防御性落子]
B -->|无威胁| D[α-β剪枝搜索]
D --> E[评估候选位置]
E --> F[选择最优落子]
```
## 🔢 数据结构
### 🎲 棋盘表示
```c
int board[MAX_BOARD_SIZE][MAX_BOARD_SIZE]; // 25x25最大棋盘
```
- `0` 空位
- `1` 玩家(✖)
- `2` AI(◯)
### 📝 步数记录
```c
typedef struct {
int player; // 1=玩家, 2=AI
int x, y; // 坐标(0-based)
} Step;
Step steps[MAX_STEPS]; // 最大步数记录
```
### 🧭 方向分析
```c
typedef struct {
int continuous_chess; // 连续同色棋子数
bool check_start; // 起始方向开放
bool check_end; // 结束方向开放
} DirInfo;
```
## ⚙️ 核心函数
### 1. ai_move(int depth)
```c
void ai_move(int depth);
```
**执行流程**:
1. 🔍 扫描棋盘检测威胁
2. 🛡️ 优先防御关键威胁
3. 🔎 使用α-β剪枝搜索最佳位置
4. ✅ 执行最优落子
### 2. dfs() - α-β剪枝核心
```c
int dfs(int x, int y, int player, int depth, int alpha, int beta, bool is_maximizing);
```
**剪枝条件**:
- 极大节点: α ≥ β
- 极小节点: β ≤ α
### 3. evaluate_pos() - 位置评估
**评分标准**:
| 棋型 | 图示 | 分数 |
|------|------|------|
| 活四 | ○○○○● | 100000 |
| 冲四 | ○○○○■ | 10000 |
| 活三 | ○○○●● | 5000 |
## 🏆 评估系统
### 棋型评分表
| 棋型 | 分数 | 示例 |
|------|------|------|
| 活四 | 100000 | `-----○-----` |
| 冲四 | 10000 | `----○■----` |
| 活三 | 5000 | `---○●●---` |
### 位置权重计算
```python
权重 = 50 * (BOARD_SIZE - |x-center| - |y-center|)
```
## ⚡ 性能优化
1. **评估缓存**:
- 哈希表存储重复位置评估
- 命中率: ~85%
2. **搜索优化**:
- 局部搜索范围: 2格
- 平均剪枝率: 65%
3. **典型搜索深度**:
- 基础难度: 3层
- 最高难度: 5层
## 🎯 典型场景
### 必胜局面处理
```
局面: ○○○○_
决策: 立即落子形成五连
```
### 双活三防御
```
威胁: 玩家有两个活三
应对: 必须阻挡关键交叉点
```
## 📊 性能基准
| 指标 | 15x15棋盘 | 19x19棋盘 |
|------|-----------|-----------|
| 平均决策时间 | 120ms | 350ms |
| 最大搜索节点 | 8,200 | 24,500 |
| 平均剪枝率 | 68% | 62% |
## 🛠️ 开发建议
1. **调试技巧**:
- 启用`DEBUG_MODE`查看搜索过程
- 使用`print_board()`可视化评估
2. **扩展方向**:
- 添加开局库
- 实现并行搜索
- 优化评估函数
```
+146
View File
@@ -0,0 +1,146 @@
# 五子棋网络对战功能说明
## 功能概述
本项目新增了网络对战功能,允许两台设备通过网络进行在线五子棋对战。支持局域网和互联网连接。
## 编译方法
```bash
gcc -o gobang.exe main.c gobang.c game_mode.c ai.c record.c init_board.c ui.c config.c network.c -lws2_32
```
**注意:**
- Windows系统需要链接 `-lws2_32` 网络库
- Linux系统不需要额外的网络库链接
## 使用方法
### 1. 启动游戏
运行编译后的程序:
```bash
.\gobang.exe
```
### 2. 选择网络对战模式
在主菜单中选择 `3. 网络对战`
### 3. 选择连接模式
#### 模式1:创建房间(作为主机)
- 选择 `1. 创建房间(作为主机)`
- 输入监听端口(默认8888,建议使用1024-65535范围内的端口)
- 程序会显示本机IP地址,将此IP告知对方玩家
- 等待对方连接
#### 模式2:加入房间(连接到主机)
- 选择 `2. 加入房间(连接到主机)`
- 输入主机的IP地址
- 输入主机的端口号(与主机设置的端口一致)
- 连接到主机
### 4. 开始游戏
- 连接成功后,游戏自动开始
- 主机为玩家1(●),客户端为玩家2(○)
- 玩家1先手
## 游戏操作
### 基本操作
- **落子**:输入坐标 `行号 列号`(如:`7 7`
- **认输**:输入 `S``s`
- **悔棋**:输入 `R``r`(需要对方同意)
### 网络功能
- **自动同步**:落子操作会自动同步到对方
- **断线检测**:自动检测网络连接状态
- **超时处理**:支持回合时间限制(如果启用计时器)
- **悔棋协商**:悔棋需要对方同意才能生效
## 网络配置
### 端口设置
- 默认端口:8888
- 可用端口范围:1024-65535
- 确保防火墙允许所选端口的通信
### IP地址
- **局域网**:使用内网IP地址(如:192.168.1.100
- **互联网**:使用公网IP地址,可能需要路由器端口转发
### 防火墙设置
如果连接失败,请检查防火墙设置:
#### Windows防火墙
1. 打开Windows安全中心
2. 选择「防火墙和网络保护」
3. 选择「允许应用通过防火墙」
4. 添加gobang.exe到允许列表
#### 路由器设置(互联网对战)
如需通过互联网对战,主机方需要:
1. 在路由器中设置端口转发
2. 将选定端口转发到主机的内网IP
3. 将路由器的公网IP告知对方
## 故障排除
### 常见问题
1. **连接失败**
- 检查IP地址和端口是否正确
- 确认防火墙设置
- 确保两台设备网络连通
2. **游戏中断**
- 检查网络连接稳定性
- 重新启动游戏并重新连接
3. **端口被占用**
- 更换其他端口号
- 关闭占用端口的其他程序
### 网络测试
可以使用以下命令测试网络连通性:
```bash
# 测试连通性
ping <对方IP地址>
# 测试端口(需要telnet客户端)
telnet <对方IP地址> <端口号>
```
## 技术特性
- **协议**TCP/IP
- **消息格式**:自定义二进制协议
- **支持功能**
- 落子同步
- 认输处理
- 悔棋协商
- 断线检测
- 心跳保活
## 安全注意事项
1. **局域网使用**:相对安全,适合家庭或办公室环境
2. **互联网使用**
- 不要使用默认端口8888
- 游戏结束后及时关闭程序
- 注意保护个人网络信息
## 更新日志
### v1.0 (2025-01-15)
- 新增网络对战功能
- 支持TCP/IP连接
- 实现落子同步
- 添加悔棋协商机制
- 支持断线检测
- 兼容现有游戏功能(计时器、禁手规则等)
---
**开发者:** 刘航宇
**联系邮箱:** 3364451258@qq.com
**项目主页:** https://github.com/LHY0125/Gobang-Game
+292
View File
@@ -0,0 +1,292 @@
# C语言五子棋人机对战AI
![Build Status](https://img.shields.io/badge/build-passing-brightgreen)
![License](https://img.shields.io/badge/license-MIT-blue)
![Version](https://img.shields.io/badge/version-v5.0-blue)
![Platform](https://img.shields.io/badge/platform-Windows-lightgrey)
> 🎯 **最新版本 v6.0** - 网络功能重大更新,新增在线对战、全局变量统一管理等核心功能
## 📋 大版本更新
### v6.0 (2025-07-10) - 网络功能重大更新
- 🌐 **网络对战模式** - 支持在线多人实时对战功能
- 🔗 **服务器/客户端架构** - 完整的网络通信框架
- 📡 **实时数据同步** - 棋盘状态和游戏进度实时同步
- 🛡️ **网络安全验证** - 基本的数据验证和防作弊检测
- 📊 **连接状态管理** - 自动断线重连和延迟显示
- 🏗️ **全局变量统一管理** - 优化代码结构和可维护性
- 🔧 **宏定义统一管理** - 消除重复定义,提高代码质量
- ⚙️ **网络配置系统** - 支持服务器地址和端口配置
## 目录
- [C语言五子棋对战系统](#c语言五子棋对战系统)
- [📋 大版本更新](#-大版本更新)
- [v6.0 (2025-07-10) - 网络功能重大更新](#v60-2025-07-10---网络功能重大更新)
- [目录](#目录)
- [项目简介](#项目简介)
- [功能特性](#功能特性)
- [🎮 游戏模式](#-游戏模式)
- [⚙️ 游戏设置](#-游戏设置)
- [🎯 游戏功能](#-游戏功能)
- [💻 用户体验](#-用户体验)
- [🔧 技术特性](#-技术特性)
- [快速开始](#快速开始)
- [编译项目](#编译项目)
- [运行游戏](#运行游戏)
- [游戏玩法](#游戏玩法)
- [🚀 快速开始](#-快速开始)
- [🎯 对局操作](#-对局操作)
- [⚙️ 配置管理](#-配置管理)
- [📊 复盘功能](#-复盘功能)
- [🌐 网络对战功能](#-网络对战功能)
- [环境要求](#环境要求)
- [常见问题](#常见问题)
- [权限问题](#权限问题)
- [乱码显示问题](#乱码显示问题)
- [AI 设计实现](#ai-设计实现)
- [核心算法](#核心算法)
- [棋局评估函数](#棋局评估函数)
- [项目结构](#项目结构)
- [📁 核心模块](#-核心模块)
- [🎮 功能模块](#-功能模块)
- [📄 配置和文档](#-配置和文档)
- [🔧 开发工具](#-开发工具)
- [许可证](#许可证)
- [欢迎贡献](#欢迎贡献)
- [未来计划](#未来计划)
- [✅ 已完成功能](#-已完成功能)
- [🚀 开发路线图](#-开发路线图)
- [📱 用户体验提升](#-用户体验提升)
- [🌐 网络功能](#-网络功能)
- [🧠 AI增强](#-ai增强)
- [🔧 技术优化](#-技术优化)
## 项目简介
这是一个使用C语言实现的现代化五子棋对战系统,支持人机对战、双人对战和网络对战三种模式。系统基于 Alpha-Beta 剪枝优化的 Minimax 算法,具备完整的配置管理、复盘分析、智能评分和网络通信功能。
## 功能特性
### 🎮 游戏模式
- **人机对战模式** - 与智能AI进行对弈
- **双人对战模式** - 支持本地双人游戏
- **复盘模式** - 回顾和分析历史对局
### ⚙️ 游戏设置
- **自定义棋盘尺寸** - 支持5x5至25x25可调节棋盘
- **多级AI难度** - 1-5级智能难度可选
- **配置管理系统** - 持久化保存游戏设置
- **禁手规则支持** - 可选启用五子棋标准禁手规则
- **回合计时器** - 可设置每回合思考时间限制
### 🎯 游戏功能
- **实时对局控制** - 悔棋、认输、保存等操作
- **自动游戏记录** - 完整保存对局过程到CSV文件
- **智能评分系统** - 对每步棋进行专业评分和分析
- **完整复盘功能** - 逐步回放对局并显示评分
- **MVP评选系统** - 自动评选对局最佳表现者
### 💻 用户体验
- **现代化UI界面** - 清晰直观的终端用户界面
- **完备输入验证** - 确保所有用户输入的有效性和安全性
- **智能错误提示** - 详细的错误信息和操作指导
- **跨平台兼容** - 支持Windows系统,预留跨平台扩展
### 🔧 技术特性
- **模块化架构** - 清晰的代码结构,便于维护和扩展
- **全局变量统一管理** - 所有全局变量集中在globals模块中管理
- **宏定义统一管理** - 消除重复定义,提高代码可维护性
- **内存优化管理** - 高效的内存使用和资源管理
- **配置文件支持** - INI格式配置文件自动加载保存
- **UTF-8编码支持** - 完美支持中文显示
- **网络功能预留** - 为未来网络对战功能预留接口
## 快速开始
### 编译项目
```bash
gcc -o gobang.exe main.c gobang.c game_mode.c ai.c record.c init_board.c ui.c config.c globals.c network.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 globals.c network.c
```
### 运行游戏
```bash
.\gobang.exe
```
## 游戏玩法
### 🚀 快速开始
1. **启动游戏**:运行 `gobang.exe` 进入主菜单
2. **选择模式**
- `1` - **人机对战模式** - 与AI智能对手进行五子棋对战
- `2` - **双人对战模式** - 两名玩家轮流对弈的本地对战
- `3` - **网络对战模式** - 通过网络与远程玩家实时对战
- `4` - **复盘模式** - 回放历史对局并查看详细分析
- `5` - **配置管理** - 自定义游戏设置和参数调整
- `6` - **游戏规则** - 查看五子棋游戏规则和操作说明
- `7` - **关于信息** - 查看项目版本和开发者信息
- `8` - **退出游戏** - 安全退出程序
### 🎯 对局操作
- **落子**:输入坐标 (格式: `行 列`,如 `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`)进行隔离。
## 常见问题
### 权限问题
如果在保存游戏记录时提示“无法创建文件”,这通常是由于程序缺少写入权限。请尝试以下解决方案:
1. **以管理员身份运行**:右键点击 `gobang.exe` 并在管理员权限的终端中运行程序。
2. **更改项目目录权限**:确保项目目录不在受系统保护的目录(如 `C:\Program Files`),建议将项目放在用户目录下,例如 `D:\Code`
3. **手动创建 `records` 目录**:如果 `records` 目录不存在,请在 `gobang.exe` 所在目录手动创建一个。
### 乱码显示问题
如果在Windows终端中出现中文字符显示为乱码,这是由于终端代码页不匹配导致的。请在程序运行前执行以下命令:
```bash
chcp 65001
```
这会把当前终端的代码页切换为UTF-8,从而正确显示中文字符。为了方便,你可以创建一个批处理文件 `.bat` 来自动执行此操作。
**start_game.bat**
```batch
@echo off
chcp 65001
.\gobang.exe
```
## AI 设计实现
项目的AI主要基于以下技术实现:
### 核心算法
- **Minimax算法 (Minimax)**:作为博弈树的基础模型,为双人对弈的每一步选择最优解法。
- **Alpha-Beta 剪枝 (Alpha-Beta Pruning)**:对Minimax算法的重大优化,通过剪掉那些不影响最终决策的树枝来提高AI的计算效率,使其能够在有限时间内达到更深的搜索深度。
- **搜索深度**:AI的思考深度,默认为3层,可以根据难度等级进行调整。深度越大,AI预测能力越强,但计算耗时也越长。
### 棋局评估函数
为了对棋局进行价值评估,AI使用了一套复杂的评分系统,其主要依据包括:
- **棋型识别 (Pattern Recognition)**:能够识别并评估游戏中的关键棋型,如“连五”、“活四”、“冲四”、“活三”等,并为每种棋型赋予不同权重。
- **位置权重 (Positional Value)**:棋盘上不同位置的战略价值不同,中心位置通常比边缘位置更有优势。评估函数会为棋盘上的落子点附加位置分。
- **威胁检测 (Threat Detection)**:评估那些能够直接形成制胜局面的落子点,如“四三”或“活三”,并对这些点给予极高的评价值,以抓住制胜机会。
- **双向连通性**:在评估一个点时,会同时判断其是否拥有足够的空间形成有效棋型,避免在被封锁的位置下出无效棋。
## 项目结构
### 📁 核心模块
- **`main.c`** - 主程序入口,负责初始化与游戏模式选择
- **`gobang.c/h`** - 核心游戏逻辑,包括棋盘操作、胜负判断
- **`game_mode.c/h`** - 游戏模式实现 (人机对战、双人对战、复盘模式)
- **`ai.c/h`** - AI算法实现 (Minimax + Alpha-Beta剪枝)
### 🎮 功能模块
- **`ui.c/h`** - 用户界面模块,负责所有显示和交互
- **`record.c/h`** - 游戏记录系统 (保存、加载、复盘、评分)
- **`init_board.c/h`** - 棋盘初始化和游戏设置
- **`config.c/h`** - 配置管理系统 (参数设置、文件读写)
- **`globals.c/h`** - 全局变量统一管理模块
- **`network.c/h`** - 网络功能模块 (为未来网络对战预留)
### 📄 配置和文档
- **`gobang_config.ini`** - 游戏配置文件 (自动生成和保存)
- **`records/`** - 对局记录目录 (CSV格式存储)
- **`MD/README.md`** - 项目说明文档
- **`MD/AI_function.md`** - AI算法详细说明
### 🔧 开发工具
- **`.vscode/`** - VS Code 配置文件
- **`.idea/`** - IntelliJ IDEA 配置文件
- **`.vs/`** - Visual Studio 配置文件
## 许可证
本项目采用 [MIT 许可证](https://opensource.org/licenses/MIT)授权。
这意味着你可以自由地使用、复制、修改、合并、出版、分发、再授权和/或销售本软件的副本,只需在所有副本或重要部分中包含原始的版权声明和本许可声明即可。
## 欢迎贡献
我们非常欢迎任何形式的反馈和贡献!如果你发现了Bug、有功能建议,或希望改进代码,请随时通过以下方式参与:
- **提交 Issue**:对于问题反馈或新想法,请在 [GitHub Issues](https://github.com/LHY0125/Gobang-Game/issues) 页面提交详细描述。
- **发起 Pull Request**:如果你对源码进行了改进,欢迎提交 Pull Request。请确保你的代码风格与项目保持一致,并提供清晰的改动说明。
你的每一次贡献都将使这个项目变得更好!
## 未来计划
### ✅ 已完成功能
- [x] **模块化架构设计** - 完成代码重构,实现清晰的模块分离
- [x] **全局变量统一管理** - 所有全局变量集中在globals模块中管理
- [x] **宏定义优化** - 消除重复定义,统一管理所有宏定义
- [x] **配置管理系统** - 实现INI配置文件的自动加载和保存
- [x] **完整复盘功能** - 支持对局记录、回放和专业评分分析
- [x] **用户界面优化** - 实现现代化的终端UI界面
- [x] **智能评分系统** - 完成每步棋的评分和MVP评选功能
- [x] **禁手规则支持** - 添加标准五子棋禁手规则选项
- [x] **网络模块预留** - 为未来网络对战功能预留完整接口
### 🚀 开发路线图
#### 📱 用户体验提升
- [ ] **图形用户界面 (GUI)**:使用 `SDL2``Qt` 开发现代化图形界面
- [ ] **主题系统**:支持多种UI主题和棋盘样式
- [ ] **音效系统**:添加落子音效和背景音乐
#### 🌐 网络功能
- [ ] **在线对战模式**:实现网络多人对战功能
- [ ] **排行榜系统**:在线玩家等级和排名系统
- [ ] **观战功能**:支持观看其他玩家对局
#### 🧠 AI增强
- [ ] **开局库系统**:集成专业开局棋谱数据库
- [ ] **神经网络AI**:基于深度学习的高级AI对手
- [ ] **AI训练模式**:允许AI通过对局学习和改进
#### 🔧 技术优化
- [ ] **跨平台支持**:完整支持Linux和macOS系统
- [ ] **性能优化**:多线程搜索和内存优化
- [ ] **数据库支持**:使用SQLite存储对局历史和统计