# 我在 Claude Code 里塞了一个地牢游戏，现在写代码就是在闯关

> 龙虾AGI通用实验室 · 2026-04-08

终于可以光明正大地在工作时间打游戏了。

## 起因

事情是这样的。

我每天用 Claude Code 写代码，看着终端底部那个小小的状态栏，看着 spinner 转啊转——"思考中..."、"处理中..."——突然觉得：这东西也太无聊了吧。

Claude Code 有三个可以自定义的机制：**Spinner**（思考时的转圈文字）、**StatusLine**（终端底部的一行状态栏）、**Hooks**（工具调用后的钩子脚本）。官方拿来做什么？显示 token 用量、跑 lint 之类的。

但我看到的是：**一块完美的游戏屏幕。**

Spinner 可以显示氛围文字，StatusLine 可以当 HUD，Hooks 可以触发游戏事件——这不就是一个天然的游戏引擎吗？

于是我做了一件可能有点离谱的事：我在 Claude Code 里塞了一个完整的 **Roguelike 地牢冒险游戏**。

![](images/ddcd0b/img_001.png)

## 什么效果？

你正常写代码，终端底部始终显示你在地牢里的状态：

🏰 B3·古墓遗迹 | ❤️85 ⚔️12 🛡5 | 🪙32 🎒3/6 | Lv.5 | 幽暗走廊

Claude 帮你编辑一个文件？你在地牢里前进了一步。运行一个命令？又前进了一步。然后突然——

⚔️ B3 | ❤️85 ⚡15 | 死循环蛇(♥25) | fight·flee·spell·item

一条死循环蛇挡在了你面前。

你可以输入 !g fight 一剑砍过去，也可以 !g flee 转身就跑，还可以 !g spell 火球 来一发大的。或者——你不理它，继续写代码。5 次工具调用后它自己就走了。

而 Claude 思考的时候，spinner 也变成了地牢氛围：

⏳ 火把噼啪作响中...⏳ 远处有东西在移动中...⏳ 握紧了剑柄中...

有内味了。

## 重点来了：零额外费用

我知道你在想什么："这不是在浪费我的 API 调用吗？"

## 一分钱都不多花。

整个游戏引擎就是一个本地 Node.js 脚本。Hook 触发的是本地脚本，StatusLine 读的是本地 JSON 文件，所有游戏逻辑都在你机器上运行。唯一"搭便车"的是你写代码时 Claude 本来就要调用的工具——但那些调用你不玩游戏也会发生。

游戏命令 !g fight 这些，用的是 Claude Code 的 ! 前缀直接执行本地命令，不经过大模型，不消耗 token，不进入对话上下文。

所以实际上：**你该花的钱一分没多，但多了一个游戏玩。**

## 编程主题的怪物，懂的都懂

这不是一个随便套皮的地牢游戏。里面的怪物全是程序员的老朋友：

**语法蟑螂** — 最弱的怪，打死它就跟改个 typo 一样简单

**空指针幽灵** — 你的物理攻击有 30% 概率直接 miss（NullPointerException 的既视感）

**死循环蛇** — 每回合自动回血，你不快点打死它，它就无限循环下去

**内存泄漏史莱姆** — 越打越肉，每回合 MaxHP+10，拖得越久越打不死

**野生 Bug** — 打着打着可能突然复制出一个分身，Bug 不就是这样吗

**递归巫师** — 血越少攻击越高，就像递归一样越来越深直到 Stack Overflow

**段错误骑士** — 20% 概率暴击打你双倍伤害，毫无征兆，就跟 Segfault 一样

最终 Boss 叫**生产环境守护者**。每回合随机封印你一个技能。打过线上 bug 的人都懂这种绝望。

![](images/ddcd0b/img_002.png)

## 不只是写代码时能玩

你可能会问：不写代码的时候怎么办？总不能为了打游戏去写无意义的代码吧？

放心，我想到了。输入 !g walk 就能手动前进一步。所以你可以：

**写代码时** — 自动推进，写着写着突然遇到怪物，来一场酣畅淋漓的战斗，然后继续写

**不写代码时** — 手动 !g walk 一步步探索，完全可以专心玩游戏

**休息时** — 逛逛商店、看看传承点怎么分配、研究下一次用什么职业

这就是这个游戏最妙的地方：**写代码和打游戏不是对立的，它们是同一件事。**

而且你随时可以 !g off 一键关闭，瞬间恢复正常的 Claude Code，老板来了完全看不出来。!g on 又可以接着玩。

你品，你细品，这是不是**上班摸鱼的终极形态**——你没有在打游戏，你在认真写代码，只不过写代码的过程恰好也在闯地牢而已。

## 它跟 Claude Code 的 Buddy 有什么区别？

Claude Code 官方有个 Buddy 功能——给你养个虚拟宠物之类的。挺可爱，但说实话，互动感太弱了。

CodeDungeon 是一个**完整的游戏**：

**回合制战斗** — 7 种技能、道具系统、装备系统，策略性拉满

**4 个职业** — 战士、法师、盗贼、圣骑士，玩法完全不同

**20 层地牢** — 4 大区域 4 个 Boss，从沉沦矿洞打到火焰深渊

**7 种神秘事件** — 古老的镜子、受伤的冒险者、赌博骷髅……每次选择都有风险

**Permadeath** — 角色真的会死！死了从头来，但传承点让你越来越强

**Roguelike 核心循环** — 死亡 → 传承 → 变强 → 再挑战，永远有"再来一局"的冲动

不是宠物，是冒险。

## 技术上怎么实现的？

其实原理很简单，就三个接入点：

**PostToolUse Hook** — Claude 每次调用工具（编辑文件、跑命令等），Hook 自动触发 engine.js，推进游戏一步

**StatusLine** — 一个脚本读取游戏状态 JSON 文件，渲染成一行 HUD 显示在终端底部

**Spinner** — 把默认的"思考中..."替换成地牢氛围词库

就这么三个东西，拼出了一个完整的游戏。

全部代码大约 1400 行 JavaScript，零外部依赖，纯 Node.js，不用装任何东西。安装就一句 node install.js，卸载也一句 node install.js uninstall。

## 怎么安装？

git clone https://github.com/guoy0701/claude-code-game-CodeDungeon.gitcd claude-code-game-CodeDungeonnode install.js

三步搞定。重启 Claude Code，开始写代码，你就已经在地牢里了。

推荐再设置一下快捷命令，这样就能用 !g 来操作游戏：

# Linux/macOScp g ~/bin/g && chmod +x ~/bin/g# Windows (Git Bash)cp g /c/Users/$USERNAME/bin/g

详细说明看 GitHub 仓库的 README。

## 最后

我一直觉得，最好的工具应该有点人情味。我们每天对着终端写代码，终端回给我们的永远是冷冰冰的日志和报错。

但现在，终端底部多了一行小小的 HUD，告诉你——你不只是在写代码，你还是一个勇者，正在地牢深处披荆斩棘。

当然了，如果你的角色死在了第三层被一只语法蟑螂打死了……那也挺写实的，毕竟我们不都是经常被语法错误折磨吗。

· · ·

**GitHub 开源地址：** https://github.com/guoy0701/claude-code-game-CodeDungeon

Star 一下，然后在你的 Claude Code 里开始冒险吧。

## 写代码就是闯地牢。
