Vibe Coding 多人游戏(十二)—— AI 辅助编程 → OpenClaw 全自动 → OpenCode 引入
第一阶段:AI 辅助编程(局部功能 + 代码补全)
多人版开发之前,单机版「巨大娘的玩耍」v1.0 就是用 AI 辅助编程写的。工作流很简单,也很有"打工感":
- DeepSeek 网页版:做优化、算法实现等局部功能的处理
- Trae VSCode 插件:代码补全
说真的,最开始我还挺兴奋的。AI 帮我写碰撞检测算法、帮我生成动画系统的模板代码,听起来很美好对吧?
但实际的日常是:在网页和 IDE 之间来回切换,把大段的上下文粘贴进去,等 30 秒生成,复制回来,跑一下,报错,切回网页重新描述问题。
举个例子:我在写单机版的一个碰撞检测函数时,在网页上告诉 AI 我的需求、Three.js 的版本、场景结构——等它生成完后贴到 IDE,tsc 直接报错:某个 import 路径不对。我切回网页,告诉 AI 正确的 import 路径,再复制回来,发现这次的代码风格和上一段不一致——一个用了 as 类型断言,一个用了类型标注。虽然功能正确,但看着别扭。
更痛苦的是修 bug。 AI 生成的代码跑不起来,你需要在网页和 IDE 之间反复切,描述上下文的时间比 AI 生成代码的时间还长。而且切出去回来后,IDE 里的代码改了,网页那边的对话还停留在上一个版本——每次都要手动更新上下文。久而久之你会发现,你不是在用 AI 提高效率,你在给 AI 当翻译官。
好在 DeepSeek 网页版完全是免费的,没有 token 费用压力——只是体验上很折磨人。单机版完成后,我其实心里清楚:靠这种模式做多人版,工作量太大,光搬运上下文就能把人耗死。
第二阶段:OpenClaw 全自动(零代码指挥)
转折点出现在 2026 年 6 月初。我引入了 OpenClaw——一个 AI 网关/代理平台。
这个阶段的变化是根本性的。我不再打开任何编辑器,不再复制粘贴,不再在网页和 IDE 之间来回切。我的全部工作就是在 Webchat 界面中给 OpenClaw 发消息。
我(Webchat)→ OpenClaw(执行)
我只需要做一件事:描述目标。 飞书只是用来通知我任务完成——OpenClaw 做完事后给我发一条提醒。
例如,我发了一条消息:
"房间服务的架构是 packages/room-service/src/,参考 packages/logic/ 下的单机逻辑,把它转成多人版本,用 TSRPC 通信"
OpenClaw 会自动去读单机代码,理解业务逻辑,分析 State.ts 的状态数据结构,然后直接生成多人版本的 ApiPlayerReady.ts、ApiFinished.ts、Server.ts 等文件,再跑 tsc 检查编译——整个过程我完全不需要介入。
有几天我甚至感觉自己在度假。 我在 Webchat 中说一句"修复退房后 isEnterGame 标志位未重置",十分钟后 OpenClaw 回复"已修复,提交了,部署已上线"。我去浏览器刷新一下,bug 真的没了。
但是,自由是有代价的:token 消耗太高了。
平均每天花费 100 多元。为什么?
因为 OpenClaw 在做"所有事情"——它要调度、要分析代码结构、要写代码、要跑测试、要管理记忆、要维护上下文。它的系统 prompt 里夹带了大量信息:项目结构、编码红线、记忆管理规则、通信协议说明……所有这些在每一次 tool call 中都占用 token。
一个典型的场景:我让 OpenClaw 修复一个 bug。它先是搜索记忆库找相关决策记录,然后读 agent-context.md 了解项目结构,再读相关源码文件(每个文件可能几十 KB),然后分析问题所在,生成修复代码,跑 tsc,跑测试——这一串操作下来,付费模型上下文中可能耗了上百万 token,而真正有用的"生成代码"只占其中一小部分。
每天 100+ 元持续了将近两周,我才意识到这个模式不可持续。
第三阶段:引入 OpenCode(调度层与编码层分离)
问题清楚了:OpenClaw 擅长做调度层(管记忆、管流程),但写代码应该交给专门干这个的工具。
2026 年 6 月 22 日,我做了一个关键的决策——引入 OpenCode,将调度和编码分离。
方案很简单:
你(决策)→ OpenClaw(调度) → OpenCode(编码)
OpenClaw 的角色变了。它不再自己写代码,而是:
- 收到需求
- 写一份 Brief(需求说明 + 上下文 + 红线)
- 调度 OpenCode 去执行
- 检查 OpenCode 的输出结果
- 如果编译失败或测试没过,把错误信息写入新的 Brief 再调度一次
OpenCode 的角色很纯粹:只写代码,只修 bug,只跑测试。 它的上下文里不需要记忆、不需要流程管理、不需要编码规则体系——它只需要 Brief 里的内容。所以 token 利用率极高。
这个决策的效果立竿见影。
| 维度 | OpenClaw 全做 | OpenClaw 调度 + OpenCode 编码 |
|---|---|---|
| token 消耗 | 高(大量调度上下文) | 低(OpenCode 只带任务上下文) |
| 费用 | ~100 元/天 | 大幅下降 |
| 灵活性 | OpenClaw 模型可选范围小 | OpenCode Go 套餐很便宜 |
| 记忆复用 | ✅ OpenClaw 资产继续用 | ✅ 调度时传给 OpenCode |
切换后第一天,费用从 100+ 元骤降到 30 元左右。但这个数字不是稳稳的 10 元以下——因为 Go 套餐流量有限,超额后需要充值计费,而 flash free 模型的免费额度每天也就够跑几次。一段时间后稳定在每天 20 元左右。费用下降了 80%,效率反而提升了。
模型选择:Flash Free + Flash
OpenClaw 调度 OpenCode 使用 DeepSeek 模型,分为三个档次:
opencode-go/deepseek-v4-flash:日常编码(Go 套餐,流量有限,超额后计费)opencode/deepseek-v4-flash-free:免费额度版本(OpenCode 的 Zen 套餐,每天有一定额度,日常小修小改用这个)opencode-go/deepseek-v4-pro --variant max:架构设计、方案评审、顽固 bug
Flash 和 Flash Free 虽然是同一个模型、共享缓存,但归属不同套餐——flash-free 走 Zen 的免费额度,flash 走 Go 套餐的付费流量。超出免费额度后自动切到 Flash。
Pro 版本用得还挺多的——方案阶段几乎都要用 Pro。它分析跨度大、理解能力强,写 brief 时让它来审一遍能发现很多架构隐患。遇到 tsc 卡了两个循环还没过的顽固 bug,也请 Pro 出场。
费用变化
| 阶段 | 日费用 | 月费用 | 我的参与度 |
|---|---|---|---|
| AI 辅助(网页+补全,单机版) | 免费 | 免费 | 高(搬运工) |
| OpenClaw 全自动 | ~100 元 | ~3000 元 | 低(但贵) |
| OpenClaw + OpenCode | ~20 元 | ~600 元 | 低(划算) |
费用不是线性的——OpenClaw 全自动阶段比网页版贵得多,因为所有 token 都由 OpenClaw 消耗。分层之后才真正降下来。
有意思的是,费用下降的同时,我的开发效率反而提升了。 之前 OpenClaw 自己写代码时,经常因为上下文太大而响应慢,或者因为 token 限制而截断。分给 OpenCode 后,OpenClaw 只需要几 KB 的调度上下文,瞬间完成调度,OpenCode 也只需要几十 KB 的编码上下文。双方都"身轻如燕"。
手动编程 vs AI 编程:在多人联网开发中的对比
在做这个多人版之前,我自己用 basic1 纯手写了 2 周的帧同步。那 2 周的体验和后来用 AI 开发的体验,差异不是"快一点"——是完全不同的工作模式。
调试
手动调试多人联网:开两个浏览器窗口,一个 Log 里看服务端输出,一个看客户端控制台。跑两步,位置不对,回 IDE 改代码,重跑。改一行代码到验证结果,来回 2-3 分钟。如果 bug 不规律(偶现、特定条件下才出现),手动调试基本靠猜——你觉得可能是 A,改一下跑跑看;不确定就去查日志,日志太多又看不过来。
AI 调试完全是另一个维度的:AI 可以拉日志、截图分析、自动跑 E2E —— 整个流程全是自动化的。
举个例子:发一句「玩家 B 加入后位置始终是 (0,0,0)」,OpenCode 先读 Game.ts 里的 onPlayerJoin 逻辑和 setPosition 调用链,发现是 initPlayerState 里忘记把 players 的初始位置写进 State 了。OpenCode 改了,跑 BDD 测试,通过,回一句话「已修复:initPlayerState 未记录 players 的初始位置」。
这是最基础的场景。复杂的场景下,AI 的调试能力更强:
- 拉服务端日志:OpenCode 可以直接调用
gts-logsskill 拉取 SCF 上 room-service 或 match-service 的实时日志,不需要我手动登录控制台 - 截图分析:用 Playwright 打开浏览器、连进游戏、截当前画面——然后自己看截图,分析位置偏移或者渲染异常
- E2E 自动验证:写一个 Playwright scenario,模拟两个玩家加入游戏 → 移动 → 退出,全流程自动化。改完代码后一键跑 E2E,不需要人手动操作浏览器
最关键的是:这整个流程可以全自动循环。 AI 发现 bug → 拉日志分析 → 截图确认 → 改代码 → 跑 E2E 验证 → 没过再循环。没有人需要在中间按一下「继续」。
差别在哪?手动调试时你只能验证"自己已经怀疑的地方"。AI 调试会遍历所有可能路径——它看到的所有代码都是平等的嫌疑对象。
开发
手动开发:先想好完整的方案、画好架构图、写 API 定义、写数据模型、写函数签名,然后填实现。一句话形容——按图纸施工。
AI 开发:给了目标后,AI 自动读全部相关代码,生成完整实现。我开始时还不太适应——以前是"想清楚了再动手",现在变成了"先动手,再让 AI 根据反馈调整"。这个模式在多人联网这个领域特别适合,因为多人架构太容易在"想"的阶段遗漏细节。
一个具体的例子:实现「玩家 A 进入房间后通知玩家 B」这个功能。手写的话我要定义新的 API type(MsgPlayerJoined),注册到 TSRPC 的服务端路由,在 ApiPlayerJoin.ts 里写服务器端通知逻辑,前端 MultiPlayerManager.ts 里加监听回调,测一下收到消息后的状态更新。这些步骤缺一不可,且每个步骤都可能踩坑(API 类型名字冲突、注册时 protocol 路径写错了、前端忘记 use 协议)。
AI 开发的话,它一次把全部步骤做了——我只需要说「玩家加入后其他玩家需要收到通知」。OpenCode 读了 ApiPlayerJoin.ts 发现没有通知逻辑,读了 MultiPlayerManager.ts 发现没有监听器,然后自动补全了一整套流程。
其它方面
| 维度 | 手动编程 | AI 编程 |
|---|---|---|
| 进入门槛 | 高——要理解整个技术栈 | 低——说清楚目标就行 |
| 改大范围代码 | 心理负担大——改 10 个文件?下次吧 | 无所谓——说一句跑全程 |
| 一致性 | 容易手滑:if 写成了 fi、括号没闭合 | 100% 一致——知道模式就全程用 |
| 心智负担 | 高——要同时记着架构、协议、数据结构 | 低——只需要把当前目标说清楚 |
| 成就感 | "我今天写了 300 行" | "我今天指挥 AI 写了 3000 行" |
最重要的一点
本来这次从 0 重写为多人联网我是下不了手的。通过 basic1 这个 demo,我知道要改的东西太多——服务的分层、状态的同步、协议的格式、前端的多人渲染……想想就头大。
但使用 OpenClaw 后,爱不释手,一晃一个月就过去了,每天都很有激情。我对别人说这是升维了!
以前:你是一个程序员在写代码。 现在:你是一个导演在指挥 AI 演员——你告诉 AI 你要什么效果,AI 去自动调灯光、走位、后期。你从演员变成了导演,不用操心中间细节,精力全放在"要做什么"上面。
这是根本性的变化。不是"我用 AI 写了更多代码",而是"我不再写代码了"。
带来的文化变化
OpenCode 引入不仅省了钱,还改变了开发方式。
1. 不再怕重构
以前重构 = 手动改几十个文件。在多服务架构下(room-service、match-service、frontend 共享 logic 包),一个字段名的改动可能涉及 3 个包的十多个文件。以前我会犹豫"改不改",现在重构 = 一句话描述目标,OpenCode 执行全程。
有一次我需要把 isEnterGame 改为 hasEnteredGame,这个字段在 Game.ts、State.ts、各种 Api 文件的协议定义里出现了 20 多处。我发了条消息:"大重构:把 isEnterGame 改为 hasEnteredGame",不到 3 分钟后 OpenCode 回复了:"已修改全部 23 处引用,tsc 通过,BDD 测试全部通过。"
2. 小修小改不再烦躁
改一个类型定义要在 5 个文件里同步改?丢一句话,十秒完事。最典型的一次是调整 Config 接口:isDebug 从 boolean 变成 { enabled: boolean; showCollisionBoxes: boolean }。这个改动涉及 five 个 .ts 文件和三个 .feature 文件。以前我会想"等所有东西一起改再说",现在直接一条消息搞定。
3. 代码质量反升
AI 对一致性很敏感——你告诉它"所有 API 都用这种模式",它就真的在所有新代码里用同样的模式。三层编码规则体系(通用编码红线 + 项目特定规范 + 运行时规则)一旦设定,AI 100% 遵守。
最让我意外的是:AI 的代码比我的更少 bug。 因为 AI 不会"手滑",不会忘记处理边界情况。只要你在 Brief 里写了"处理空数组情况",它就真的会处理。
OpenCode 的局限性
当然不是万能药。以下几个坑我反复踩过:
1. 上下文窗口有限——大跨度重构需要额外注入。比如跨 3 个包的大重构,OpenCode 一次只能处理一个包。我的做法是拆成多次调度,每次聚焦一个范围。
2. 没有流程意识——OpenCode 不知道"改完要部署"、"部署完要验证"。它只执行当前 Brief,不操心上下文。这就是为什么需要 OpenClaw 在调度层管理流程。
3. 卡住不自知——同一个编译错误反复尝试是 OpenCode 最让我头疼的毛病。我见过它因为 tsconfig.json 里少了一个 exclude 导致 tsc 报错,然后以为是自己代码写错了,改了 6 次代码去绕开——实际上只需要修正 exclude 配置。
4. 需要明确的红线——如果不告诉 OpenCode "不改 node_modules 里的文件",它遇到编译报错时真的会去改。不信你看看 node_modules/some-package/dist/index.js 的 git blame——有 3 次 commit 是我后来手动还原的 AI 改动。
这些局限性,就是我下一期要讲的内容——OpenClaw 调度层 + Skill 固化 + 自动部署,为 AI 编码建立完整的流程护栏。
浙公网安备 33010602011771号