我让女儿画了logo,然后用AI提取每个字母放进我的作品里。她写S和Z的时候总是写反的,哈哈。
过去六个月里,我一直在开发Hookah House——一款舒适的水烟 lounge 经营模拟游戏(安排客人→接单→准备烟碗→添炭火→收钱→扩张 lounge)。Claude Code 是我的主要开发伙伴。Steam页面已于四月上线。因为这个版块关注的是工作流程而非单纯的结果,以下是我机器上的实际数据。
数据记录(2月27日 → 8月31日):
- 1181次提交
- 约20.5万行GDScript代码,分布在1084个文件中
- 1877个单元测试,每次改动都会在无头模式下运行
- 132次Claude Code会话
- 模型实际输出的token数达7700万
- 总处理token数187亿(差额来自提示缓存读取;上下文才是真正的成本)
技术栈:
- 引擎: Godot 4.4(GDScript,Forward+渲染)
- 开发代理: Claude Code,配合CLAUDE.md中的项目规则、用于引擎陷阱的持久内存文件,以及自定义子代理(编译/测试验证器、视觉探针、网页导出守卫、存档迁移审计器)
- 3D资产: Meshy + Tripo(文本/图像→3D),Mixamo动画重定向到统一骨骼,在Blender中清理
- 音频: ElevenLabs音效,经LUFS标准化后分配到音频总线
- 后端: 一个Cloudflare Worker(实时玩家计数)
- 持续集成: GitHub Actions,运行与本地相同的无头编译+测试套件
真正奏效的做法:
- 让代理自我验证。 一次停止钩子会在代理触碰任何脚本时,编译所有约800个游戏脚本(约9秒)并运行完整的1877个测试套件(约12秒)。它不能在代码有问题的状态下结束一次修改。单凭这一点对质量提升的效果就超过任何提示工程。
- 持久记忆。 每次遇到的引擎陷阱(无头模式下的误通过、导航网格雕刻导致玩家卡住、glTF导出场景泄露)都会被写入记忆文件,这样它就不会重复学习同样的教训。六个月后,这基本上成了它为自己编写的私人“Godot避坑指南”。
- 一切数据驱动。 家具、口味和装饰品都存放在JSON目录中,因此新内容只是数据而非代码,代理无需触碰系统就能添加物品。
- 用模拟而非感觉来平衡。 在允许任何平衡数值修改之前,一个无头模拟器会运行完整的游戏天数,并与“感受区间”进行差异对比。
让我踩坑的教训:
- 生成式3D没有免费重试。 一个视觉上已经损坏的生成结果仍然会报告“成功”并全额收费。现在每个资产都会在仓库中保留其提示词和参考图像,这样重做是一个决策,而非本能反应。
- 无头引擎测试会说谎。 崩溃的协程仍可能打印“全部通过”,变换不会传播,蒙皮姿态需要逐骨骼的数值检查。我的工具中相当一部分纯粹是为了捕捉假阳性。
- 代理会愉快地花掉你的钱。 我的项目说明中现有一条硬性规则:“未经每次调用许可,绝不花费积分。”别问我是怎么知道的。
如果你想看看这些token换来了什么,这是游戏页面:https://store.steampowered.com/app/4607750/Hookah_House/(愿望单对独立开发者真的很有帮助)。网站:https://hookahhousegame.com
欢迎深入探讨工作流中的任何部分:钩子、子代理、记忆设置、资源管线或成本。
评论 (0)