一个用 Java 写的文字类终端游戏引擎,把互动叙事(场景 / 选项 / 关键词输入 / 线索 / 结局统计)搬进复古终端界面。
📌 本项目由 AI 生成 · 0 手工编程:整个 Echo Terminal(引擎代码 + 前端 + 文档 + 示例游戏)均由 AI 大模型生成,作者没有手写一行业务代码。作者负责的是:定义需求、提出玩法、逐版迭代调试与验收把关。这是一次"用 AI 从零造一个能玩的互动叙事游戏引擎"的真实实践记录。
一句话介绍
Echo Terminal · 回声终端 是一个文字类终端风格的游戏引擎。它以复古终端为载体,用文字、符号与即时反馈承载互动叙事游戏:场景、选项、关键词输入、线索与结局统计,都在一个打字机般的终端界面中完成。
核心亮点是 游戏即文件 ------上传一个符合规范的 .json 游戏文件即可安装即玩;任何人都能照着格式规范编写自己的互动叙事游戏,塞进去就能玩。
为什么想做这个
- 把"叙事游戏"做成一等公民的配置。 场景、动作、条件、效果四层模型,故事作者只需要写 JSON,不用碰一行 Java。
- 终端界面是互动叙事的完美载体。 xterm.js 打字机式的逐字输出、命令行般的氛围,天然契合"选择 / 输入 / 反馈"的叙事节奏。
- 想做一个"谁都能往里塞故事"的开放平台。 科幻、恐怖、推理、奇幻......换一个 JSON 就是一个新游戏。
特性
- 🖥️ 终端式游玩体验:基于 xterm.js 的复古终端界面,支持编号选项与自然语言关键词输入;
- 📦 安装即玩 :游戏库首页「上传安装」一个游戏文件即可游玩;同
id覆盖已安装版本,删除外部副本自动回退内置版; - 🎮 内置故事 + 示例游戏:开箱即用的完整游戏(科幻、恐怖、推理题材);
- 🧩 结构化叙事模型:场景 / 动作 / 条件 / 效果四层模型,支持 flag、物品、信任值、计数器;
- 📜 结局与线索统计:自动追踪结局达成、线索收集与信任值变化;
- ⚙️ 严格校验:安装时对格式、引用、嵌套深度做全面校验,拼写错误即时报错;
- 🌐 轻量部署:单进程 Spring Boot 应用,内置全部静态资源,无外部依赖。
技术栈
| 层 | 技术 |
|---|---|
| 后端 | Java 21 · Spring Boot 3.3.5 · Spring MVC · Thymeleaf |
| 前端 | xterm.js(终端模拟)+ jQuery,原生 CSS |
| 数据 | 游戏为 JSON 文件,无数据库;会话状态存于 HttpSession |
| 构建 | Maven Wrapper(无需预装 Maven) |
游戏即文件:四层叙事模型
游戏就是一个 UTF-8 编码的 JSON 文件 (≤ 5MB),核心是描述 场景 / 动作 / 条件 / 效果:
json
{
"format": 1,
"id": "my-story",
"title": "我的故事",
"genre": "类型 · 标签",
"version": "1.0",
"author": "作者名",
"description": "一句话简介,显示在游戏库卡片上。",
"startScene": "boot",
"endings": ["结局一", "结局二"],
"clues": ["clue_a"],
"scenes": { "...": "..." }
}
引擎内置全局指令,所有故事通用、无需定义:帮助、背包、重新开始、关于。
要做一个新故事?写一个符合规范的 JSON,通过网页上传、API 或放入 games/ 目录即可安装。
内置与示例游戏
| 游戏 | 类型 |
|---|---|
| 曙光-7 深空研究站 | 科幻 · 悬疑 |
| 雨夜山庄杀人事件 | 破案 · 推理 |
| 雾镇卫生院 | 恐怖 · 探险 · 解谜 |
| 九龙城寨·无面佛 | 中式恐怖 · 悬疑 |
| 霍格沃茨:石像鬼之夜 | 奇幻 · 恐怖 · 探险 |
快速开始
环境要求:JDK 21+(含 Maven Wrapper,无需预装 Maven)。
bash
# 启动(首次会自动下载 Maven 依赖)
./mvnw spring-boot:run
# Windows
mvnw.cmd spring-boot:run
启动后打开浏览器访问:
- 游戏库首页 :http://localhost:8080/
- 游玩入口 :http://localhost:8080/play?story=<游戏id>
项目结构
php
echo-terminal/
├── pom.xml # Maven 配置(Spring Boot 3.3.5, Java 21)
├── mvnw / mvnw.cmd # Maven Wrapper
├── games/ # 外部安装的游戏目录(运行时加载)
├── samples/
│ ├── GAMEFILE.md # ★ 游戏文件格式规范(编写必读)
│ └── *.json # 示例游戏
└── src/main/
├── java/com/example/echo/
│ ├── EchoApplication.java # 应用入口
│ ├── game/ # 游戏运行时引擎(会话、回复、渲染)
│ ├── story/ # 故事模型与解析(场景/动作/条件/效果)
│ └── web/ # 页面与 REST API
└── resources/
├── stories/ # 内置故事
├── static/ # 前端资源(xterm.js、样式、脚本)
└── templates/ # 游戏库 / 游玩页面(Thymeleaf)
HTTP API
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / |
游戏库首页 |
| GET | /play?story=<id> |
游玩页面 |
| GET | /api/stories |
游戏列表(含场景数、结局数、是否内置等) |
| POST | /api/stories/install |
上传安装游戏(multipart 字段 file,仅 .json) |
| DELETE | /api/stories/{id} |
删除外部安装的游戏(内置不可删) |
| GET | /api/stories/{id}/download |
下载游戏文件 |
| POST | /api/game/start |
开始一局游戏,body:{"storyId":"<id>"} |
| POST | /api/game/input |
提交玩家输入,body:{"text":"..."} |
项目是怎么来的(AI 生成 · 0 手工编程)
这里得坦白说明:这个引擎不是"人肉敲代码"写出来的,而是完全由 AI 生成的项目。
- 0 手工编程:引擎的 Java 代码、xterm.js 终端界面、Thymeleaf 页面、JSON 游戏文件与格式规范,全部由 AI 大模型生成,作者没有手写一行业务代码;
- 作者的"编程"工作是定义与把关:提需求("我要一个终端风格的互动叙事游戏引擎")、规划四层叙事模型、逐版迭代调试、验收游戏文件校验逻辑;
- 这不是玩具 :项目包含科幻 / 恐怖 / 推理 / 奇幻多种题材的完整游戏,支持游戏即文件、上传安装、严格校验与内置 / 外部游戏覆盖回退,说明 AI 已经能协作产出"可运行、可扩展、有工程规范"的完整游戏引擎。
把这件事写出来,是想分享一个真实结论:AI 编程的边界,远比你想象的大------只要需求拆得够细、迭代跟得够紧,一个"零手写代码"的项目也可以长得很大。上面的全部内容就是最好的证据:从引擎到游戏,都是 AI 写的。
写在最后
这个项目的乐趣在于:它既是引擎,又是作品集 。你可以直接玩,也可以照着 samples/GAMEFILE.md 规范写一个属于自己题材的互动叙事游戏,甚至把引擎当成练手 Spring Boot + Thymeleaf + xterm.js 的完整示例。
欢迎 Star、提 Issue、贡献游戏文件,或者直接把它改成你的下一个想法。
项目地址:gitee.com/itsunhao/ec... (Echo Terminal) 许可证:MIT License