Claude Code更新 Opus 4.8 之后,新增了 dynamic workflow 功能,想着写个什么东西看看效果。然后就选了「搜打撤」(Search → Strike → Extract,撤离类射击)。
最初的命令只有一句话
# 切换到ultracode,开启dynamic workflow
/effort ultracode
# 使用goal制定目标
/goal 请你自行设计完成一个web端的“搜打撤”的2D游戏,要求可玩性高、功能完整具备小游戏平台上架的能力
新功能dynamic workflow
40分钟后游戏已经开发好了
40 分钟里发生了什么
所谓 40 分钟,是指从空文件夹到第一个能在浏览器里完整跑一局的版本。后面的美术重做、双语、世界观都是在这个雏形上叠的。第一版一次成型就有 4755 行。
节奏大概是这样:
先有骨架。它先把状态机和渲染循环立起来——开场 → 基地 → 配装 → 部署 → 局内 → 结算,整个游戏的"壳"先转起来,再往里填肉。
再有"打"。敌人 AI 是我最担心的部分,结果它直接上了一个四态状态机:patrol(巡逻)→ alert(听到动静去查)→ combat(开火)→ search(丢失目标后到最后已知位置搜一圈再放弃)。配套的是视线射线检测(LOS raycast)和听觉——你开枪,附近的敌人真的会听见并循声而来。寻路是 A*。这些都是它自己加的,我没逐条要求。
然后是"搜"和"撤"。容器要按住搜刮、有进度条;撤离点是地图上的绿色 ▲,站进去扛过倒计时。装备的生命周期也对了:部署时从仓库扣除,撤离成功归还,死亡则永久丢失——还贴心地给了一套"白嫖"的免费 Husk Dive 套装做保底,但要收战利品税,免得被无风险刷。
最后跑测试。node tools/smoke.js 会把 DOM / canvas / localStorage 全部桩掉,无头跑一遍:地图生成、完整战斗、搜刮、撤离、死亡、经济系统、每一个 UI 界面、移动端触控 HUD、损坏存档恢复,外加一个 20 局的压力测试。一个晚上的产物,自带回归测试。
几个让我"这也行?"的细节
写完回看,有几处是真的超出预期:
美术全是代码画的。 没有一张 png。js/sprites.js 一个文件就是所有视觉的唯一真相——角色、敌人、枪械、容器、图标,全在运行时用 Canvas 绘制。后来想换风格,直接让它把整套换成「螃蟹(Clawd)+ 珊瑚」主题,改一个文件就全局生效。
音效是合成出来的。 用 Web Audio API 的振荡器实时生成枪声、脚步、提示音,没有一个音频文件。还正确处理了浏览器的自动播放策略——首次交互才解锁,切回标签页自动恢复。
地图用种子 RNG(mulberry32)生成。 可复现的程序化地图,每个站点三档风险。
移动端是真的能玩,不是缩放凑数。 左摇杆移动、右摇杆瞄准并开火,屏幕按钮管冲刺/搜刮/换弹/治疗/换枪/背包;HUD 还避让刘海和底部 Home 条(safe-area)。键鼠活动会自动切回桌面模式,触摸又切回去——这种"我都没想到要说"的边角它替我想了。
中英双语,能实时切换。 所有文案在 js/i18n.js,跟着浏览器语言走,菜单里点 EN / 中 当场切换并记住。加一门语言 = 往目录里再加一块。
还顺手有了世界观。 收尾时我让它给游戏套个故事——「珊瑚潮」:大白化之后海水淹没旧世界,活珊瑚「绽放」唤醒了蟹群,你是退潮时下潜废墟、抢在涨潮封口前带着战利品上浮的"潮行者"。妙的是它只换皮不动引擎——枪变成旧世界打捞物、局时变成上涨的潮水、还给商人「海螺」加了一条契约任务线——零引擎改动。
数字总结
| 总代码 | 6084 行(HTML/CSS/JS) |
| 第三方依赖 | 0 |
| 美术 / 音频素材文件 | 0(全程序化 + 合成) |
| 构建步骤 | 0(双击 index.html 即玩) |
| 平台 | 桌面 + 手机 |
| 语言 | English / 简体中文 |
| 自带测试 | 无头烟雾测试,覆盖到 20 局压测 |
几点体会
现在大模型的能力越来越强了,从一句话到浏览器可玩的小游戏,只用了40分钟,而且期间不需要人工介入。
dynamic workflow 用下来的体验还是很不错的,目标拆分任务,根据任务拆分agent、大任务拆小任务、小任务subagent并行处理,根据任务复杂程度为subagent分配不同的模型。
目前正在逐步的删除之前沉淀下的工作流,现在的模型能力已经可以考虑的很全面了,之后的重点都在约束和边界的制定上。
Claude Code用40分钟做的搜打撤游戏体验地址:https://zzusp.github.io/search-strike-extract/


