From 249dc2ab4bf7975f6359c5c2c3f986c3f4aebe90 Mon Sep 17 00:00:00 2001 From: LHY0125 <3364451258@qq.com> Date: Tue, 17 Mar 2026 18:10:40 +0800 Subject: [PATCH] =?UTF-8?q?build(installer):=20=E7=B2=BE=E7=AE=80=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E5=8C=85=E9=85=8D=E7=BD=AE=E5=B9=B6=E7=A7=BB=E9=99=A4?= =?UTF-8?q?NSIS=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除 NSIS 安装脚本 (installer.nsi),统一使用 Inno Setup - 简化 Inno Setup 脚本,仅打包核心运行文件 (gobang_gui.exe, iup.dll) 和记录目录 - 移除源码、文档等开发文件,减小安装包体积 - 更新 README.md 以反映 v9.0 版本变更,专注于图形界面和网络功能 --- README.md | 361 ++++++++++------------------------------ installer/installer.iss | 33 ++-- installer/installer.nsi | 162 ------------------ 3 files changed, 97 insertions(+), 459 deletions(-) delete mode 100644 installer/installer.nsi diff --git a/README.md b/README.md index b23022f..7602558 100644 --- a/README.md +++ b/README.md @@ -1,344 +1,157 @@ -# C语言五子棋人机对战AI +# C语言五子棋系统 ![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-v8.3-blue) +![Version](https://img.shields.io/badge/version-v9.0-blue) ![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库,无需复杂配置即可运行 -- 📂 **目录重构** - 采用标准的 `bin/` (可执行文件) 和 `obj/` (中间文件) 目录结构 -- ⚡ **Makefile支持** - 提供完整的Makefile,支持一键编译、清理和运行 -- 🌐 **本地化资源** - 集成第三方库到 `libs/` 目录,开箱即用 +- 🌐 **局域网对战** - 引入 ENet 库,支持稳定、无粘包的局域网多人对战(创建房间/加入房间)。 +- 🎨 **GUI 深度重构** - 拆分臃肿的 GUI 代码,模块化为 `gui_core`, `gui_game`, `gui_menu`, `gui_draw`, `gui_replay`,大幅提升可维护性。 +- 📦 **精简安装包** - 优化 Inno Setup 打包脚本,实现极简核心依赖打包。 +- � **全面摒弃控制台** - 专注于基于 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进行对弈 -- **双人对战模式** - 支持本地双人游戏 -- **复盘模式** - 回顾和分析历史对局 -- **GUI图形化模式** - 基于IUP的图形界面 -- **控制台模式** - 传统终端界面游戏模式 +- **人机对战 (PvE)** - 挑战 1-5 级难度的智能 AI。 +- **局域网联机 (Network)** - 建立主机或作为客机加入,与朋友在局域网内实时对战。 +- **复盘模式 (Replay)** - 载入自动保存的对局记录(CSV),逐步回放并分析对局。 -### ⚙️ 游戏设置 +### ⚙️ 核心功能 -- **自定义棋盘尺寸** - 支持5x5至25x25可调节棋盘 -- **多级AI难度** - 1-5级智能难度可选 -- **配置管理系统** - 持久化保存游戏设置 -- **禁手规则支持** - 可选启用五子棋标准禁手规则 -- **回合计时器** - 可设置每回合思考时间限制 +- **实时对局控制** - 支持悔棋(PvE)、断线重连检测、胜负判定。 +- **自动游戏记录** - 每局游戏结束后自动保存至 `bin/records/` 目录。 +- **模块化构建** - 提供高度配置化的 Makefile,一键源码编译包含 ENet 和主程序的二进制文件。 -### 🎯 游戏功能 - -- **实时对局控制** - 悔棋、认输、保存等操作 -- **自动游戏记录** - 完整保存对局过程到CSV文件 -- **智能评分系统** - 对每步棋进行专业评分和分析 -- **完整复盘功能** - 逐步回放对局并显示评分 -- **MVP评选系统** - 自动评选对局最佳表现者 - -### 💻 用户体验 - -- **双界面支持** - 同时提供图形化界面和终端界面 -- **IUP图形化界面** - 原生控件风格,轻量高效 -- **鼠标操作支持** - 直观的点击落子操作 -- **完备输入验证** - 确保所有用户输入的有效性和安全性 -- **智能错误提示** - 详细的错误信息和操作指导 -- **跨平台兼容** - 支持Windows系统,代码结构预留跨平台扩展 - -### 🔧 技术特性 - -- **模块化架构** - 清晰的代码结构,便于维护和扩展 -- **IUP图形库集成** - 简单易用的跨平台图形库 -- **Makefile构建系统** - 标准化的编译流程 -- **目录结构规范** - 代码(src)、对象(obj)、执行文件(bin)分离 -- **结构体定义集中化** - 所有数据结构统一在type.h中管理 -- **配置参数统一管理** - 所有配置宏定义集中在config.h中 -- **全局变量统一管理** - 所有全局变量集中在globals模块中管理 -- **内存优化管理** - 高效的内存使用和资源管理 -- **配置文件支持** - INI格式配置文件自动加载保存 -- **UTF-8编码支持** - 完美支持中文显示 -- **事件驱动架构** - 高效的图形界面事件处理机制 -- **网络对战功能** - 完整的在线多人对战系统 +--- ## 快速开始 ### 编译项目 -#### 使用Makefile(推荐) - -在项目根目录下打开终端(PowerShell 或 CMD),运行以下命令: - -**编译所有版本:** +项目使用 Makefile 进行构建,依赖 MinGW-w64 工具链。 +在项目根目录下打开 PowerShell 或 CMD,运行: ```bash -mingw32-make all -``` +# 清理旧文件 +mingw32-make clean -**仅编译控制台版本:** - -```bash -mingw32-make console -``` - -**仅编译GUI版本:** - -```bash +# 编译生成 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 .\bin\gobang_gui.exe ``` -或者使用Makefile指令直接运行: +### 打包安装程序 -```bash -mingw32-make run-gui +如果你需要将游戏打包成 Windows 安装程序,项目提供了 Inno Setup 脚本。 +确保你已安装 [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`) -- **悔棋**:输入 `R` 或 `r` 撤销上一步 -- **认输**:输入 `S` 或 `s` 主动认输 -- **保存**:输入 `SAVE` 保存当前对局 -- **退出**:输入 `EXIT` 退出当前对局 +### AI 算法 -### ⚙️ 配置管理 +- **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)**:评估那些能够直接形成制胜局面的落子点,如“四三”或“活三”,并对这些点给予极高的评价值,以抓住制胜机会。 -- **双向连通性**:在评估一个点时,会同时判断其是否拥有足够的空间形成有效棋型,避免在被封锁的位置下出无效棋。 +--- ## 项目结构 -### 📁 核心模块 - -- **`src/main.c`** - 主程序入口,负责初始化与游戏模式选择 -- **`src/gobang.c`** - 核心游戏逻辑,包括棋盘操作、胜负判断 -- **`src/game_mode.c`** - 游戏模式实现 (人机对战、双人对战、复盘模式) -- **`src/ai.c`** - AI算法实现 (Minimax + Alpha-Beta剪枝) -- **`src/gui.c`** - IUP图形化界面模块 (窗口管理、事件处理、图形渲染) - -### 🎮 功能模块 - -- **`src/ui.c`** - 用户界面模块,负责所有显示和交互 -- **`src/record.c`** - 游戏记录系统 (保存、加载、复盘、评分) -- **`src/init_board.c`** - 棋盘初始化和游戏设置 -- **`src/config.c`** - 配置管理系统 (参数设置、文件读写) -- **`src/globals.c`** - 全局变量统一管理模块 -- **`src/network.c`** - 网络功能模块 (为未来网络对战预留) - -### 📄 配置和文档 - -- **`Makefile`** - 项目构建脚本 -- **`gobang_config.ini`** - 游戏配置文件 -- **`records/`** - 对局记录目录 -- **`include/`** - 头文件目录 -- **`libs/`** - 第三方库目录 (包含IUP) -- **`bin/`** - 编译输出目录 (可执行文件) -- **`obj/`** - 中间文件目录 -- **`installer/`** - 安装包制作目录 -- **`MD/`** - 项目详细文档 - -### 🔧 开发工具 - -- **`.vscode/`** - VS Code 配置文件 -- **`.idea/`** - IntelliJ IDEA 配置文件 +```text +Gobang/ +├── bin/ # 编译输出目录 (包含 exe, dll 和 records) +├── include/ # 头文件目录 +├── libs/ # 第三方库源码及预编译库 (ENet, IUP) +├── src/ # 核心源代码 +│ ├── main.c # 程序入口 +│ ├── gobang.c # 五子棋核心规则与逻辑 +│ ├── ai.c # 智能 AI 算法 +│ ├── network.c # ENet 网络通信封装 +│ ├── record.c # 棋谱记录与解析 +│ ├── gui_core.c # GUI 初始化与核心循环 +│ ├── gui_game.c # 游戏主界面与交互逻辑 +│ ├── gui_menu.c # 游戏主菜单界面 +│ ├── gui_draw.c # 棋盘与棋子渲染 +│ └── gui_replay.c # 复盘模式交互逻辑 +├── installer/ # Inno Setup 安装包打包脚本及输出 +├── Makefile # 自动化构建脚本 +└── README.md # 项目说明文档 +``` ## 许可证 -本项目采用 [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对手 +本项目采用 [MIT 许可证](https://opensource.org/licenses/MIT)授权。欢迎自由修改和分发! diff --git a/installer/installer.iss b/installer/installer.iss index 70ccfbc..993cdad 100644 --- a/installer/installer.iss +++ b/installer/installer.iss @@ -8,7 +8,6 @@ AppUpdatesURL=https://github.com/LHY0125/gobang.git DefaultDirName={autopf}\Gobang DefaultGroupName=五子棋游戏 AllowNoIcons=yes -LicenseFile=..\README.md OutputDir=dist OutputBaseFilename=Gobang_Inno_Setup SetupIconFile= @@ -24,33 +23,21 @@ Name: "english"; MessagesFile: "compiler:Default.isl" Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] -Source: "..\gobang_console.exe"; DestDir: "{app}"; Flags: ignoreversion -Source: "..\gobang_gui.exe"; DestDir: "{app}"; Flags: ignoreversion -Source: "..\SDL3.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "..\include\*"; DestDir: "{app}\include"; Flags: ignoreversion recursesubdirs createallsubdirs -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 +Source: "..\bin\gobang_gui.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "..\bin\iup.dll"; DestDir: "{app}"; Flags: ignoreversion +; 允许文件夹为空时不报错 +Source: "..\bin\records\*"; DestDir: "{app}\records"; Flags: ignoreversion recursesubdirs createallsubdirs skipifsourcedoesntexist [Icons] -Name: "{group}\五子棋游戏(控制台版)"; Filename: "{app}\gobang_console.exe" -Name: "{group}\五子棋游戏(图形界面版)"; Filename: "{app}\gobang_gui.exe" +Name: "{group}\五子棋游戏(图形界面版)"; Filename: "{app}\gobang_gui.exe"; WorkingDir: "{app}" 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] -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] Type: filesandordirs; Name: "{app}\records" -Type: filesandordirs; Name: "{app}\include" -Type: filesandordirs; Name: "{app}\src" -Type: filesandordirs; Name: "{app}\MD" -Type: filesandordirs; Name: "{app}\TXT" -Type: filesandordirs; Name: "{app}\installer" \ No newline at end of file +Type: files; Name: "{app}\gobang_gui.exe" +Type: files; Name: "{app}\iup.dll" +Type: dirifempty; Name: "{app}" diff --git a/installer/installer.nsi b/installer/installer.nsi deleted file mode 100644 index 57d9aba..0000000 --- a/installer/installer.nsi +++ /dev/null @@ -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 \ No newline at end of file