本地游戏管理程序
Solo Developer · 2026年6月15日
一款轻量级本地游戏库管理工具,支持游戏入库、多维度筛选、一键启动和数据导出。整个程序+数据打包在单一文件夹内,拷贝即迁移,零配置即用。
图片
项目概述
本地游戏管理程序 是一款面向单机/平台游戏玩家的桌面端游戏库管理工具。它解决了多平台游戏分散管理的问题——无论是 Steam、Epic 还是本地可执行文件,统一收录、筛选、统计,并支持一键启动。
核心设计理念是 极简部署与可移植性:整个应用打包为单个 fat JAR,运行时自动生成 data/ 目录存放 H2 数据库和封面图片,拷贝整个文件夹即可迁移到另一台电脑。
功能特性
📦 游戏入库管理
支持录入丰富的游戏元数据:名称、平台(Steam/Epic/NS/PS5 等)、类型(RPG/FPS/ACT 等)、状态(想玩/在玩/已通关)、评分、封面图 URL、购买日期、备注。封面图通过 URL 导入后自动下载至本地 /covers/ 目录。
🔍 多维度筛选与搜索
- 平台/类型/状态下拉筛选:前端 Alpine.js 驱动的即时过滤,无需刷新页面
- 模糊搜索:300ms 防抖输入,按游戏名称实时匹配
- 分页浏览:4 列响应式卡片网格 + Bootstrap 分页组件
🎮 一键启动
支持多种启动协议,点击即可启动游戏:
- 本地
.exe可执行文件路径 - Steam URI 协议(
steam://rungameid/730) - Epic Launcher 协议
- 其他系统 URI 协议
📊 数据统计
- 按状态统计:全部 / 想玩 / 在玩 / 已通关
- 按平台分布统计:可视化各平台游戏数量
- 首页概览面板,一目了然
📤 数据导出
支持将完整游戏库导出为 JSON 文件,便于备份或跨工具迁移。
技术亮点
🏗️ 全栈单体架构
┌─────────────────────────────────────────┐
│ 浏览器 (Thymeleaf) │
│ ┌──────────────────────────────────┐ │
│ │ Alpine.js 响应式交互 │ │
│ │ Bootstrap 5 网格 + 暗色主题 │ │
│ └──────────────┬───────────────────┘ │
│ │ REST API │
│ ┌──────────────▼───────────────────┐ │
│ │ Spring Boot 3.3 (Controllers) │ │
│ │ Spring Data JPA (Repository) │ │
│ │ H2 文件数据库 (data/gamedb.mv.db)│ │
│ │ 本地文件系统 (data/covers/) │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────┘
🎨 暗色主题设计
采用暖金色 (#d4a853) + 深棕底色 (#1a1410) 的配色方案,营造沉浸式游戏管理体验。Bootstrap 5 栅格系统保证 4 列→2 列→1 列的自适应布局。
🔧 技术选型考量
| 选型 | 理由 |
|---|---|
| H2 文件数据库 | 零安装、零配置,数据文件与程序同目录,天然支持便携迁移 |
| Alpine.js | 极轻量(< 15KB)的响应式框架,无需构建步骤,直接在 Thymeleaf 模板中嵌入 |
| Spring Data JPA | 标准化的 CRUD + 分页/排序,减少样板代码 |
| Fat JAR 部署 | mvn package 产出单个可执行 JAR,双击 启动.bat 即可运行 |
📁 项目结构
src/main/java/com/example/gamemanager/
├── controller/
│ └── GameController.java # REST API + 页面路由
├── model/
│ └── Game.java # JPA 实体 (id, name, platform, genre, ...)
├── repository/
│ └── GameRepository.java # Spring Data JPA 仓库
├── service/
│ └── GameService.java # 业务逻辑 (CRUD + 筛选 + 统计 + 启动)
└── GameManagerApplication.java # Spring Boot 入口
src/main/resources/
├── templates/
│ └── index.html # Thymeleaf 单页模板 (Alpine.js + Bootstrap 5)
├── static/
│ └── style.css # 自定义暗色主题样式
└── application.properties # H2 配置 + 文件上传配置
挑战与收获
最大的挑战:一键启动的跨平台兼容
不同平台的游戏启动方式完全不同——Steam 走 URI Scheme、Epic 走自定义协议、本地游戏走文件路径。通过抽象出统一的 LaunchService,根据游戏记录的平台字段动态选择启动策略,实现了统一的"一键启动"体验。
前后端一体化的取舍
选择 Thymeleaf + Alpine.js 而非前后端分离(React/Vue + REST),是为了降低部署复杂度——单 JAR 即服务,无需 Nginx 反向代理或静态资源托管。代价是前端交互逻辑全部内嵌在单一 HTML 文件中,维护性随着功能增长会逐渐下降。这是有意为之的权衡:对于一个个人使用的工具,运维简单性优先于代码组织的美观。
工程实践
- 约定优于配置:遵循 Spring Boot 默认约定,最小化配置文件
- 嵌入式数据库:H2 文件模式,数据持久化无需额外安装数据库服务
- 一键启动脚本:
启动.bat自动检测 Java 环境 → 启动服务 → 等待就绪 → 打开浏览器
快速开始
# 方法一:Maven 构建
mvn package -DskipTests
java -jar target/game-manager-1.0.0.jar
# 方法二:一键启动(Windows)
双击 启动.bat
访问 http://localhost:8080 进入管理界面。
项目数据
| 指标 | 数值 |
|---|---|
| 开发周期 | 单人短周期迭代 |
| 技术栈 | Spring Boot 3.3 + Java 17 |
| 数据库 | H2 File (嵌入式) |
| 前端 | Thymeleaf + Alpine.js + Bootstrap 5 |
| 构建工具 | Maven |
| 部署形态 | 单 Fat JAR (~50MB) |