<!-- title: 《Hauberk》他写完游戏引擎，顺手白送一个地牢 -->
<!-- domain: games -->
<!-- repo: munificent/hauberk -->

如果你在游戏开发圈子里待过一阵，大概率听说过 Bob Nystrom这个名字。他写过《Game Programming Patterns》,游戏程序员几乎人手一本的免费在线书；他也写了《Crafting Interpreters》,编译原理领域口碑最好的入门书之一；他还造了 Wren 这门嵌入式脚本语言， Birdsan 背后的官方实现用的就是它。这个人写书、写引擎、写语言，样样都是免费开源，靠全职工作之余的时间攒出来的。

但很少有人注意到，这位“教全世界的程序员写游戏”的人，自己其实也做过一个游戏。仓库叫 Hauberk,一个跑在浏览器里的 ASCII 地牢探索游戏，Dart 写的，2200 颗星，MIT 协议，代码、美术、玩法全部白送。README 里他只淡淡写了一句：**"I'd be delighted if you used this codebase as a springboard for your own game."**——我很乐意你把这个代码库当跳板，去做你自己的游戏。

这篇文章就带你把这个跳板拆开看看：它好玩在哪，代码里藏着哪些可以直接抄的设计，以及一个想靠小游戏变现的个人开发者，能从这套“教学系开源游戏”里挖出什么金子。

## 仓库档案

| 项目 | 信息 |
|---|---|
| 仓库 | [munificent/hauberk](https://github.com/munificent/hauberk) |
| ⭐ Star | 约 2.2k(213 fork) |
| 语言 | Dart(97.3%),HTML 1.9% |
| 协议 | MIT(仓库内以 COPYRIGHT 文件形式给出) |
| 作者 | Bob Nystrom,个人开发者，Google Dart 团队前成员 |
| 在线版 | munificent.github.io/hauberk/ |
| 状态 | 作者本人维护，处于“基本只读”状态，鼓励 fork 走魔改 |

先说清一个背景：这不是一个“半成品玩具”。Hauberk 有完整的英雄系统、装备系统、合成系统、关卡进度、任务机制，内容量对一个 demo 来说相当扎实。它更像一份**被实际游戏验证过的地牢游戏架构参考实现**——这正是它对开发者的价值所在。

## 这游戏是什么

一句话说清玩法：**你是一个 `@` 字符，在随机生成的 ASCII 地牢里一层层往下杀，清完任务离开，捡装备、攒经验、合成道具，一层比一层难，死了就丢掉这一层拿到的所有东西。**

典型的 roguelike 套路，但 Hauberk 做了几个和传统 roguelike 不太一样的关键设计，先画个图看它每局的核心循环：

```mermaid
flowchart LR
    A[选择区域/层级] --> B[随机生成新地牢层]
    B --> C[探索 + 战斗]
    C --> D{完成任务目标?}
    D -- 未完成 --> E[死亡/放弃<br>丢光本层收获]
    D -- 完成 --> F[按Q撤离<br>收获全部落袋]
    E --> A
    F --> G[回城: 合成/装备/存档]
    G --> H[解锁下一层]
    H --> A
```

这个循环里最狠的一刀，是**结算制死亡惩罚**。传统 roguelike 是永久死亡，角色死了就删档，对普通玩家太劝退；主流手游化 roguelike 又干脆没惩罚，死了重来毫无压力。Hauberk 取了个中间态：**你在一个关卡里捡的一切，只有完成任务撤离才真正属于你；死了或者中途放弃，这一局的所有战利品和经验全部蒸发**。玩家每捡一件装备都会下意识盘算“要不要继续深入”——这是非常便宜的、用一行 if 就能实现的“贪心算法”玩家心理杠杆，你写游戏时可以直接抄。

第二个亮点是**关卡任务制**。每一层不只有怪和宝藏，还有一个必须完成的目标，完成后才能按 Q 撤离。这个设计同时解决了三件事：给玩家“这一局的终点”预期、强迫玩家探索整个地图(而不是直线冲到底)、让每一局的“完成时刻”都有明确反馈。小体量 roguelike 想加黏性，加任务远比加怪物划算。

第三个亮点是**食物-休息绑定**。你的血不靠喝药水回，靠原地休息回；休息要消耗食物；而食物**只能靠探索新地图获取**。这三条规则锁死在一起，直接掐死了 roguelike 最常见的摆烂玩法——在安全屋里反复睡到满血。想回血？出门探索。想苟着？食物耗尽休息无效。一行资源约束就逼出了“永远在推进”的玩法节奏，这是教科书级的机制联动。

## 为什么上头

按你熟悉的框架拆，Hauberk 的上头感来自四股力，每一条都能对应到它代码里的具体实现：

**1. 随机地图，即学即玩的新鲜感。** 每层都是程序生成，玩家重开一局永远不知道会拿到什么地图。这是 roguelike 的祖传钩子，不稀奇，稀奇的是 Hauberk 的生成算法质量很高——房间+走廊结构自然，宝物和怪物分布有梯度，同一个区域里层与层之间难度递增清晰。程序生成听起来吓人，其实一套标准的房间摆放+洪水填充连通性检查，一两百行代码就能跑起来，这是所有小体量 roguelike 里**性价比最高的一项投资**。

**2. 低开高走的难度曲线 + 解锁制进度。** 游戏从“友好的森林”开始，每个区域有自己的怪物池、视觉风格和难度梯度，必须通关上一层才能解锁下一层，同一层还能反复刷。这是很聪明的分层：新手第一分钟就能上手(键盘方向键+numpad 移动，撞怪即攻击)，老玩家有区域选择和刷层策略。**“可重复挑战已解锁关卡”+“完成才结算”**这两条组合起来，就是刷宝类游戏的完整循环——你刷一层，赌这一把能带多少东西出来。

**3. 结算制死亡惩罚带来的每一次都像赌博。** 前面说了，深入有风险，撤离才落袋。这条机制让玩家每多开一个房间都要做个微决策：这房间值不值得探？血量还撑得住吗？拿到神话装备后是立即撤离还是再贪一个房间？**小决策密度高**，正是休闲 roguelike 留存的核心指标。顺带一提，Hauberk 的死亡惩罚不是删档，是丢掉本局收获——玩家不会因为一次失败就永远失去角色，报复性重开的心理成本极低。

**4. 合成系统给的“收集欲”出口。** 家里的坩埚(Crucible)只接受配方内的物品，放齐了按空格直接转化成新道具。配方有明确的目标感(我知道我要凑哪几样)，不像纯随机合成那样让人迷茫。这给了玩家一条“我下局要去刷什么”的明确指引，把单局的随机性和长线的收集欲缝在了一起。README 里作者还特意提示“丢几瓶治疗药水进去试试”——配方系统是**引导玩家自学的钩子**，不用写新手教程，玩家丢错东西会自己琢磨。

另外提一句细节：游戏的英雄数据存在浏览器 localStorage 里，而且**只在离开关卡时存档，关卡中途不存**。这既是技术偷懒(省得做战斗中的状态回滚)，也是机制设计(你要 S/L 读档作弊？不行，中途退出=放弃，收获清零)。一个 localStorage.setItem 的调用位置，同时是反作弊机制。这种“技术限制变成玩法特色”的思路，个人开发者该人手一份。

## 技术拆解

**Dart + 浏览器渲染，一套代码，零后端。** 整个项目 97% 是 Dart,编译到 JS 跑在浏览器，本地 `make serve` 就能起一个带热编译的开发服务器。没有数据库、没有网络同步、没有账号系统——所有状态都在客户端，存档走 localStorage。对一个个人开发者的 MVP 来说，这是**成本最低的形态**：不用服务器，不用运维，部署就是丢一个静态页面。

架构上，最有含金量的是它的**规则与内容分离**。仓库里有一个专门的内容定义目录，英雄、种族、物品、怪物、配方、关卡——全部以声明式数据的形式写在一堆 Dart 文件里，引擎代码负责解释执行。你想给游戏加一把新剑，不用碰引擎，加一段数据就行。这个思路现在已是标准做法，但 Hauberk 是很早的完整范例，你 fork 下来改数据就能出“你自己的版本”，连内容设计的脚手架都给你搭好了。

渲染这块也值得点名：**Canvas 按字符渲染 + 内嵌字体生成管线**。游戏画面是纯字符，但它不是 `console.log` 打出来的，而是把每个 ASCII 字符当一张 sprite,用 Canvas 批量绘制，仓库里甚至留着几个 `.psd` 字体源文件——作者连“字符长什么样”都是自己画的。这套“字符当贴图”的做法，意味着你**不需要任何美术外包**，找一款等宽字体就能出活。对独立开发者，这是绕开美术资源门槛最经典的路。

还有两个可以直接抄的小组件：

- **速度条驱动的回合调度器**。Hauberk 的回合不是“你一步怪一步”，而是每个角色有能量条，攒满了才能行动。想要“重甲兵每两回合动一次、盗贼一回合动两次”这类设定，改一个数字就行。
- **声明式任务系统**。每层一个 quest 对象，引擎只管“任务没完成不让撤离”，任务本身是什么由数据定义。你想加“击杀所有敌人”“拿到特定物品”“活过 N 回合”之类的新任务类型，加一个类就行。

**复用清单**：随机地牢生成器(房间+走廊+连通性检查)、能量条回合调度器、坩埚合成系统、任务结算制存档——这四样几乎可以原样搬到任何小体量 roguelike 项目里。

## 变现观察

直说：Hauberk 本身没有任何变现痕迹。没有广告，没有内购，没有 itch.io 页面，连 donate 链接都没有。它是 Bob Nystrom 的教学副产品，他的回报是书卖得好、行业声誉高、被 Google 请去造 Dart。这条路对普通人不可复制，也不必复制。

但**它的代码形态本身就是变现素材**。看几个已经跑通的同类路径：

- **同类游戏的付费天花板是真实存在的。** 经典 roguelike 的商业转化案例反复被验证：《像素地牢》的衍生作 Shattered Pixel Dungeon 免费开源，靠打赏和周边养活作者；更激进的 Hoplite、Pixel Dungeon 的iOS付费版直接把免费开源游戏包装成付费 App 卖，而且卖得动。Hauberk 的完成度在“开源 roguelike”里属于上乘，缺的从来不是玩法，是有人把它**从浏览器 demo 变成应用商店里的商品**。
- **“开源地牢引擎 + 自有内容”是一条已被验证的路径。** 免费开源引擎+付费内容包，这个模式在桌游和独立游戏圈都是成熟打法。MIT 协议允许你 fork Hauberk、重新主题化、上架任何平台，连授权费都不用谈。
- **教学内容的钱比游戏本身好赚。** Bob 本人就是活证据：《Game Programming Patterns》免费在线阅读，PDF/纸质版收费，照样是游戏程序员案头书。你若把“用 Hauberk 学做一个 roguelike”做成系列教程或视频课程，变现效率大概率高于游戏本体。

对个人开发者，现实的定价锚点是：浏览器版免费引流(itch.io 上架)，安卓端 1.99-3.99 美元付费下载，或者做皮肤/职业扩展包卖 0.99-2.99 美元。ASCII 视觉风格天然适配“复古像素”定价带，用户对“便宜+耐玩”的组合毫无抵抗力。

## 给我的灵感

**点子一：把结算制死亡 + 食物约束搬到任意题材，做“背包价值赌局”游戏。** Hauberk 最值得抄的从来不是地牢，而是“撤离才落袋”的结算机制。把地牢换成沉船潜水(氧气=食物，探得越深宝越贵，上浮才结算)、换成股市盘中(盈利不落袋，收盘才结算，中途爆仓清零)、甚至换成外卖骑手(接单越多风险越高，回站才算收入)，核心循环一行都不用改。潜水题材国外已经有付费榜常客(如《Depths of Sanity》类)，但**“5 分钟一局的撤离结算 + ASCII 极简视觉”**这个组合，网页端还是空白。MVP 两到三周，变观看网页广告+移动端内购去广告，适合作为第一个上架作品。

**点子二：fork Hauberk,做一款“中文奇幻题材”的结算制 roguelike。** 代码是 MIT 的，引擎现成，你只需要做三件事：把内容定义文件里的西方奇幻名词全部替换成修仙/武侠题材(灵石=货币，丹药=治疗，法宝=装备)、把 ASCII 字符换成中文单字渲染(这反而是个卖点，国内还没人做“中文本身就是像素画”的地牢游戏)、加个排行榜。注意，修仙+放置的组合此前已有开源项目做得不错，但**“修仙+结算制 roguelike”**这个交叉点还空着。MVP 四到六周，主要工作量在内容替换和平衡性调试，适合 itch.io + 移动端双端发，国内侧靠爱发电/afdian 打赏。

**点子三：做“AI 对手版”的 ASCII 战棋，把 Hauberk 的调度器卖给别人。** 如果你的目标是练手+攒作品集而非直接变现，可以把 Hauberk 的能量条调度器+地牢生成器单独抽出来，包装成“ASCII 战棋 AI 对战”的小游戏：玩家布阵，AI 用简单效用函数(血量、距离、威胁值加权)决策。这类“看 AI 打仗”的内容在短视频平台的天然传播力不用多说，游戏本体免费，收益来自流量和赞助。Bob 本人给了明确授权：“fork it, make it your own”——这个库就是留给后人这么用的。

**上手:** 仓库 [munificent/hauberk](https://github.com/munificent/hauberk),在线版 [munificent.github.io/hauberk/](https://munificent.github.io/hauberk/)。装好 Dart SDK,clone 下来 `make serve`,浏览器打开 localhost:8080 就能玩。想改内容，直接翻内容定义目录里的数据文件；想抄机制，地牢生成、坩埚合成、能量条调度这三个模块可以单独拎走。

最后说句题外话。这个仓库 1116 次提交，基本是一个人在周末和深夜攒出来的，如今作者自己都很少再碰。但它留下的不只是 2200 颗星，而是一个信号：**一个好玩的 ASCII roguelike,一个人，利用业余时间，是做得出来的。**至于做出来之后是免费送、卖课程还是上架收 1.99 美元，那就是你和Bob 的区别所在了。

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
