一段需求、零素材,Claude Code 派了 33 个代理给我做了个 3D 动作游戏

约13分钟阅读 AI
AI

上一篇折腾火柴人的时候,最大的坎是素材:Claude 没有生图模型,Blender 建模也翻了车。这次我换了个游戏来做,需求里没提素材的事,Claude 自己在架构文档里定了一条规矩:不用任何外部素材,一张图片、一个模型文件、一段音频都不要,全部用代码生成。

结果真让它做出来了。这个游戏叫《云海神殿》,跑在浏览器里,第三人称 3D 动作加解谜,五个章节加一个 Boss,从主菜单一路能打到通关画面。里面所有的模型都是代码拼出来的几何体,贴图是程序画的,音效和背景音乐是 WebAudio 实时合成的,整个仓库里没有一个素材文件。

先把成品放在这里:游戏部署在 Cloudflare 上了,可以直接点击体验。建议用电脑上的 Chrome 打开,键盘加鼠标操作,最好戴上耳机。

《云海神殿》的主菜单,左侧是金色的标题和菜单项,背景是黄昏下的神殿门廊,主角单膝跪在地面的金色符文阵中央

刚开始游戏时的苏醒庭院,画面中央浮出「第一章 · 苏醒庭院」的标题卡,远处的太阳从门廊后面逆光照过来

我给它的需求

这次我没有写 PRD,而是直接写了一段比较完整的需求丢给它:用 three.js 做一个第三人称 3D 动作解谜闯关游戏,画面要黄昏逆光、有体积雾和光柱,能互动的东西发青绿色光,敌人攻击前有橙红色预警;操作是 WASD 加鼠标,J 轻攻击、K 重攻击、L 闪避;要有二段跳、一整套连招、推方块、转镜子引光束、只有特定招式才能激活的符文,敌人有机械虫群、符文法师、石像守卫和一个 Boss,关卡分五段,每段都有检查点。

完整的需求原文
使用 three.js 做一个第三人称 3D 动作解谜闯关游戏,在桌面浏览器里运行,用键盘和鼠标操作。
【画面】
- 风格化写实,画面精致、有氛围:黄昏逆光、柔和阴影、体积雾和光柱、发光符文、空中漂浮的尘埃
- 场景是漂浮在云海上的古代机关神殿,远处有高塔、巨像等地标
- 能互动的物体统一发青绿色光;敌人攻击前有橙红色预警
- 攻击有刀光拖尾、命中火花、受击闪白、镜头震动和顿帧
- 稳定 60 帧
【操作】
- WASD 移动,鼠标控制视角
- Space 跳跃,在空中再按一次是二段跳
- J 轻攻击,K 重攻击(按住可蓄力),L 闪避(按住是冲刺)
- E 交互,Q 锁定敌人,Esc 暂停
【二段跳】
- 二段跳有空翻动作,脚下有气浪特效
- 按住 Space 跳得高,轻点跳得低
- 刚走出平台边缘的一瞬间仍然可以起跳
- 在空中可以闪避一次;空中攻击打中敌人后,可以再二段跳一次
【连招】
- J J J J:四连斩,最后一击把敌人击退
- J J K:挑空斩,把敌人打上天,然后可以跳起来追击
- 按住 K 蓄满再松开:蓄力斩,能破防,也能击碎有裂纹的墙
- K K K:旋风斩,攻击身边一圈
- 冲刺中按 K:突刺
- 闪避后马上按 J:突进斩
- 空中 J J J:空中连斩
- 空中按 K:下劈,落地时产生冲击波
- 在敌人攻击快要打中时闪避:完美闪避,触发短暂的慢动作,之后按 J 可以反击
【解谜】
- 推方块压住开关
- 转动镜子,把光束引到水晶上
- 会移动或会消失的平台,要用二段跳和空中闪避才能过去
- 必须用特定招式才能激活的符文:下劈激活地面符文,旋风斩同时点亮一圈符文,蓄力斩击碎水晶
- 解谜要和战斗结合,例如把敌人引到压力板上、用挑空斩把方块打上高台
【敌人】
- 机械虫群:数量多,但很脆弱
- 符文法师:远程攻击,会瞬移
- 石像守卫:正面举着盾,需要用蓄力斩破防,或者绕到背后打
- Boss 神殿守门者:身上有护盾,要解开光束谜题,把光反射到它身上才能破盾
【关卡】
一个完整关卡,大约 15–20 分钟,分为 5 段:
1. 苏醒庭院:学习移动、跳跃、二段跳和推方块
2. 断桥回廊:移动平台,第一次战斗
3. 光之大厅:光束谜题,对战符文法师
4. 守卫之门:招式符文,对战石像守卫
5. 核心圣所:Boss 战
每一段都有检查点,死亡后从检查点重新开始。
【界面与声音】
- 主菜单;暂停菜单里有连招表、按键设置、画质和音量
- 屏幕上显示血量、锁定标记、连击数和交互提示
- 有音效和背景音乐,进入战斗时音乐会变紧张

three.js 是一个基于 WebGL 的开源 JavaScript 3D 库,MIT 协议,浏览器里那些 3D 产品展示、数据可视化很多都是用它做的。它只管渲染,物理、碰撞、动画状态机、音频这些游戏需要的东西都得自己写,所以这个需求对 AI 来说其实不轻松。

这段需求我前后一个字都没改过,后面我做的事情基本就是两件:看它跑,撞到额度上限之后回来敲一句「继续」。

先看成品:五个章节

苏醒庭院

第一章是教学关。主角在一个金色符文阵上醒来,一路往前走,依次学移动、跳跃、二段跳和推方块。远处一直挂着一个巨大的光环,那是最后一章核心圣所的位置,越往后走离它越近。

苏醒庭院的高台,两侧垂着粗铁链,前方是逆光的门楼,脚下是云海和漂浮的岩石

这一章最后有两个推方块的谜题。其中一个压力板需要重量至少为 2,玩家自己站上去只会提示「太轻了……也许可以把方块推上去」,这个「重量」的概念后面第四章还会用到。

断桥回廊

第二章是一座断掉的回廊桥,要坐移动平台渡过 12 米的缺口、坐升降台爬上悬崖、踩三块会周期性消失的平台,最后是一个 10.75 米的缺口,单靠二段跳过不去,必须在空中再按一次 L 闪避才能飞过去。

断桥回廊西侧的拱门口,两只火盆框出去路,地上有一圈金色符文,远处是云海和浮岛

中间是第一次战斗:一个广场,两侧铁门关上,先来 5 只机械虫,再来 7 只。打完之后是一个挑空斩谜题:压力板在一座 4 米高的堡垒顶上,人跳不上去,方块放在堡垒脚下的石台上,要用 J J K 把方块打上去压住压力板,才会从云里升起一座桥。

挑空斩谜题,带青绿色符文边的方块放在高台脚下的石台上,屏幕下方提示「J J K 挑空斩 可以把方块打上高台」

光之大厅

第三章是一个有屋顶的大殿,阳光只能从几个圆形天窗和门洞照进来。这里的谜题是转镜子:按 E 镜子转 45 度,把透镜收集的阳光反射到水晶上,水晶亮了门才开。后半段有一个中继水晶,被点亮后会把光再转发出去,同时会召唤两个符文法师来捣乱。

光之大厅后殿,两道光束在昏暗的大殿里折射,柱子之间有一束束从天窗打下来的光柱

守卫之门

第四章全是「只认特定招式」的机关:地面符文只认下劈的冲击波,一圈六根符文柱只有旋风斩能同时点亮,封印水晶和裂墙只有蓄力斩打得碎。然后是石像守卫,它正面举着盾,普通攻击打上去会被弹开。

守卫之门的平台,前方是一圈带青绿色光纹的符文柱,屏幕下方提示「K K K 旋风斩 同时点亮一圈符文」

章末是需求里那条「把敌人引到压力板上」:大门前有一块重压力板,最低重量 4,玩家只有 1,站上去没用。要做的是把第二个石像守卫引过来,让它追你的时候踩上去,压力板会锁定,大门就开了。

守卫之门尽头的巨门,门上刻着金色的符文圆盘,两侧立着石像

核心圣所

最后是 Boss 神殿守门者,一个 7 米高的石头加金饰的巨像,胸口有个发光的核心,全身罩着一层金色的六边形护盾。护盾在的时候所有攻击都会被挡掉,要做的是转动竞技场边上的镜子,把阳光反射到它身上,累计照够时间护盾才会碎。

神殿守门者被金色的六边形护盾罩着,屏幕下方提示「金色护盾挡下一切攻击——转动镜子,把阳光引到守门者身上」

战斗:需求里的招式都做出来了

需求里列的那一串招式,最后全部做了出来,而且都有各自的手感参数:出招、判定、收招的时间,顿帧多长,镜头震多少。

先看最基础的四连斩。刀光拖尾、命中火花、敌人受击闪白、右边的连击数,都在这几秒里:

主角对着三只机械虫打出四连斩,刀光划出白金色的弧线,虫子被打得闪白,右侧连击数从 2 跳到 8

二段跳有空翻,脚下会炸开一圈气浪,落地有尘土:

主角原地起跳,在最高点再按一次跳跃,身体前空翻,脚下炸开一圈白色气浪

挑空斩接空中连斩,虫子被打上天之后,按 Space 跳起来追着砍:

主角用挑空斩把一只机械虫打上天,随后跳起在空中继续挥刀

效果最明显的是完美闪避。虫子扑过来之前地上会先亮一块橙红色的预警,在快被咬到的瞬间闪避,画面会变慢变蓝,弹出「完美闪避」,原地留一个残影,这时候按 J 就瞬移过去反击:

机械虫扑咬前地面出现橙红色的扇形预警,主角在最后一刻闪避,画面进入蓝色的慢动作并显示完美闪避,随后反击

锁定(Q)、蓄力时脚下的光环、被盾挡住时的蓝色火花和后弹,这些需求里没写细节的地方它也都补上了。

解谜:用招式开机关

镜子谜题。站在镜子旁边按 E,镜子转 45 度,光束拐弯打到水晶上,水晶亮起,远处的符文门也跟着亮了:

主角站在镜子旁按下 E,镜子转动后光束拐向右侧的水晶,水晶和后方的符文门依次亮起

下劈激活地面符文。原地起跳、空中按 K,落地的冲击波扫过地面符文,符文变成白金色,旁边的平台跟着升起来:

主角跳起后空中下劈,落地的冲击波扫过青绿色的地面符文,符文变成白金色,旁边的石台缓缓升起

旋风斩点亮一圈符文柱。六根柱子必须在 0.35 秒内全部被打到,只有旋风斩那一圈能做到:

主角站在一圈符文柱中央连按三次 K,最后一下旋风斩扫过所有柱子,六根柱子同时亮起并爆出光芒

蓄力斩击碎裂墙。按住 K 的时候脚下的光环会越来越亮,蓄满松开,墙碎成一地石块:

主角面对一面布满青绿色裂纹的墙按住 K 蓄力,脚下的金色光环逐渐变亮,松开后一刀劈出,墙碎成石块

Boss 战

Boss 每隔一段时间会走回竞技场中央的基座上「汲取核心」,这时候它站着不动,是把光引过去的最好时机。镜子调对之后,光束照到它身上,护盾会一点点充能,满了就碎,然后它会跪下来硬直几秒,这是输出窗口:

神殿守门者走回竞技场中央汲取核心,经过镜子反射的光束照在它身上,护盾碎裂,巨像跪倒在地

血量打到一半进入第二阶段,它会把镜子重新打乱、召唤一个符文法师,攻击也会变快。打赢之后是通关画面,会显示用时、倒下次数和最高连击。下面这张是用调试命令直接触发的,所以用时只有 3 秒:

通关画面,「通关」两个字下面列着用时、倒下次数和最高连击,背景是核心圣所和天上的光环

界面

暂停菜单里有需求要的连招表、按键设置、画质和音量。连招表上的按键是根据当前的键位绑定生成的,改了键这里会跟着变:

暂停菜单的连招表页面,左边是分页,右边按轻击连段、重击分组列出每个招式的按键、说明和伤害

暂停菜单的按键设置页面,移动和战斗互动两组键位各占一列,下面是鼠标灵敏度、镜头震动和反转 Y 轴的设置

它是怎么做出来的

这次用的是 Claude Code 里的多代理工作流,模型是 Opus 5.5。这个规模的项目不可能一个会话从头写到尾,上下文根本装不下,所以它的做法是先拆,再并行,再合。

先写一份「合同」

动手之前,它先写了两份文档:ARCHITECTURE.md 和 GAME_DESIGN.md。前者规定了每个模块叫什么、暴露哪些接口、事件叫什么名字、哪个文件归谁管;后者是所有数值,比如跑速每秒 7 米、跳跃初速度、二段跳能跨多宽的缺口、每个招式的伤害和顿帧,以及五个章节的坐标范围和检查点位置。

这两份文档后面会发给每一个代理,它们之间不能直接沟通,靠的就是这份「合同」。

地基:一个代理先把骨架搭起来

第一步只派了一个代理,写核心循环、物理、命中判定、关卡框架和测试工具,然后给其余所有模块各写一个能跑的「桩」:渲染只有一个渐变天空,主角是一个胶囊体,敌人是会追人的方块。这样不管后面哪个模块没做完,游戏都能启动。

写完之后再派两个代理去审:一个对着合同逐条核对接口,一个专门跑物理和战斗的边界情况。它们找出了 23 个问题,比如检查点只在 3 米范围内才触发、宽走廊里贴边走就会错过,再由一个代理统一修掉。

八个系统并行

地基好了之后,渲染、特效、音频、玩家与镜头、角色模型、敌人、谜题、UI 这 8 个模块同时开工。每个代理在自己的 git worktree 里干活,只能改自己名下的文件,看到的其他模块全是桩,所以只能严格按合同写接口。做完之后 8 个分支合并回主干,因为文件互不重叠,一次冲突都没有。

接下来再派一个集成代理,把 8 个模块之间的接口问题收拾干净,比如角色模型挥刀最快的那一帧,要和招式判定生效的那一帧对上。然后三个内容代理同时开工:一个做第一、二章,一个做第三、四章,一个做第五章和 Boss。

两轮 QA

做完之后是两轮测试。第一轮派了 4 个代理,分别从「能不能通关」「战斗手感」「画面和性能」「界面和音频」四个角度去玩;第二轮换成「第一次玩的玩家」「美术总监」「专门找茬」三个角度。它们会写机器人脚本,用真实的键盘事件去打怪、跳台子、解谜,测出问题再交给修复代理。

最后一共跑了 33 个代理,整理一下大概是这样:

阶段代理数耗时子代理 token
地基4约 1.6 小时约 145 万
八个系统(第四次才跑完)8约 39 分钟约 151 万
集成 + 五个章节 + Boss4约 2.2 小时约 165 万
第一轮 QA8约 2.7 小时约 164 万
第二轮 QA7约 2.9 小时约 136 万
最终集成与独立复核2约 1.7 小时约 42 万

前面三次被额度打断的那几轮还另外烧掉了不少,有记录的两次各 190 万左右,加起来一共约 1180 万 token。最终 src 目录下是 128 个文件、大约 4.9 万行代码,一共 123 次提交,27 套自动化测试,9 个检查点在我这台 M2 Pro 上全部稳定 60 帧。

踩的坑

5 小时额度,撞了三次

八个系统并行那一步,我撞了三次 5 小时额度的上限。8 个代理同时跑,大概十几分钟额度就没了,所有代理一起断掉。第一次断掉的时候,它们写到一半的代码还没提交,只能从几个残留的 worktree 里把文件捞出来。

后来改了两件事:一是要求每个代理做完一个阶段就先提交一次,断了之后新代理能接着上次的进度继续;二是把同时运行的代理从 8 个降到 3 个。第二点是关键,因为每个代理一开场都要先把两份合同和相关代码读一遍,8 个一起断再一起重来,大半额度都花在重新读文档上了。降到 3 个之后,第四次一口气跑完了。

QA 找出来的问题,挺像真人测试会报的

两轮 QA 一共报了 49 个问题,有几个我觉得很有代表性:

  • 推方块卡死:第一章有个方块可以被推到栏杆和路沿的缝里,推不动也不会自动复位,第一次玩的人只能退回主菜单重来。
  • Boss 太弱:只要两面镜子调对一次,护盾一再生 1.5 秒就又碎了,测试机器人 34 到 49 秒就能把 Boss 打死。后来改成每次破盾最多打掉 30% 血,护盾恢复时会把镜子重新打乱。
  • 教学提示滞后:提示是排队显示的,每条都要显示满时间才轮到下一条,结果「Space 跳跃」出现的时候,玩家早就跳过第一个缺口了。
  • 阴影变成紫黑色:调色时的对比度是在线性空间里以 0.5 为中心算的,暗部的绿色通道被直接压成 0,所有阴影都发紫。这个只看截图很难发现,是美术那个视角的代理拿像素值算出来的。
  • 死亡音效播两次:敌人自己播了一次,音频模块收到死亡事件又播了一次。

测试测不到的地方

自动化测试全是在无头浏览器里跑的,有两件事它测不了。

一是鼠标锁定。最后让 Claude 自己在桌面应用的内置浏览器里过一遍的时候发现,这个嵌入式浏览器不允许锁定鼠标,结果视角完全转不了。后来补了一个兜底:锁不住鼠标的时候,按住鼠标拖动也能转视角,画面上会提示「点击画面锁定鼠标」。所以要玩的话,最好还是在独立的 Chrome 窗口里打开。

二是声音。所有音效都是代码合成的,测试只能检查音量、峰值、有没有异常值,没有一个代理真的「听」过。到底好不好听,还得我自己听。

还差在哪

说实话,这个游戏离真正好玩还有距离。

画面是好看的,黄昏的光、云海、光柱,截图拿出来挺能唬人,但仔细看,建筑都是方块和圆柱拼出来的,墙面也就那几种材质来回用。角色动作是代码 K 出来的关键帧,能看,但和动捕做的动作没法比。

难度也还没调准。机器人测出来,会闪避的玩家打虫群也要掉三成多的血,比设定的目标偏难。估算第一次玩要 18 到 25 分钟,比需求里的 15 到 20 分钟略长,多出来的主要是 Boss 战的重试。

但回头看这件事本身:一段需求,没有一个素材,从空文件夹到一个能完整通关的 3D 游戏,中间我没有写一行代码,花时间最多的反而是等额度恢复。

转载协议

本文采用 CC BY-NC-SA 4.0 协议进行许可,转载请注明出处。 CC BY-NC-SA 4.0

允许转载、修改和分享,但必须注明作者和出处,且不得用于商业用途,衍生作品需采用相同协议。

☕ 请我喝杯咖啡

如果这篇文章对你有帮助,欢迎打赏支持!

打赏二维码