一个用 Java 写的、可以"换一个 JSON 就换一个游戏"的模拟经营引擎,还自带两套完整游戏。
📌 本项目由 AI 生成 · 0 手工编程:整个 TermSim Engine(引擎代码 + 玩法 + 两个游戏文件)均由 AI 大模型生成,作者没有手写一行业务代码。作者负责的是:定义需求、提出玩法、逐版迭代调试与验收把关。这是一次"用 AI 从零造一个能玩的游戏引擎"的真实实践记录。
一句话介绍
TermSim Engine 是一个基于 Spring Boot 3.3.5 + Thymeleaf 实现的终端风格模拟经营游戏引擎。它的核心思路是 引擎 + 游戏文件(JSON)分离:
- 引擎(Java 代码)提供通用的经营模拟框架——时间 / 四季 / 天气、客流量与购买模拟、NPC 好感与评价、贷款计息、装修解锁、随机事件、声誉漂移、胜负判定、存档系统;
- 游戏文件(JSON)决定具体的玩法内容——小卖部、饭馆、奶茶店……任何场景都能通过一个 JSON 文件"安装即玩";
- 界面 是经典 CRT 终端风格:荧光绿文字、扫描线、闪烁光标、启动动画、命令行输入,满满的复古感。
项目开箱自带 「街角小卖部」 和 「街角饭馆」 两套完整游戏,克隆下来 mvn spring-boot:run 就能玩。
为什么想做这个
- 想验证"引擎与内容分离"这套思路在游戏里到底好不好用。 商业游戏里策划和程序分工,靠配置驱动玩法;我想在一个小项目里把这件事做到极致——程序不碰玩法,玩法不碰代码。
- 终端界面自带一种独特的气质。 荧光绿 + 扫描线 + 命令行,配上经营模拟的"数据流"感,非常契合。
- 想做一个"谁都能往里塞游戏"的开放平台。 门槛够低,社区才能长出来。
技术栈
| 层 | 技术 |
|---|---|
| 后端 | Java 17 · Spring Boot 3.3.5 · Spring MVC |
| 模板 | Thymeleaf 3 |
| 前端 | jQuery 3.7.1(WebJar 离线提供)· 原生 CSS/JS |
| 3D 背景 | Three.js r128(本地静态资源,离线可用,失败自动降级) |
| 数据 | JSON 文件(游戏安装文件 + 存档,无数据库) |
| 序列化 | Jackson(snake_case 命名,便于游戏文件作者阅读) |
| 测试 | JUnit 5(引擎核心逻辑 62 个用例) |
功能亮点
这个引擎在 12 个版本迭代里,把一套模拟经营玩法打磨得非常完整:
基础经营框架
- 实时时间流:现实 1 秒 = 游戏 1 分钟,支持暂停 / 继续 / 打烊快进 / 时间倍速(0.5×~5×);
- 四季 × 天气 × 时段影响客流与商品需求(早 / 午 / 晚);
- 进货、定价、贷款(按游戏日实时计息)、装修解锁新品类、随机事件;
- 实时终端日志:每一笔成交、每一次随机事件(比如小偷光顾)都会实时滚动到终端,经营过程一目了然。
NPC 与社交
- 6 位 NPC 街坊:好感度变化 + 评价台词 + 主动社交(闲聊 / 送礼 / 请客,好感 50+ 带客、80+ 宣传);
- NPC 委托订单:街坊清晨可能下单,按时交货赚溢价 + 好感,逾期则声誉受损。
经营策略层
- 贸易策略:小卖部可批发回笼现金,饭馆可开通外卖平台(每日自动接单、占厨房产能、评价影响声誉);
- 雇佣系统:按月薪雇佣员工(自动进货 / 揽客 / 采购让价 / 外卖加成 / 安保保洁),涨薪提效率、降薪可能离职,发薪日现金不足会欠薪跑人;
- 银行存取款 + 理财:日复利计息,现金放店里会被小偷盯上,存银行更稳;理财产品定期锁定、到期自动兑付;
- 供应链(v1.10):合作值升级解锁进货折扣(最高 88 折)、赊账进货(30 天账期)、独家高毛利商品。
大系统玩法
- 地图地产:4 处地段客流量与房价不同,可申请房屋贷款买新地产、迁移店铺(库存自动随店走),每月等额本息还款;
- 分店系统(v1.9):可开分店(费用递增、需声望门槛),每店库存 / 定价 / 装修 / 雇员 / 选址客流完全独立,现金存款贷款理财为全局唯一账户;
- 口碑评级(v1.10):按价格分 + 新鲜分 + 服务分每日结算满意度,实时影响客流与客单价;每 30 天评级(街坊小铺 → 街区标杆);
- 街区竞争(v1.10):竞争对手登场抢客流,玩家可用价格战 / 营销战 / 口碑攻势反击,把对手热度压到歇业可拿「街区称霸」成就;
- 节日庆典(v1.11):四季各一场应季节日,筹备金换客流加成,闭幕结算战报与回报抽成;
- 员工培养晋升(v1.11):雇员经验成长 + 忠诚度系统,满级可晋升骨干(全员光环),并从技能池习得永久技能。
其它细节
- 保质期过期损耗、声誉漂移、净资产胜负判定;
- 幸运彩票、刮刮乐、实时自动补货(原子扣款无并发无多扣);
- 个人形象系统(v1.7):装扮、购置车/住宅资产,共同提升个人声望,声望驱动 NPC 主动上门互动;
- 所有列表(货架 / 定价 / 装修 / 贷款 / 报表 / 贸易 / 雇员 / 街坊 / 成就)分页展示,页面不臃肿;
- Three.js 3D 终端背景(v1.12):粒子星云 + 网格地平线 + 漂浮线框几何体 + 光晕,垫在 UI 之下不遮挡交互,加载失败自动降级。
架构:引擎与游戏文件分离
simulation/
├── pom.xml # Maven 构建(Spring Boot 3.3.5)
├── games/ # ★ 游戏安装文件目录(每个 .json 一个游戏)
│ ├── convenience-store.json # 默认游戏:街角小卖部
│ └── street-restaurant.json # 随附游戏:街角饭馆
├── saves/ # ★ 存档目录(运行时生成,按游戏分目录)
├── README.md / DESIGN.md
└── src/main/java/com/termgame/
├── GameEngineApplication.java
├── config/EngineProperties.java # games/saves 目录配置
├── model/def/ # 游戏定义模型(record,直接映射 JSON)
└── ...
游戏定义全部用 Java record 直接映射 JSON,命名用 snake_case,写游戏文件的人不需要懂 Java。要做一个"奶茶店"游戏?写一个符合规范的 JSON 放进去就能装、就能玩。
内置游戏
- 🎮 街角小卖部:26 种商品、批发贸易、4 名雇员、银行 / 委托 / 彩票、4 处地产、6 位街坊、供应链 + 2 个街区对手(默认游戏,开箱即玩);
- 🍜 街角饭馆:26 道菜、7 级装修解锁菜系、外卖平台、供应链 + 街区对手(苍蝇馆子主题)。
快速开始
# 需要 JDK 17+ 与 Maven
mvn spring-boot:run # 或:mvn -DskipTests package && java -jar target/term-sim-engine.jar
# 打开浏览器
open http://localhost:8899/
想写 / 安装自己的游戏?项目里有完整的 [游戏安装文件说明],照着规范写一个 JSON 就能接入。
工程质量
- 引擎核心逻辑有 62 个 JUnit 5 用例,每个版本迭代都在补齐测试,保证玩法咬合不回归;
- 纯 JSON 存储,无数据库依赖,clone 下来即用;
- MIT License 开源,可自由使用、修改、分发与商用,仅需保留版权声明。
项目是怎么来的(AI 生成 · 0 手工编程)
这里得坦白说明:这个引擎不是"人肉敲代码"写出来的,而是完全由 AI 生成的项目。
- 0 手工编程:引擎的 Java 代码、玩法逻辑、Thymeleaf 模板、前端样式、两个 JSON 游戏文件,全部由 AI 大模型生成,作者没有手写一行业务代码;
- 作者的"编程"工作是定义与把关:提需求("我要一个终端风格的小卖部经营游戏")、规划玩法(NPC 社交、雇佣、供应链、分店、街区竞争……)、逐版本迭代调试、写 62 个引擎测试并验收;
- 这不是玩具:项目经过 12 个版本迭代(v1.0 → v1.12),沉淀了分店系统、供应链、口碑评级、街区竞争、节日庆典、员工晋升等完整玩法系统,且有 JUnit 测试保障,说明 AI 已经能协作产出"可运行、可扩展、有工程规范"的完整游戏引擎。
把这件事写出来,是想分享一个真实结论:AI 编程的边界,远比你想象的大——只要需求拆得够细、迭代跟得够紧,一个"零手写代码"的项目也可以长得很大。上面的全部内容就是最好的证据:从引擎到游戏,都是 AI 写的。
写在最后
这个项目的乐趣在于:它既是引擎,又是作品集。你可以直接玩,也可以照着规范写一个属于自己场景的模拟经营游戏,甚至把引擎当成练手 Spring Boot + Thymeleaf + jQuery 的完整示例。
欢迎 Star、提 Issue、贡献游戏文件,或者直接把它改成你的下一个想法。
项目地址:gitee.com/itsunhao/te… (TermSim Engine) 许可证:MIT License