mirror of
https://github.com/LHY0125/Gobang-Game.git
synced 2026-05-09 18:09:46 +08:00
build(installer): 精简安装包配置并移除NSIS脚本
- 删除 NSIS 安装脚本 (installer.nsi),统一使用 Inno Setup - 简化 Inno Setup 脚本,仅打包核心运行文件 (gobang_gui.exe, iup.dll) 和记录目录 - 移除源码、文档等开发文件,减小安装包体积 - 更新 README.md 以反映 v9.0 版本变更,专注于图形界面和网络功能
This commit is contained in:
@@ -1,344 +1,157 @@
|
|||||||
# C语言五子棋人机对战AI
|
# C语言五子棋系统
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
> 🎯 **最新版本 v8.3** - 引入IUP图形库,优化项目结构,支持Makefile编译
|
> 🎯 **最新版本 v9.0** - 全面集成 ENet 网络联机功能,重构 GUI 代码架构,纯图形化交互体验。
|
||||||
|
|
||||||
## 📋 大版本更新
|
## 📋 大版本更新
|
||||||
|
|
||||||
### v8.3 (2026-03-16) - 图形界面库迁移与架构优化
|
### v9.0 (2026-03-17) - 局域网联机与 GUI 架构重构
|
||||||
|
|
||||||
- 🔧 **IUP图形库** - 迁移至轻量级IUP库,无需复杂配置即可运行
|
- 🌐 **局域网对战** - 引入 ENet 库,支持稳定、无粘包的局域网多人对战(创建房间/加入房间)。
|
||||||
- 📂 **目录重构** - 采用标准的 `bin/` (可执行文件) 和 `obj/` (中间文件) 目录结构
|
- 🎨 **GUI 深度重构** - 拆分臃肿的 GUI 代码,模块化为 `gui_core`, `gui_game`, `gui_menu`, `gui_draw`, `gui_replay`,大幅提升可维护性。
|
||||||
- ⚡ **Makefile支持** - 提供完整的Makefile,支持一键编译、清理和运行
|
- 📦 **精简安装包** - 优化 Inno Setup 打包脚本,实现极简核心依赖打包。
|
||||||
- 🌐 **本地化资源** - 集成第三方库到 `libs/` 目录,开箱即用
|
- � **全面摒弃控制台** - 专注于基于 IUP 的原生图形化交互体验。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 目录
|
## 目录
|
||||||
|
|
||||||
- [C语言五子棋人机对战AI](#c语言五子棋人机对战ai)
|
- [C语言五子棋系统](#c语言五子棋系统)
|
||||||
- [📋 大版本更新](#-大版本更新)
|
- [📋 大版本更新](#-大版本更新)
|
||||||
- [v8.3 (2026-03-16) - 图形界面库迁移与架构优化](#v83-2026-03-16---图形界面库迁移与架构优化)
|
- [v9.0 (2026-03-17) - 局域网联机与 GUI 架构重构](#v90-2026-03-17---局域网联机与-gui-架构重构)
|
||||||
- [目录](#目录)
|
- [目录](#目录)
|
||||||
- [项目简介](#项目简介)
|
- [项目简介](#项目简介)
|
||||||
- [功能特性](#功能特性)
|
- [功能特性](#功能特性)
|
||||||
- [🎮 游戏模式](#-游戏模式)
|
- [🎮 游戏模式](#-游戏模式)
|
||||||
- [⚙️ 游戏设置](#️-游戏设置)
|
- [⚙️ 核心功能](#️-核心功能)
|
||||||
- [🎯 游戏功能](#-游戏功能)
|
|
||||||
- [💻 用户体验](#-用户体验)
|
|
||||||
- [🔧 技术特性](#-技术特性)
|
|
||||||
- [快速开始](#快速开始)
|
- [快速开始](#快速开始)
|
||||||
- [编译项目](#编译项目)
|
- [编译项目](#编译项目)
|
||||||
- [使用Makefile(推荐)](#使用makefile推荐)
|
- [打包安装程序](#打包安装程序)
|
||||||
- [运行游戏](#运行游戏)
|
|
||||||
- [控制台版本](#控制台版本)
|
|
||||||
- [GUI版本](#gui版本)
|
|
||||||
- [游戏玩法](#游戏玩法)
|
- [游戏玩法](#游戏玩法)
|
||||||
- [🚀 快速开始](#-快速开始)
|
- [技术架构](#技术架构)
|
||||||
- [🎯 对局操作](#-对局操作)
|
- [AI 算法](#ai-算法)
|
||||||
- [⚙️ 配置管理](#️-配置管理)
|
- [网络通信](#网络通信)
|
||||||
- [📊 复盘功能](#-复盘功能)
|
- [图形界面](#图形界面)
|
||||||
- [🌐 网络对战功能](#-网络对战功能)
|
|
||||||
- [环境要求](#环境要求)
|
|
||||||
- [常见问题](#常见问题)
|
|
||||||
- [权限问题](#权限问题)
|
|
||||||
- [乱码显示问题](#乱码显示问题)
|
|
||||||
- [AI 设计实现](#ai-设计实现)
|
|
||||||
- [核心算法](#核心算法)
|
|
||||||
- [棋局评估函数](#棋局评估函数)
|
|
||||||
- [项目结构](#项目结构)
|
- [项目结构](#项目结构)
|
||||||
- [📁 核心模块](#-核心模块)
|
|
||||||
- [🎮 功能模块](#-功能模块)
|
|
||||||
- [📄 配置和文档](#-配置和文档)
|
|
||||||
- [🔧 开发工具](#-开发工具)
|
|
||||||
- [许可证](#许可证)
|
- [许可证](#许可证)
|
||||||
- [欢迎贡献](#欢迎贡献)
|
|
||||||
- [未来计划](#未来计划)
|
---
|
||||||
- [✅ 已完成功能](#-已完成功能)
|
|
||||||
- [🚀 开发路线图](#-开发路线图)
|
|
||||||
- [📱 用户体验提升](#-用户体验提升)
|
|
||||||
- [🌐 网络功能](#-网络功能)
|
|
||||||
- [🧠 AI增强](#-ai增强)
|
|
||||||
|
|
||||||
## 项目简介
|
## 项目简介
|
||||||
|
|
||||||
这是一个使用C语言实现的现代化五子棋对战系统,支持人机对战、双人对战和网络对战三种模式。系统基于 Alpha-Beta 剪枝优化的 Minimax 算法,具备完整的配置管理、复盘分析、智能评分和网络通信功能。v8.3版本引入IUP图形化界面,提供简洁高效的可视化游戏体验。
|
这是一个使用纯 C 语言编写的现代化五子棋系统。采用轻量级的 IUP 库构建原生风格的图形化用户界面。系统不仅支持基于 Minimax 算法(带 Alpha-Beta 剪枝)的高级人机对战,还完美支持基于 ENet 的局域网多人实时联机对弈。
|
||||||
|
|
||||||
## 功能特性
|
## 功能特性
|
||||||
|
|
||||||
### 🎮 游戏模式
|
### 🎮 游戏模式
|
||||||
|
|
||||||
- **人机对战模式** - 与智能AI进行对弈
|
- **人机对战 (PvE)** - 挑战 1-5 级难度的智能 AI。
|
||||||
- **双人对战模式** - 支持本地双人游戏
|
- **局域网联机 (Network)** - 建立主机或作为客机加入,与朋友在局域网内实时对战。
|
||||||
- **复盘模式** - 回顾和分析历史对局
|
- **复盘模式 (Replay)** - 载入自动保存的对局记录(CSV),逐步回放并分析对局。
|
||||||
- **GUI图形化模式** - 基于IUP的图形界面
|
|
||||||
- **控制台模式** - 传统终端界面游戏模式
|
|
||||||
|
|
||||||
### ⚙️ 游戏设置
|
### ⚙️ 核心功能
|
||||||
|
|
||||||
- **自定义棋盘尺寸** - 支持5x5至25x25可调节棋盘
|
- **实时对局控制** - 支持悔棋(PvE)、断线重连检测、胜负判定。
|
||||||
- **多级AI难度** - 1-5级智能难度可选
|
- **自动游戏记录** - 每局游戏结束后自动保存至 `bin/records/` 目录。
|
||||||
- **配置管理系统** - 持久化保存游戏设置
|
- **模块化构建** - 提供高度配置化的 Makefile,一键源码编译包含 ENet 和主程序的二进制文件。
|
||||||
- **禁手规则支持** - 可选启用五子棋标准禁手规则
|
|
||||||
- **回合计时器** - 可设置每回合思考时间限制
|
|
||||||
|
|
||||||
### 🎯 游戏功能
|
---
|
||||||
|
|
||||||
- **实时对局控制** - 悔棋、认输、保存等操作
|
|
||||||
- **自动游戏记录** - 完整保存对局过程到CSV文件
|
|
||||||
- **智能评分系统** - 对每步棋进行专业评分和分析
|
|
||||||
- **完整复盘功能** - 逐步回放对局并显示评分
|
|
||||||
- **MVP评选系统** - 自动评选对局最佳表现者
|
|
||||||
|
|
||||||
### 💻 用户体验
|
|
||||||
|
|
||||||
- **双界面支持** - 同时提供图形化界面和终端界面
|
|
||||||
- **IUP图形化界面** - 原生控件风格,轻量高效
|
|
||||||
- **鼠标操作支持** - 直观的点击落子操作
|
|
||||||
- **完备输入验证** - 确保所有用户输入的有效性和安全性
|
|
||||||
- **智能错误提示** - 详细的错误信息和操作指导
|
|
||||||
- **跨平台兼容** - 支持Windows系统,代码结构预留跨平台扩展
|
|
||||||
|
|
||||||
### 🔧 技术特性
|
|
||||||
|
|
||||||
- **模块化架构** - 清晰的代码结构,便于维护和扩展
|
|
||||||
- **IUP图形库集成** - 简单易用的跨平台图形库
|
|
||||||
- **Makefile构建系统** - 标准化的编译流程
|
|
||||||
- **目录结构规范** - 代码(src)、对象(obj)、执行文件(bin)分离
|
|
||||||
- **结构体定义集中化** - 所有数据结构统一在type.h中管理
|
|
||||||
- **配置参数统一管理** - 所有配置宏定义集中在config.h中
|
|
||||||
- **全局变量统一管理** - 所有全局变量集中在globals模块中管理
|
|
||||||
- **内存优化管理** - 高效的内存使用和资源管理
|
|
||||||
- **配置文件支持** - INI格式配置文件自动加载保存
|
|
||||||
- **UTF-8编码支持** - 完美支持中文显示
|
|
||||||
- **事件驱动架构** - 高效的图形界面事件处理机制
|
|
||||||
- **网络对战功能** - 完整的在线多人对战系统
|
|
||||||
|
|
||||||
## 快速开始
|
## 快速开始
|
||||||
|
|
||||||
### 编译项目
|
### 编译项目
|
||||||
|
|
||||||
#### 使用Makefile(推荐)
|
项目使用 Makefile 进行构建,依赖 MinGW-w64 工具链。
|
||||||
|
在项目根目录下打开 PowerShell 或 CMD,运行:
|
||||||
在项目根目录下打开终端(PowerShell 或 CMD),运行以下命令:
|
|
||||||
|
|
||||||
**编译所有版本:**
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mingw32-make all
|
# 清理旧文件
|
||||||
```
|
mingw32-make clean
|
||||||
|
|
||||||
**仅编译控制台版本:**
|
# 编译生成 GUI 可执行文件
|
||||||
|
|
||||||
```bash
|
|
||||||
mingw32-make console
|
|
||||||
```
|
|
||||||
|
|
||||||
**仅编译GUI版本:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mingw32-make gui
|
mingw32-make gui
|
||||||
```
|
```
|
||||||
|
|
||||||
**清理构建文件:**
|
生成的可执行文件 `gobang_gui.exe` 和所需的动态链接库 `iup.dll` 会输出到 `bin/` 目录下。
|
||||||
|
|
||||||
```bash
|
**运行游戏:**
|
||||||
mingw32-make clean
|
|
||||||
```
|
|
||||||
|
|
||||||
**注意:**
|
|
||||||
|
|
||||||
- 需要安装 MinGW-w64 并将 `bin` 目录添加到 PATH 环境变量。
|
|
||||||
- 编译生成的可执行文件位于 `bin/` 目录下。
|
|
||||||
|
|
||||||
### 运行游戏
|
|
||||||
|
|
||||||
#### 控制台版本
|
|
||||||
|
|
||||||
```bash
|
|
||||||
.\bin\gobang_console.exe
|
|
||||||
```
|
|
||||||
|
|
||||||
#### GUI版本
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
.\bin\gobang_gui.exe
|
.\bin\gobang_gui.exe
|
||||||
```
|
```
|
||||||
|
|
||||||
或者使用Makefile指令直接运行:
|
### 打包安装程序
|
||||||
|
|
||||||
```bash
|
如果你需要将游戏打包成 Windows 安装程序,项目提供了 Inno Setup 脚本。
|
||||||
mingw32-make run-gui
|
确保你已安装 [Inno Setup 6](https://jrsoftware.org/isinfo.php),然后运行:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
& "D:\Program Files (x86)\Inno Setup 6\iscc.exe" installer\installer.iss
|
||||||
```
|
```
|
||||||
|
|
||||||
|
生成的安装包 `Gobang_Inno_Setup.exe` 将存放在 `installer\dist\` 目录下。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 游戏玩法
|
## 游戏玩法
|
||||||
|
|
||||||
### 🚀 快速开始
|
1. 运行 `gobang_gui.exe` 启动游戏主菜单。
|
||||||
|
2. 选择你要进行的游戏模式:
|
||||||
|
- **人机对战**:直接进入游戏,玩家执黑先行,点击棋盘空白处落子。
|
||||||
|
- **局域网联机**:
|
||||||
|
- **作为房主**:点击“局域网联机” -> “创建房间”,等待好友加入(默认端口8888)。
|
||||||
|
- **作为玩家**:点击“局域网联机” -> 输入房主的 IP 地址和端口 -> “加入房间”。
|
||||||
|
- **复盘模式**:选择历史对局记录,使用“上一步/下一步”按钮进行回放。
|
||||||
|
|
||||||
1. **启动游戏**:运行 `gobang_console.exe` 进入主菜单
|
---
|
||||||
2. **选择模式**:
|
|
||||||
- `1` - **人机对战模式** - 与AI智能对手进行五子棋对战
|
|
||||||
- `2` - **双人对战模式** - 两名玩家轮流对弈的本地对战
|
|
||||||
- `3` - **网络对战模式** - 通过网络与远程玩家实时对战
|
|
||||||
- `4` - **复盘模式** - 回放历史对局并查看详细分析
|
|
||||||
- `5` - **配置管理** - 自定义游戏设置和参数调整
|
|
||||||
- `6` - **游戏规则** - 查看五子棋游戏规则和操作说明
|
|
||||||
- `7` - **关于游戏** - 查看项目版本和开发者信息
|
|
||||||
- `8` - **图形化界面** - 启动GUI模式
|
|
||||||
- `0` - **退出游戏** - 安全退出程序
|
|
||||||
|
|
||||||
### 🎯 对局操作
|
## 技术架构
|
||||||
|
|
||||||
- **落子**:输入坐标 (格式: `行 列`,如 `8 8`)
|
### AI 算法
|
||||||
- **悔棋**:输入 `R` 或 `r` 撤销上一步
|
|
||||||
- **认输**:输入 `S` 或 `s` 主动认输
|
|
||||||
- **保存**:输入 `SAVE` 保存当前对局
|
|
||||||
- **退出**:输入 `EXIT` 退出当前对局
|
|
||||||
|
|
||||||
### ⚙️ 配置管理
|
- **Minimax 博弈树**:遍历所有可能的落子情况。
|
||||||
|
- **Alpha-Beta 剪枝**:极大提升搜索效率,AI 默认思考深度为 3 层。
|
||||||
|
- **启发式评估函数**:基于连五、活四、冲四、活三等经典五子棋棋型进行棋局评分。
|
||||||
|
|
||||||
- **棋盘大小**:5x5 至 25x25 可调 (默认15x15)
|
### 网络通信
|
||||||
- **AI难度**:1-5级智能难度 (默认3级)
|
|
||||||
- **禁手规则**:可选启用标准五子棋禁手
|
|
||||||
- **计时器**:可设置每回合时间限制
|
|
||||||
- **配置保存**:所有设置自动保存到 `gobang_config.ini`
|
|
||||||
|
|
||||||
### 📊 复盘功能
|
- **底层库**:[ENet](http://enet.bespin.org/) (基于 UDP 的可靠网络传输协议)。
|
||||||
|
- **机制**:游戏采用非阻塞轮询机制处理网络事件,完美解决传统 TCP 粘包问题,确保落子坐标、断开连接等指令 100% 可靠送达。
|
||||||
|
|
||||||
- **自动记录**:每局游戏自动保存到 `records/` 目录
|
### 图形界面
|
||||||
- **逐步回放**:按步骤重现整局对弈过程
|
|
||||||
- **评分分析**:显示每步棋的专业评分
|
|
||||||
- **MVP评选**:自动评选本局最佳表现者
|
|
||||||
- **胜负统计**:完整的对局结果记录
|
|
||||||
|
|
||||||
### 🌐 网络对战功能
|
- **底层库**:[IUP](https://www.tecgraf.puc-rio.br/iup/) (轻量级、跨平台的 C 语言原生 GUI 库)。
|
||||||
|
- **机制**:事件驱动架构,通过回调函数响应用户的鼠标点击、按钮触发和窗口切换。
|
||||||
|
|
||||||
- **服务器模式**:创建游戏房间等待其他玩家加入
|
---
|
||||||
- **客户端模式**:连接到指定服务器进行对战
|
|
||||||
- **实时同步**:棋盘状态和游戏进度实时同步
|
|
||||||
- **连接管理**:自动处理网络连接和断线重连
|
|
||||||
- **延迟显示**:实时显示网络延迟状态
|
|
||||||
- **安全验证**:基本的数据验证和防作弊检测
|
|
||||||
|
|
||||||
## 环境要求
|
|
||||||
|
|
||||||
- 操作系统: Windows (当前版本使用了Windows特有的 `_kbhit()` 和 `Sleep()` 函数,因此暂不跨平台)
|
|
||||||
- 编译器: GCC (MinGW-w64)
|
|
||||||
- 构建工具: GNU Make (mingw32-make)
|
|
||||||
- 终端: 支持UTF-8编码的终端
|
|
||||||
|
|
||||||
## 常见问题
|
|
||||||
|
|
||||||
### 权限问题
|
|
||||||
|
|
||||||
如果在保存游戏记录时提示“无法创建文件”,这通常是由于程序缺少写入权限。请尝试以下解决方案:
|
|
||||||
|
|
||||||
1. **以管理员身份运行**:右键点击程序并在管理员权限的终端中运行。
|
|
||||||
2. **更改项目目录权限**:确保项目目录不在受系统保护的目录(如 `C:\Program Files`)。
|
|
||||||
3. **手动创建 `records` 目录**:如果 `records` 目录不存在,请手动创建一个。
|
|
||||||
|
|
||||||
### 乱码显示问题
|
|
||||||
|
|
||||||
如果在Windows终端中出现中文字符显示为乱码,请确保终端代码页为UTF-8 (65001)。程序会自动尝试设置,但如果失败,请手动执行:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
chcp 65001
|
|
||||||
```
|
|
||||||
|
|
||||||
## AI 设计实现
|
|
||||||
|
|
||||||
项目的AI主要基于以下技术实现:
|
|
||||||
|
|
||||||
### 核心算法
|
|
||||||
|
|
||||||
- **Minimax算法 (Minimax)**:作为博弈树的基础模型,为双人对弈的每一步选择最优解法。
|
|
||||||
- **Alpha-Beta 剪枝 (Alpha-Beta Pruning)**:对Minimax算法的重大优化,通过剪掉那些不影响最终决策的树枝来提高AI的计算效率,使其能够在有限时间内达到更深的搜索深度。
|
|
||||||
- **搜索深度**:AI的思考深度,默认为3层,可以根据难度等级进行调整。深度越大,AI预测能力越强,但计算耗时也越长。
|
|
||||||
|
|
||||||
### 棋局评估函数
|
|
||||||
|
|
||||||
为了对棋局进行价值评估,AI使用了一套复杂的评分系统,其主要依据包括:
|
|
||||||
|
|
||||||
- **棋型识别 (Pattern Recognition)**:能够识别并评估游戏中的关键棋型,如“连五”、“活四”、“冲四”、“活三”等,并为每种棋型赋予不同权重。
|
|
||||||
- **位置权重 (Positional Value)**:棋盘上不同位置的战略价值不同,中心位置通常比边缘位置更有优势。评估函数会为棋盘上的落子点附加位置分。
|
|
||||||
- **威胁检测 (Threat Detection)**:评估那些能够直接形成制胜局面的落子点,如“四三”或“活三”,并对这些点给予极高的评价值,以抓住制胜机会。
|
|
||||||
- **双向连通性**:在评估一个点时,会同时判断其是否拥有足够的空间形成有效棋型,避免在被封锁的位置下出无效棋。
|
|
||||||
|
|
||||||
## 项目结构
|
## 项目结构
|
||||||
|
|
||||||
### 📁 核心模块
|
```text
|
||||||
|
Gobang/
|
||||||
- **`src/main.c`** - 主程序入口,负责初始化与游戏模式选择
|
├── bin/ # 编译输出目录 (包含 exe, dll 和 records)
|
||||||
- **`src/gobang.c`** - 核心游戏逻辑,包括棋盘操作、胜负判断
|
├── include/ # 头文件目录
|
||||||
- **`src/game_mode.c`** - 游戏模式实现 (人机对战、双人对战、复盘模式)
|
├── libs/ # 第三方库源码及预编译库 (ENet, IUP)
|
||||||
- **`src/ai.c`** - AI算法实现 (Minimax + Alpha-Beta剪枝)
|
├── src/ # 核心源代码
|
||||||
- **`src/gui.c`** - IUP图形化界面模块 (窗口管理、事件处理、图形渲染)
|
│ ├── main.c # 程序入口
|
||||||
|
│ ├── gobang.c # 五子棋核心规则与逻辑
|
||||||
### 🎮 功能模块
|
│ ├── ai.c # 智能 AI 算法
|
||||||
|
│ ├── network.c # ENet 网络通信封装
|
||||||
- **`src/ui.c`** - 用户界面模块,负责所有显示和交互
|
│ ├── record.c # 棋谱记录与解析
|
||||||
- **`src/record.c`** - 游戏记录系统 (保存、加载、复盘、评分)
|
│ ├── gui_core.c # GUI 初始化与核心循环
|
||||||
- **`src/init_board.c`** - 棋盘初始化和游戏设置
|
│ ├── gui_game.c # 游戏主界面与交互逻辑
|
||||||
- **`src/config.c`** - 配置管理系统 (参数设置、文件读写)
|
│ ├── gui_menu.c # 游戏主菜单界面
|
||||||
- **`src/globals.c`** - 全局变量统一管理模块
|
│ ├── gui_draw.c # 棋盘与棋子渲染
|
||||||
- **`src/network.c`** - 网络功能模块 (为未来网络对战预留)
|
│ └── gui_replay.c # 复盘模式交互逻辑
|
||||||
|
├── installer/ # Inno Setup 安装包打包脚本及输出
|
||||||
### 📄 配置和文档
|
├── Makefile # 自动化构建脚本
|
||||||
|
└── README.md # 项目说明文档
|
||||||
- **`Makefile`** - 项目构建脚本
|
```
|
||||||
- **`gobang_config.ini`** - 游戏配置文件
|
|
||||||
- **`records/`** - 对局记录目录
|
|
||||||
- **`include/`** - 头文件目录
|
|
||||||
- **`libs/`** - 第三方库目录 (包含IUP)
|
|
||||||
- **`bin/`** - 编译输出目录 (可执行文件)
|
|
||||||
- **`obj/`** - 中间文件目录
|
|
||||||
- **`installer/`** - 安装包制作目录
|
|
||||||
- **`MD/`** - 项目详细文档
|
|
||||||
|
|
||||||
### 🔧 开发工具
|
|
||||||
|
|
||||||
- **`.vscode/`** - VS Code 配置文件
|
|
||||||
- **`.idea/`** - IntelliJ IDEA 配置文件
|
|
||||||
|
|
||||||
## 许可证
|
## 许可证
|
||||||
|
|
||||||
本项目采用 [MIT 许可证](https://opensource.org/licenses/MIT)授权。
|
本项目采用 [MIT 许可证](https://opensource.org/licenses/MIT)授权。欢迎自由修改和分发!
|
||||||
|
|
||||||
## 欢迎贡献
|
|
||||||
|
|
||||||
我们非常欢迎任何形式的反馈和贡献!如果你发现了Bug、有功能建议,或希望改进代码,请随时通过以下方式参与:
|
|
||||||
|
|
||||||
- **提交 Issue**:对于问题反馈或新想法,请在 [GitHub Issues](https://github.com/LHY0125/Gobang-Game/issues) 页面提交详细描述。
|
|
||||||
- **发起 Pull Request**:如果你对源码进行了改进,欢迎提交 Pull Request。请确保你的代码风格与项目保持一致,并提供清晰的改动说明。
|
|
||||||
|
|
||||||
## 未来计划
|
|
||||||
|
|
||||||
### ✅ 已完成功能
|
|
||||||
|
|
||||||
- [x] **IUP图形化界面** - 集成轻量级IUP库,实现跨平台图形界面
|
|
||||||
- [x] **构建系统优化** - 引入Makefile,规范化编译流程
|
|
||||||
- [x] **目录结构重构** - 分离源码、对象文件和可执行文件
|
|
||||||
- [x] **双版本架构** - 实现控制台版本和GUI版本并行支持
|
|
||||||
- [x] **安装包制作** - 提供Inno Setup和NSIS两种专业安装包方案
|
|
||||||
- [x] **模块化架构设计** - 完成代码重构,实现清晰的模块分离
|
|
||||||
- [x] **完整复盘功能** - 支持对局记录、回放和专业评分分析
|
|
||||||
|
|
||||||
### 🚀 开发路线图
|
|
||||||
|
|
||||||
#### 📱 用户体验提升
|
|
||||||
|
|
||||||
- [ ] **主题系统**:支持多种UI主题和棋盘样式
|
|
||||||
- [ ] **音效系统**:添加落子音效和背景音乐
|
|
||||||
- [ ] **多语言支持**:支持中英文界面切换
|
|
||||||
|
|
||||||
#### 🌐 网络功能
|
|
||||||
|
|
||||||
- [ ] **在线对战模式**:实现网络多人对战功能
|
|
||||||
- [ ] **排行榜系统**:在线玩家等级和排名系统
|
|
||||||
|
|
||||||
#### 🧠 AI增强
|
|
||||||
|
|
||||||
- [ ] **开局库系统**:集成专业开局棋谱数据库
|
|
||||||
- [ ] **神经网络AI**:基于深度学习的高级AI对手
|
|
||||||
|
|||||||
+10
-23
@@ -8,7 +8,6 @@ AppUpdatesURL=https://github.com/LHY0125/gobang.git
|
|||||||
DefaultDirName={autopf}\Gobang
|
DefaultDirName={autopf}\Gobang
|
||||||
DefaultGroupName=五子棋游戏
|
DefaultGroupName=五子棋游戏
|
||||||
AllowNoIcons=yes
|
AllowNoIcons=yes
|
||||||
LicenseFile=..\README.md
|
|
||||||
OutputDir=dist
|
OutputDir=dist
|
||||||
OutputBaseFilename=Gobang_Inno_Setup
|
OutputBaseFilename=Gobang_Inno_Setup
|
||||||
SetupIconFile=
|
SetupIconFile=
|
||||||
@@ -24,33 +23,21 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
|
|||||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
Source: "..\gobang_console.exe"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "..\bin\gobang_gui.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
Source: "..\gobang_gui.exe"; DestDir: "{app}"; Flags: ignoreversion
|
Source: "..\bin\iup.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
Source: "..\SDL3.dll"; DestDir: "{app}"; Flags: ignoreversion
|
; 允许文件夹为空时不报错
|
||||||
Source: "..\include\*"; DestDir: "{app}\include"; Flags: ignoreversion recursesubdirs createallsubdirs
|
Source: "..\bin\records\*"; DestDir: "{app}\records"; Flags: ignoreversion recursesubdirs createallsubdirs skipifsourcedoesntexist
|
||||||
Source: "..\src\*"; DestDir: "{app}\src"; Flags: ignoreversion recursesubdirs createallsubdirs
|
|
||||||
Source: "..\MD\*"; DestDir: "{app}\MD"; Flags: ignoreversion recursesubdirs createallsubdirs
|
|
||||||
Source: "..\TXT\*"; DestDir: "{app}\TXT"; Flags: ignoreversion recursesubdirs createallsubdirs
|
|
||||||
Source: "..\records\*"; DestDir: "{app}\records"; Flags: ignoreversion recursesubdirs createallsubdirs
|
|
||||||
Source: "..\installer\*"; DestDir: "{app}\installer"; Flags: ignoreversion recursesubdirs createallsubdirs
|
|
||||||
Source: "..\compile.bat"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "..\gobang_config.ini"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "..\Makefile"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "..\README.md"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Name: "{group}\五子棋游戏(控制台版)"; Filename: "{app}\gobang_console.exe"
|
Name: "{group}\五子棋游戏(图形界面版)"; Filename: "{app}\gobang_gui.exe"; WorkingDir: "{app}"
|
||||||
Name: "{group}\五子棋游戏(图形界面版)"; Filename: "{app}\gobang_gui.exe"
|
|
||||||
Name: "{group}\{cm:UninstallProgram,五子棋游戏}"; Filename: "{uninstallexe}"
|
Name: "{group}\{cm:UninstallProgram,五子棋游戏}"; Filename: "{uninstallexe}"
|
||||||
Name: "{autodesktop}\五子棋游戏"; Filename: "{app}\gobang_gui.exe"; Tasks: desktopicon
|
Name: "{autodesktop}\五子棋游戏"; Filename: "{app}\gobang_gui.exe"; WorkingDir: "{app}"; Tasks: desktopicon
|
||||||
|
|
||||||
[Run]
|
[Run]
|
||||||
Filename: "{app}\gobang_gui.exe"; Description: "{cm:LaunchProgram,五子棋游戏}"; Flags: nowait postinstall skipifsilent
|
Filename: "{app}\gobang_gui.exe"; WorkingDir: "{app}"; Description: "{cm:LaunchProgram,五子棋游戏}"; Flags: nowait postinstall skipifsilent
|
||||||
|
|
||||||
[UninstallDelete]
|
[UninstallDelete]
|
||||||
Type: filesandordirs; Name: "{app}\records"
|
Type: filesandordirs; Name: "{app}\records"
|
||||||
Type: filesandordirs; Name: "{app}\include"
|
Type: files; Name: "{app}\gobang_gui.exe"
|
||||||
Type: filesandordirs; Name: "{app}\src"
|
Type: files; Name: "{app}\iup.dll"
|
||||||
Type: filesandordirs; Name: "{app}\MD"
|
Type: dirifempty; Name: "{app}"
|
||||||
Type: filesandordirs; Name: "{app}\TXT"
|
|
||||||
Type: filesandordirs; Name: "{app}\installer"
|
|
||||||
|
|||||||
@@ -1,162 +0,0 @@
|
|||||||
; NSIS Install Script - Gobang Game
|
|
||||||
; Version: v8.3
|
|
||||||
; Author: LHY
|
|
||||||
|
|
||||||
!define PRODUCT_NAME "Gobang Game"
|
|
||||||
!define PRODUCT_VERSION "8.3"
|
|
||||||
!define PRODUCT_PUBLISHER "LHY"
|
|
||||||
!define PRODUCT_WEB_SITE "https://github.com/LHY0125/gobang.git"
|
|
||||||
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\gobang_gui.exe"
|
|
||||||
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
|
||||||
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
|
|
||||||
|
|
||||||
; Include Modern UI
|
|
||||||
!include "MUI2.nsh"
|
|
||||||
|
|
||||||
; MUI Settings
|
|
||||||
!define MUI_ABORTWARNING
|
|
||||||
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
|
|
||||||
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
|
|
||||||
|
|
||||||
; Welcome page
|
|
||||||
!insertmacro MUI_PAGE_WELCOME
|
|
||||||
; License page
|
|
||||||
!insertmacro MUI_PAGE_LICENSE "..\README.md"
|
|
||||||
; Components page
|
|
||||||
!insertmacro MUI_PAGE_COMPONENTS
|
|
||||||
; Directory page
|
|
||||||
!insertmacro MUI_PAGE_DIRECTORY
|
|
||||||
; Install page
|
|
||||||
!insertmacro MUI_PAGE_INSTFILES
|
|
||||||
; Finish page
|
|
||||||
!define MUI_FINISHPAGE_RUN "$INSTDIR\gobang_gui.exe"
|
|
||||||
!insertmacro MUI_PAGE_FINISH
|
|
||||||
|
|
||||||
; Uninstall page
|
|
||||||
!insertmacro MUI_UNPAGE_INSTFILES
|
|
||||||
|
|
||||||
; Language files
|
|
||||||
!insertmacro MUI_LANGUAGE "SimpChinese"
|
|
||||||
|
|
||||||
; Installer attributes
|
|
||||||
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
|
||||||
OutFile "dist\Gobang_NSIS_Setup.exe"
|
|
||||||
InstallDir "$PROGRAMFILES\Gobang"
|
|
||||||
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
|
|
||||||
ShowInstDetails show
|
|
||||||
ShowUnInstDetails show
|
|
||||||
|
|
||||||
; Version information
|
|
||||||
VIProductVersion "1.0.0.0"
|
|
||||||
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "ProductName" "${PRODUCT_NAME}"
|
|
||||||
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "Comments" "Gobang Game - Classic five-in-a-row strategy game with AI and network support"
|
|
||||||
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "CompanyName" "${PRODUCT_PUBLISHER}"
|
|
||||||
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "LegalTrademarks" "MIT License"
|
|
||||||
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "LegalCopyright" "© 2025 ${PRODUCT_PUBLISHER}"
|
|
||||||
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "FileDescription" "${PRODUCT_NAME} Setup"
|
|
||||||
VIAddVersionKey /LANG=${LANG_SIMPCHINESE} "FileVersion" "${PRODUCT_VERSION}"
|
|
||||||
|
|
||||||
Section "Main Program" SEC01
|
|
||||||
SectionIn RO
|
|
||||||
SetOutPath "$INSTDIR"
|
|
||||||
SetOverwrite ifnewer
|
|
||||||
File "..\gobang_console.exe"
|
|
||||||
File "..\gobang_gui.exe"
|
|
||||||
File "..\SDL3.dll"
|
|
||||||
File "..\compile.bat"
|
|
||||||
File "..\gobang_config.ini"
|
|
||||||
File "..\Makefile"
|
|
||||||
File "..\README.md"
|
|
||||||
CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
|
|
||||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Gobang Console.lnk" "$INSTDIR\gobang_console.exe"
|
|
||||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Gobang GUI.lnk" "$INSTDIR\gobang_gui.exe"
|
|
||||||
CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\gobang_gui.exe"
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
Section "Source Code" SEC02
|
|
||||||
SetOutPath "$INSTDIR\include"
|
|
||||||
File /r "..\include\*.*"
|
|
||||||
SetOutPath "$INSTDIR\src"
|
|
||||||
File /r "..\src\*.*"
|
|
||||||
SetOutPath "$INSTDIR\installer"
|
|
||||||
File /r "..\installer\*.*"
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
Section "Game Records" SEC03
|
|
||||||
SetOutPath "$INSTDIR\records"
|
|
||||||
File /r "..\records\*.*"
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
Section "Documentation" SEC04
|
|
||||||
SetOutPath "$INSTDIR\MD"
|
|
||||||
File /r "..\MD\*.*"
|
|
||||||
SetOutPath "$INSTDIR\TXT"
|
|
||||||
File /r "..\TXT\*.*"
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
Section -AdditionalIcons
|
|
||||||
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
|
|
||||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
|
|
||||||
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe"
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
Section -Post
|
|
||||||
WriteUninstaller "$INSTDIR\uninst.exe"
|
|
||||||
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\gobang_gui.exe"
|
|
||||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
|
|
||||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
|
|
||||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\gobang_gui.exe"
|
|
||||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
|
|
||||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
|
|
||||||
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
; Component descriptions
|
|
||||||
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Install main program files. This is a required component."
|
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "Install source code files, including headers and implementation files."
|
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "Install game records and save files."
|
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "Install project documentation, including user manual and technical documents."
|
|
||||||
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
|
||||||
|
|
||||||
Function un.onUninstSuccess
|
|
||||||
HideWindow
|
|
||||||
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) has been successfully removed from your computer."
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Function un.onInit
|
|
||||||
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2
|
|
||||||
Abort
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Section Uninstall
|
|
||||||
Delete "$INSTDIR\${PRODUCT_NAME}.url"
|
|
||||||
Delete "$INSTDIR\uninst.exe"
|
|
||||||
Delete "$INSTDIR\gobang_console.exe"
|
|
||||||
Delete "$INSTDIR\gobang_gui.exe"
|
|
||||||
Delete "$INSTDIR\SDL3.dll"
|
|
||||||
Delete "$INSTDIR\compile.bat"
|
|
||||||
Delete "$INSTDIR\gobang_config.ini"
|
|
||||||
Delete "$INSTDIR\Makefile"
|
|
||||||
Delete "$INSTDIR\README.md"
|
|
||||||
|
|
||||||
RMDir /r "$INSTDIR\include"
|
|
||||||
RMDir /r "$INSTDIR\src"
|
|
||||||
RMDir /r "$INSTDIR\installer"
|
|
||||||
RMDir /r "$INSTDIR\records"
|
|
||||||
RMDir /r "$INSTDIR\MD"
|
|
||||||
RMDir /r "$INSTDIR\TXT"
|
|
||||||
|
|
||||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk"
|
|
||||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk"
|
|
||||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Gobang Console.lnk"
|
|
||||||
Delete "$SMPROGRAMS\${PRODUCT_NAME}\Gobang GUI.lnk"
|
|
||||||
Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
|
|
||||||
|
|
||||||
RMDir "$SMPROGRAMS\${PRODUCT_NAME}"
|
|
||||||
RMDir "$INSTDIR"
|
|
||||||
|
|
||||||
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
|
|
||||||
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
|
|
||||||
SetAutoClose true
|
|
||||||
SectionEnd
|
|
||||||
Reference in New Issue
Block a user