ChinaJoy 排队一个半小时回来后,我用 Doubao-Seed-Evolving 写了一款抗战小游戏

上周的 ChinaJoy 刚刚结束。今年展会是 7 月 31 日到 8 月 3 日,主题叫“与AI同游”,正好也是我比较感兴趣的方向。
不过我去 ChinaJoy,最主要的目的当然还是玩游戏。
当天我九点多到现场,在 N1 馆看到了国产抗战题材游戏《抵抗者》。这款游戏以二十世纪四十年代的中国为背景,也是它第一次在 ChinaJoy 开放线下试玩。我到的时候,队伍已经要排一个半小时了。
排归排,玩完以后我确实觉得这种题材挺有意思。只是展会结束了,游戏也不能一直在那里玩。回来的路上我就在想:既然自己平时也玩了不少游戏,能不能用 AI 做一款属于自己的抗战小游戏?
正好 Doubao-Seed-Evolving 最近又更新了。上一次我用它写过一款 Windows 桌面小应用,发出来以后大家还蛮喜欢。这次干脆换个难度更高的,不做工具,直接让它陪我写一款独立小游戏。
先不说别的,效果图先上。我个人感觉还不错。
先看最终效果

游戏叫《破晓送信》。玩家要控制一名送信员,从安全屋出发,穿过被巡逻队反复检查的大院,最后进入电报站,把密信发出去。
画面看起来是像素风,但它不是一张背景图,也不是把几张人物图片放在上面平移。房屋、围墙、马车、木箱、角色和电报机都是浏览器里实时生成的 3D 网格,人物能转向、奔跑、蹲伏,所有大型物体也都有碰撞。

程序结构其实没有想象中复杂
我一开始听到“做 3D 游戏”,第一反应也是需要游戏引擎、建模软件和一大堆素材。真正拆开以后,核心其实就是下面这几层。

项目用 React 和 Vite 搭页面,用 React Three Fiber 驱动 Three.js 场景,用 Rapier 做物理碰撞,Zustand 保存任务和巡逻状态,Howler 负责脚步、警报等声音。人物和建筑没有使用外部模型,全部由代码组合方块生成。
我负责说清楚“什么好玩、什么不好玩”,Doubao-Seed-Evolving 负责把这些意见变成场景、状态机和可以运行的代码,再自己启动项目、检查报错、进浏览器试玩。这个分工贯穿了整个开发过程。
第一步不是写代码,而是先把我想玩的东西说清楚
这里先提醒一句:Doubao-Seed-Evolving 可以在火山方舟 Agent Plan 中使用,我在 Coding Plan 的模型列表里还没有看到它。所以一直用的是 Agent Plan。后续套餐和模型范围可能变化,还是以控制台实际显示为准。
我本人没有做过游戏,Three.js、碰撞体、状态机这些都谈不上熟悉,但游戏确实玩了不少。所以最开始我没有装专业,只是在 Codex 里(还不知道如何接入自定义的模型可以看火山官网文档)写了几句很直白的话:
想做一款带民族色彩的抗战小游戏。不要做成背景图上移动几张图片,一定要像真正的游戏,人物能走,建筑能进入,也要有可玩的逻辑。
然后让它先别急着开发,帮我生成一版计划。
Doubao-Seed-Evolving 给出的第一版方案是一关 3—5 分钟的第三人称潜行游戏:玩家从街巷潜入,躲避巡逻,穿过院落,进入电报站发送密信。技术上用 React、Three.js、Rapier 和 Zustand,场景要有碰撞,敌人要能巡逻、发现、追赶和搜索。

这一步对我很有用。因为我虽然能说出“想要像游戏”,却说不出实现它需要哪些模块。它先把一个模糊想法拆成角色控制、镜头、地图、AI、任务和结算,我只需要判断这个玩法是不是我想玩的。
回头看,这个项目倒是符合 Doubao-Seed-Evolving 第二次升级的 Coding 工程能力:复杂仓库修复、真实功能开发和长程工程任务都在其中。对我来说,这比单独生成一段漂亮代码更重要,因为后面每一次“我觉得不好玩”,都不是改几行样式就能解决的。
真 3D 第一版做出来了,但我自己都玩不下去
按照第一版计划,模型先做了一套偏写实的 3D 场景:灰砖房、岗楼、院门、雾气、巡逻兵都有,玩家也能在院子里走。单看技术,它确实已经不是静态 UI 了。

问题是,写实 3D 对素材要求太高了。
角色需要骨骼模型,走路、奔跑、蹲伏需要成套动画;建筑需要统一材质,人物和场景的比例也要调。免费模型东拼西凑后,人物动作不统一,有的姿势甚至有点抽象。再加上雾、阴影和后期效果,画面很压抑,运行也不够流畅。
中间我还试过更省事的办法:用一张完整场景图当地图,再在上面移动人物。但这就更不对了,看着像游戏截图,实际只是图片平移,既没有真正的空间,也没有什么可玩性。

这两次尝试让我确定了一件事:我需要的不是“看起来像 3D 的图片”,也没必要硬做一套低配写实大作。小游戏最重要的是风格统一、人物清楚、操作顺畅。
所以我直接让 Doubao-Seed-Evolving 推翻人物和场景表现,全部改成 3D 像素,也就是体素风。
改成体素后,反而一下子顺眼了
体素角色不需要下载人物模型。头、身体、手臂、腿都是方块,通过关节旋转做出走路、奔跑和蹲伏。房屋也一样,用灰砖墙、木门、瓦顶和窗户等小组件组合出来。

这个改动看起来像重写项目,实际最让我满意的地方,是 Doubao-Seed-Evolving 没有把前面的工作全部扔掉。原来的玩家控制、任务坐标、碰撞接口和 UI 还能继续用,只替换人物与场景的表现层。固定斜 45 度相机后,人物也更容易看清;屋顶或前墙挡住玩家时,遮挡部分会自动淡出。
这比“一句话生成一个页面”更能体现工程能力。人物、场景、相机和遮挡分散在不同文件里,它需要先找到原来的接口,再完成跨文件修改。前后已经改了很多轮,它仍然知道哪些规则必须保留,哪些部分可以推翻,没有每次都从空项目重新开始。
但是画面变好以后,我又发现玩法还是不对。
人都走到院子里了,巡逻兵还发现不了,肯定不合理
早期玩法用了常见的视线锥:只要玩家不在守卫面前,就不会被看到。听上去很像潜行游戏,但放在这个小院里就很怪。玩家已经大摇大摆走进院子,两个巡逻兵只因为朝向不对就完全没反应,一点紧张感都没有。
我最后把这套“看起来很专业”的视野、怀疑值和追捕逻辑删掉,换成更适合本关的简单规则。
院里只有一支两人持枪巡逻队。他们不会傻乎乎地从院子一头走到另一头再原路返回,而是在院外随机等待。出现前先有 3 秒脚步声和口令预警,随后从一侧完整穿过院子,从另一侧离开。下一次再从反方向出现,间隔并不固定。

巡逻队入院时,不再判断视线方向。玩家只有两种安全状态:待在屋内,或者进入掩体区域后按住 Ctrl 蹲好。站在箱子旁边但没有蹲伏、在两个掩体之间奔跑,或者巡逻尚未离开就提前出来,都会直接失败。

为了避免玩家只会干等,我还保留了三块石头。玩家在屋内或已经藏好时,可以在预警阶段按 C 投石,把巡逻队暂时引到别处。但巡逻已经入院后再扔就没用了。
这套逻辑没有复杂视野计算,玩起来却比原来紧张得多。这里也能看出 AI 开发的一点:模型可以很快实现一套复杂系统,但“复杂”不等于“好玩”。最终还是要靠试玩发现问题,再告诉它应该删掉什么。
院子太小,几秒跑完,同样没有可玩性
逻辑改完后,新的问题又来了:地图太小。玩家从出生点跑几秒就到电报站,奔跑、躲藏和投石都没有真正用上。

我让它把地图扩大到约 50×80 米,并重新分成出生安全屋、南院物资区、中央检查区、北院仓储区和电报站五段。出生点放到真实房间里,电报站移到最北端,中间增加木箱堆、马车、沙袋墙、木料和坍塌院墙等 9 组掩体。
掩体不能只是装饰。每一组都有真实碰撞和明确的隐藏区域,相邻距离也要保证玩家听到 3 秒预警后,有机会跑到最近的位置。地图扩大后,正常通关需要至少利用三次掩体或安全屋,整局时间终于拉到了 3—4 分钟。
这轮修改涉及场景坐标、物理碰撞、巡逻路线、任务距离和相机跟随,不是只改一个数字。Doubao-Seed-Evolving 比较省心的地方,是它会顺着相关文件一起检查,而不是地图放大了,人物、巡逻和任务点还留在旧坐标里。
地图变大后帧率一度掉到 50 帧左右。它没有直接猜一个优化方案,而是先查找场景更新相关代码,再结合浏览器性能数据定位到频繁重渲染的问题,调整状态更新和场景实例后,持续游玩基本稳定在 60 FPS 左右。
从安全屋到发报,终于形成了一个完整小游戏
最终版本的操作很简单:WASD 移动,Shift 奔跑,Ctrl 蹲伏,C 投石,E 开门和使用电报机。
玩家从安全屋醒来,观察巡逻动静,利用掩体分段穿过院落,最后进入电报站。靠近电报机按 E 后会播放发送过程,并结算通关时间和暴露次数。到这里,前面的移动、潜行、投石、失败和任务提示才真正串成一局游戏。

整个项目仍然只是一个浏览器小游戏,和《抵抗者》这种正式商业作品当然不能相比。但从最开始的几句话,到真的能控制人物穿过一座 3D 院落、避开巡逻并完成发报,对一个完全没做过游戏的人来说,我已经挺满意了。
写在最后
这次最深的感受,不是 AI 已经能“一句话做出一款神作”,事实刚好相反。第一版很抽象,第二版很压抑,视线系统不合理,地图也小得没法玩。如果我只看它第一次生成的结果,这个项目大概早就被我删了。

真正有用的是,我可以像试玩一个半成品那样不断提意见:人物太乱就改体素,房屋挡人就自动剖切,巡逻逻辑不合理就重写状态机,地图太小就整体扩建,卡顿就继续测帧率。Doubao-Seed-Evolving 能在这些连续修改里保留上下文,把一句不太专业的反馈追到具体代码、场景和测试结果上。
另一个比较实在的变化,是这次升级提到的幻觉控制。游戏开发里最怕的不是报错,而是工具没有执行成功,模型却顺着一个错误状态继续往下做。这次每轮修改后,我都让它以实际浏览器画面、控制台结果和测试数据为准;没有出现的效果不能只看代码就算完成。至少在这次反复重构中,搜索、工具调用和状态判断没有把项目带到一条错误路线后还继续硬编。
人负责决定“这样到底有没有意思”,模型负责把修改真正落地。一步一步来,最后的效果确实达到了让我满意的程度。
上次我用 Doubao-Seed-Evolving 做的是 Windows 桌面应用,这次又拿它做了一个完全不同的 3D 小游戏。对我来说,这比单独跑几个代码题更能说明它适不适合实际开发。如果你也有一个一直想做、但因为不熟悉技术而没有动手的小项目,可以试试从几句话和一份开发计划开始。只是别指望第一版就是终点,多玩、多看、多否定几次,结果往往会好很多。
原文地址: https://www.cveoy.top/t/topic/qHhD 著作权归作者所有。请勿转载和采集!