build(installer): 精简安装包配置并移除NSIS脚本

- 删除 NSIS 安装脚本 (installer.nsi),统一使用 Inno Setup
- 简化 Inno Setup 脚本,仅打包核心运行文件 (gobang_gui.exe, iup.dll) 和记录目录
- 移除源码、文档等开发文件,减小安装包体积
- 更新 README.md 以反映 v9.0 版本变更,专注于图形界面和网络功能
This commit is contained in:
2026-03-17 18:10:40 +08:00
parent 88f12bcfea
commit 249dc2ab4b
3 changed files with 97 additions and 459 deletions
+87 -274
View File
@@ -1,344 +1,157 @@
# C语言五子棋人机对战AI # C语言五子棋系统
![Build Status](https://img.shields.io/badge/build-passing-brightgreen) ![Build Status](https://img.shields.io/badge/build-passing-brightgreen)
![License](https://img.shields.io/badge/license-MIT-blue) ![License](https://img.shields.io/badge/license-MIT-blue)
![Version](https://img.shields.io/badge/version-v8.3-blue) ![Version](https://img.shields.io/badge/version-v9.0-blue)
![Platform](https://img.shields.io/badge/platform-Windows-lightgrey) ![Platform](https://img.shields.io/badge/platform-Windows-lightgrey)
> 🎯 **最新版本 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
View File
@@ -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"
-162
View File
@@ -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