用 AI 写的 游戏 零报错跑完一整季,后来我发现一半内容根本没发生
用 AI 写的 游戏 零报错跑完一整季,后来我发现一半内容根本没发生
作者分享了AI开发中静默失效的排查方法与测试规范,对提升AI辅助编程质量有参考价值。
我在做一款多人卡牌游戏《缄默都会》。代码主要由 Claude Code 写,美术、音乐、翻译也交给了别的 AI;我负责定这个游戏该是什么样,看 AI 交上来的东西,然后说「不行」。这篇讲开发第四天的事,是整个项目里我最想记下来的一次「不行」。
前三天都在写设计文档,一共 16 份。第四天早上 Claude 开始写代码,到下午三点多,大约六个半小时、15 次提交:一条把设计表格转成游戏数据的管线,一个支持 34 类卡牌效果的规则引擎,一个能存档、能恢复的服务器,再加一个连得上它的 Unity 客户端。
画面还一张没有,它先写了一个模拟器:40 个脚本玩家,跑真实规则,机器能跑多快就跑多快。一整季,336 个游戏日,122,025 条命令,147,302 个事件,结算报错是零。

313 次扒窃,0 次成功
第一道裂缝出在扒窃上。机器人试了 313 次,失败 313 次。不是大部分失败,是每一次都失败。
原因就一个词。设计表里这类判定叫 FIXED_RATE,服务器代码里 Claude 写成了 RATE。代码遇到不认识的名字,掉进默认分支,而默认的成功率是 0。
代码能编译,测试能通过,游戏能跑,可这一整类行动永远不可能成功。每次失败看上去都只是普通的掷骰失手,光看报错数量,什么也查不出来。
事后 Claude 在设计日志里写了一句,是我在整个项目里最喜欢的一句:枚举名是一份没有编译器替你把关的契约。

313 次扒窃,0 次成功
第一道裂缝出在扒窃上。机器人试了 313 次,失败 313 次。不是大部分失败,是每一次都失败。
原因就一个词。设计表里这类判定叫 FIXED_RATE,服务器代码里 Claude 写成了 RATE。代码遇到不认识的名字,掉进默认分支,而默认的成功率是 0。
代码能编译,测试能通过,游戏能跑,可这一整类行动永远不可能成功。每次失败看上去都只是普通的掷骰失手,光看报错数量,什么也查不出来。
事后 Claude 在设计日志里写了一句,是我在整个项目里最喜欢的一句:枚举名是一份没有编译器替你把关的契约。


给「沉默」分类
从那以后,我们不再把一整季当成一个结果来看。Claude 写了一个诊断工具,把每个没被用上的行动分进四个桶:
- 第一,从来没出现在选项里;
- 第二,出现了,但从来做不了;
- 第三,能做,但没人选;
- 第四,有人做了,结果出错。
第三种我在视频里说「那只是策略」。现在我会说得谨慎一点:它不一定是 bug,但也值得看看为什么没人选。
第四个桶里有个意外:有一个行动一季里出错了 9,171 次。因为被尝试的次数太多,在普通的「最常用行动」报表里它排进了前五,看上去反倒像最热门的玩法之一。
分完类,问题一下子清楚了:这个游戏大部分内容不是数值没调好,而是根本够不着。
没人犯得了的罪
我最喜欢的一个例子是「卷款」:你是某个组织的成员,卷了它的钱跑路。规则写了两条:你不能是领袖;你手里必须有这个组织的牌。可组织的牌,只有领袖才有。
所以一季下来,卷款在玩家的选项里出现了 9,318 次,能做的次数是 0。
顺着往上查,情况更糟。入会流程断了三处,城里每个帮派、公司、教派都只有创始人自己。没有成员就没有卷款;没有卷款,就没有证据、调查和声望,也就没人够得上参选资格。另外,包括市长、警察局长、三个帮派老大在内的 13 个重要角色从头到尾没被生成过,城里所有脚本 NPC 全是巡警。
这些没有一处报错。每一条规则都在一丝不苟地照着写好的做。

AI 自己也会这样
你可能觉得教训是「AI 写代码马虎」,其实没这么简单。修这些问题的时候,Claude 自己又提交了一个字段:声明了,但从没赋值,也没人读。它事后自己发现了,在日志里写「这正是这一节在批评的那种毛病」。它写的诊断工具第一版报告说有 113 张牌不可能拿到,其实大部分拿得到,只是工具不知道一张牌的所有来路。
这类失败对谁都是无声的:对 AI,对测试,也对我。
后来定下的四条规矩
- 每发现一个静默失效,不光修掉,还要加一道检查,让同一类问题都会大声报出来。比如规则里写了引擎不认识的变量,服务器现在会直接拒绝启动。
- 每个修复配一个测试,并且证明它有用:撤掉修复,看测试变红,再放回去。从来没红过的测试,什么也没证明过。
- 别信「零报错」,要数「我设计的那件事真的发生了吗」:哪些用上了,哪些卡住了,为什么卡住。
- 别在测试里写死精确的数字。正常改一次表就变红,红几次之后大家就学会直接把数字改掉,它就只剩噪音了。
修完这些,一个数值都没动,游戏活过来了:连选项都上不去的行动从 28 个降到 6 个,最高声望从 0 到 404,选上公职的玩家从 0 到 16。

如果你也在用 AI 写代码,这是我最想分享的一点:报错数量只能告诉你哪里崩了,告诉不了你哪里什么都没发生。
你遇到过最安静的 bug 是什么?不报错、不崩溃,就是什么都没发生的那种。
这几条检查我整理成了一份清单和几个小工具,放在 GitHub 上,搜 opmasgame 就能找到。完整一期在 B 站《用 AI 做游戏》合集第 1 集,旁白是 AI 配音。游戏还在开发中,Steam 搜索《缄默都会》可以看预告片、加愿望单。
来源:知乎 · AI 游戏文章 · zhuanlan.zhihu.com