作品

本地游戏管理程序

Solo Developer · 2026年6月15日

Spring Boot 3.3Java 17H2 DatabaseSpring Data JPAAlpine.jsBootstrap 5ThymeleafMaven

一款轻量级本地游戏库管理工具,支持游戏入库、多维度筛选、一键启动和数据导出。整个程序+数据打包在单一文件夹内,拷贝即迁移,零配置即用。

图片

项目概述

本地游戏管理程序 是一款面向单机/平台游戏玩家的桌面端游戏库管理工具。它解决了多平台游戏分散管理的问题——无论是 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)