参赛声明:本文参加掘金「1024·新饭碗计划」赛道二·作品征集,参赛作品为「熵减特勤局 Entropy Rangers」(话题:#1024AI时代程序员的新饭碗#)。
在线体验:entropy-rangers.yangchina.cn (打开即玩,纯静态零后端)
开源仓库:atomgit.com/dickeryang/… (Apache-2.0)
摘要:我用 AI 代码智能体独立开发了一款零运行时依赖的 Canvas 塔防游戏「熵减特勤局」,188 个测试全绿、一整局就是一个回归测试用例。本文讲清它解决的真实需求、开源与在线运营现状,以及开源加公众号加打赏这套组合的变现预期。
关键词:AI 编程、vibecoding、Canvas、TypeScript、小游戏、开源、变现、1024
技术栈版本:华为云码道 CodeArts 代码智能体(2026-09 版本)|TypeScript strict(运行时零 npm 依赖)|Canvas 2D|自研 ECS|Vitest 确定性回放回归|实测时间 2026-09 ~ 2026-10
写在前面:我的 Plan B 是造作品,不是换赛道
10 月 21 日掘金上线了「新饭碗计划」,AI 时代程序员的新饭碗在哪里,这个话题我认真想过。白天我在公司码砖,答案不敢押在"换个行业"上,而是押在一个更具体的动作上:用 AI 把完整工程作品造出来,开源、上线、挂在个人品牌下。
过去一个月我真的干了这件事:让华为云码道的 CodeArts 代码智能体独立开发了一款纯浏览器策略小游戏「熵减特勤局」。全部代码由 AI 生成,我负责定架构、出验收、调平衡——开发加调参大约 21.5 小时,按经验估算纯手写要 10 天左右,工期压到约四分之一。成品零运行时依赖、gzip 后约 29KB、188 个测试全绿,已开源在 AtomGit 并部署上线。
这篇文章就是这次"造饭碗"的完整复盘:作品是什么、解决了什么真实需求、现在运营得怎么样、能带来什么变现预期。所有数字都是实测值,仓库状态如实交代——它刚上线,Star 还只有 1 个,我不打算编一个漂亮的运营故事。
一、作品本身:部署改变流场,一局就是一个测试用例
「熵减特勤局」是一款塔防式即时策略游戏:在网格化机房部署守护进程,抵御熵潮(错误数据流)对核心服务的侵蚀。核心策略一句话说得清——部署改变流场,流场决定战局:你放下的每一座防火墙都会实时改写敌人的寻路流场,路线变化在画面上直接可见。
功能一览:
| 模块 | 功能 |
|---|---|
| 玩法 | 4 种守护进程 × 4 种熵潮 × 8 关(含引导关),部署即改写 BFS 流场 |
| 胜负期望 | 按"防御有效输出 × 路径覆盖率 vs 剩余威胁"实时评估守住的把握 |
| 回放系统 | 指令流 + 种子完整重放任意一局,失败可跳转到击穿时刻的战场快照 |
| 本地存档 | localStorage 存关卡进度与最佳完整度,唯一存储、无任何网络请求 |
选中守护进程进入部署模式,悬停格高亮合法性并预览射程圈;部署防火墙的瞬间,熵潮的行走路线被整条改写:
守住有结算,守不住也有说法——失败自动弹出「防线击穿时间轴」,标注首次受击、完整度跌破 50%、终局三个节点,点击可跳回该时刻复盘补防:
二、它解决的真实需求:不是"又一个 demo",而是三件具体的事
赛道二要求讲清楚作品解决的真实需求。这款游戏的需求分三层,一层比一层实际。
第一层,它先是一款能完整玩通的游戏。 8 个关卡有难度曲线、有存档、有失败复盘,不是逻辑糊在渲染循环里、刷新就重来的生成式 demo。游戏是所有品类里工程差距最大的:多数 AI 一次性生成的游戏代码魔法数字满天飞、不可测试,所以我刻意选它当试金石。
第二层,它验证了一个具体问题:AI 代码智能体能交付"完整工程"的上限在哪里。 我给它的不是"帮我写个游戏",而是可验收的工程约束——纯逻辑层禁 DOM、确定性四纪律、覆盖率分级门槛、10 道 CI 门禁。最终交付物通过了全部验收,这件事本身比游戏好玩与否更有信息量:AI 缺的从来不是写代码的能力,是"被验收"的纪律,而纪律可以由人来定义。
第三层,它沉淀了一套可复用的方法论:「回放即测试」。 因为模拟是确定性的,一整局游戏(指令流 + 种子)就是一个回归测试用例——预录三条标准局(胜/负/险胜)进 CI,任何破坏确定性或平衡的改动立刻变红。"游戏能完整跑通"从一句口头承诺变成了一条机器断言。这套思路可以搬到任何确定性模拟场景:策略验证、物理仿真、金融回测。
三、支撑"作品质量"的三个工程决策
这节不展开完整架构(那够写另一篇长文),只讲三个直接支撑"完成度"评价的决策,每个都有取舍。
3.1 决策一:ECS + 逻辑渲染彻底分离
直觉写法是每个塔/敌人一个 class 互相持有引用,但塔防实体关系是网状的,class 网会纠缠成不可测的泥球。我用 ECS:实体是 ID、行为在 System、数据在 Component,并立了一条硬纪律——sim 层不 import render 层与任何 DOM API。这直接换来一个能力:同一份模拟可以无头跑,回放测试因此成立。
3.2 决策二:固定步长模拟 + 确定性四纪律
【我为什么不用"rAF 每帧模拟一步"的直觉写法】144Hz 屏上游戏会快 2.4 倍,切后台回来瞬移;而"按 dt 变步长"的浮点累计误差会让回放永远对不上。所以模拟恒定 1/60s 步长,渲染可变并做插值:
// src/engine/loop.ts(节选)——纯逻辑部分,可单测
export const FIXED_DT_MS = 1000 / 60;
/**
* 模拟恒定 1/60s 步长;渲染每帧用 alpha 做状态插值;
* 后台返回最多补 10 步,超出按快进丢弃积压(显性架构决策)。
* 【确定性纪律】sim 层禁止读时钟——performance.now 只允许出现在 rAF 壳一处。
*/
export function planTick(accumulatorMs: number, maxCatchupSteps = 10): LoopTick {
const raw = Math.floor(accumulatorMs / FIXED_DT_MS);
const simSteps = Math.min(raw, maxCatchupSteps);
const catchingUp = raw > maxCatchupSteps;
const consumed = catchingUp ? 0 : raw * FIXED_DT_MS; // 快进时清空积压
return {
simSteps,
catchingUp,
interpolationAlpha: (accumulatorMs - consumed) / FIXED_DT_MS,
};
}
确定性不靠自觉,靠四条纪律加机器把守:随机一律走注入的 Rng(ESLint 自定义规则禁 sim 层 Math.random)、系统执行序固定、模拟层禁时钟、资源与伤害全整数结算。
3.3 决策三:回放即测试——把"能玩"变成断言
手玩一局导出回放 JSON(指令流 + 种子 + 数值表哈希),无头重放并与基线逐位比对。这套机制在仓库里的形态是一条测试命令:
$ npx vitest run src/replay
✓ 回放回归(防退化)(3)
✓ standard-win: outcome=victory, stateHash=581952af
✓ standard-lose: outcome=defeat, stateHash=3f42ed1c
✓ standard-close: outcome=victory, stateHash=604d2feb
✓ 回放确定性(3)
✓ 同一 ReplayData 播放两次 stateHash 一致
✓ 指令乱序注入(tick 逆序)与顺序播放结果一致
✓ balanceHash 校验(3)
✓ balanceHash 不匹配 → 抛 BalanceMismatchError
Tests 18 passed (18)
这条输出同时是三样东西:回归测试(改坏即红)、游戏能完整运行的机器证明、Bug 复现协议(玩家附上指令流即可精确复现)。
四、目前的运营情况:刚上线,但底座是工程化的
先如实交代:作品 2026-09-17 建仓、2026-10-11 完成最后一轮迭代上线,到现在是一个刚满月的早期作品。AtomGit 公开仓库目前 1 个 Star、0 Fork、0 Issue——数字很小,但每一个都是真实的。
开源与在线,两条触点都通了:
- 在线玩:entropy-rangers.yangchina.cn —— 纯静态部署,没有后端、没有数据库、没有任何遥测,打开即玩;
- 看代码:atomgit.com/dickeryang/… —— Apache-2.0 协议,22 个 commit 全程可追溯,仓库首页直接挂了体验地址。
虽然用户数据还在起步,但工程质量数据是满格的,这也是我对"作品完成度"的底气所在:
| 指标 | 实测值 |
|---|---|
| 测试 | 188 用例全绿(engine 27 / sim 99 / replay 18) |
| 覆盖率 | sim 87.12% / replay 82.51% / engine 79.53%(核心逻辑层口径) |
| 确定性回归 | 3 条标准局回放基线,终局哈希逐位比对 |
| 性能基线 | 3000 步无头一局模拟 20.46ms |
| 产物体积 | gzip 后约 29KB,静态文件 |
| 运行时依赖 | 0 个 npm 包(CI 门禁强制) |
| 质量门禁 | npm run ci 共 10 道门禁,本地与 CI 完全一致 |
npm run ci 这 10 道门禁里我最看重两道:一道守"零依赖不变量"(谁往 dependencies 里加包就红,保住"零依赖"这个卖点),一道守确定性(sim 层出现 Math.random、时钟读取直接拦截)。运营一个开源作品和运营一个服务一样,靠的不是热情,是让"变坏"这件事自动化地暴露。
五、变现经历与预期:我如实交底
赛道二还要求讲变现经历或预期效果,这节我全部说真话。
当前直接收入:0 元。 熵减特勤局没有广告、没有内购、不打算做收费版,README 里写明了"如果它给你的某个下午添了一点乐趣,欢迎打赏一杯咖啡"。上线至今打赏收入为零,我完全接受这个结果——因为从一开始,这个作品的变现路径就不是"卖游戏"。
我的变现模型是三层漏斗,作品是入口,不是商品:
- 作品层(建立信任):一个开源、带完整工程门禁、可在线验证的作品,是"AI 时代我还保有工程能力"的实物证据。它比简历上任何一句话都可信;
- 内容层(流量转化):围绕作品产出系列技术文章(本文就是其中一篇),文章带来阅读与关注,沉淀到我的公众号「行者架构谈」;参与活动本身也是流量事件;
- 机会层(间接变现):作品与内容组合起来,指向的是 AI 协作开发的咨询、接单、企业内训这类"新饭碗"机会。打赏二维码放在那里,更多是一种姿态:我的产出对得起一杯咖啡,但我真正想经营的是信任。
微信打赏:请作者喝一杯咖啡
预期效果的边界我也说清楚:打赏和流量对个人品牌是长线投入,短期看不出收益曲线;这套漏斗里真正可能规模化的是"用 AI 完成完整工程"的方法论本身——它正在通过系列文章获得验证。如果本文有幸进入活动评选,掘金的 5w 矿石参与奖会是这个作品的第一笔"平台变现",我会更新在这里。
六、踩坑实录:AI 写对了九成,剩下一成靠人
全程记录开发中真实发生的问题,每个都带修复过程。
1. 一行浮点乘法,让回放第一次变红
现象:回放回归首次接入时,同一条标准局两次重放的终局 stateHash 不一致——确定性真的破了。
根因:经济系统的出售返还写成了 credits * 0.7,浮点乘法在两次运行中舍入路径不同,整数结算纪律被一行代码破坏。
解决:改成 (credits * 7) / 10 的整数运算(先乘后除),并补 ESLint 规则禁止 sim 层对金额类变量做浮点运算,回放转绿。
感受:这个坑反过来证明了回放测试的灵敏度——一行浮点都能被哈希抓住。确定性不是设计出来的,是测出来的。
2. AI 会"顺手"破坏你没盯着的约束
现象:AI 生成的分裂体敌人死亡分裂用了 Math.random,另一处系统里写了 Date.now() 做耗时统计。都能跑,肉眼看不出版本差异,但回放立刻漂移。
根因:AI 不会主动维持你没反复强调的全局约束——"就一个随机数"在它的局部视角里完全合理。
解决:固化一条修错话术:不得通过删减确定性断言来让测试通过,修复方向只能是把随机改经注入的 Rng、时间来源改为注入;修复后回放回归必须全绿。再把禁令写进 ESLint 自定义规则,由 CI 兜底。
感受:AI 的产出质量等于"你把约束写得有多可验收",这句话在这一个月里被反复验证。
3. 切后台回来"录像带快进"
现象:标签页切走几分钟后切回,敌人位置瞬间跳到"未来"。
根因:rAF 在页面不可见时停摆,恢复后累积了数千毫秒 delta;planTick 里追帧上限的设计是对的,但 rAF 壳没接对——纯逻辑层的防御,薄壳层没接上等于没有。
解决:追帧上限 10 步 + 超限快进丢弃积压,恢复时清一次累加器;验收从此要求跨层走一遍。
感受:单测全绿不等于功能正确,"可测的纯函数"和"不可测的薄壳"的交界处是 bug 高发区。
七、提效数据:21.5 小时干完预估 10 天的活
基于开发日志的实测耗时(个人单项目样本,仅供参考):
| 开发阶段 | 纯手写预估 | AI 辅助实际 | 提效来源 |
|---|---|---|---|
| ECS 内核 + 双循环 + 单测 | 约 2 天 | 约 3 小时 | 结构清晰的纯逻辑是 AI 最强区 |
| 网格流场 + 最小可玩闭环 | 约 2.5 天 | 约 4.5 小时 | 算法 + 边界穷举,一次过审率高 |
| 回放系统 + 全部单位 | 约 2 天 | 约 4 小时 | 数据驱动设计让实现即翻译 |
| Canvas 渲染 + 部署交互 | 约 2 天 | 约 5 小时 | AI 写结构,手感调优靠人 |
| 关卡调参 + 复盘 + 收口 | 约 1.5 天 | 约 5 小时 | 回放工具让调参可验证 |
| 合计 | 约 10 天 | 约 21.5 小时 | 工期约为传统方式的四分之一 |
两点如实说明:纯手写预估基于经验估算,有主观误差;数值平衡的时间没有被省——"回放验证、人工微调"的循环跑了三轮才达到想要的手感,这部分是游戏品类特有、AI 替代不了的时间。
八、总结:新饭碗的答案是"作品"
回到活动的问题:AI 时代程序员的新饭碗在哪里?我的答案是——AI 接管的是打字,接不走的是定义问题、定验收标准、为结果负责这三件事。 这次实践里,我的角色从"写代码的人"变成"定纪律的人":定架构、写验收、调平衡,AI 负责九成的实现。工期四分之一、188 个测试全绿、零依赖开源上线,就是这套分工的实测成绩。
作品链接再放一次,欢迎上手体验并看看代码:
- 在线体验:entropy-rangers.yangchina.cn (打开即玩)
- 开源仓库:atomgit.com/dickeryang/… (Apache-2.0,含回放基线与 10 道 CI 门禁)
互动讨论
你也在用 AI 做完整的工程作品吗?三个问题想听听掘友们的看法:
- 你用 AI 做过最"完整"的一个作品是什么,卡在哪里?
- 你觉得 AI 作品的变现,卖作品、卖内容还是卖能力更靠谱?
- 如果让 AI 独立开发一个游戏,你会怎么给它定"能玩"的验收标准?
评论区聊聊,我会认真回复每一条。
觉得有用就点个赞、加个收藏。下一篇预告:《回放即测试:把确定性模拟的工程方法搬进你的业务系统》,感兴趣的关注一波。