Battle Drones:用 AI 编程打造支持声音联机的 RTS

Simon Willison6 天前

一款类似《命令与征服》的浏览器即时战略游戏,能否主要靠 AI 编程代理完成,再让附近两台设备通过声音同步对局?Battle Drones 将这两个想法放进了同一个实验。

经过 12轮主要迭代、321次由编程代理完成的提交,这款以无人作战单位为主题的 RTS 已支持手机和桌面浏览器,拥有三维单位、多种地图与玩法,以及近距离双人声音联机功能。

不过,它仍是一个高度依赖 AI 生成代码、主要通过试玩反复调整的实验项目,不宜把它等同于经过完整工程审查的成熟游戏。

从“像游戏”到调整玩法

Battle Drones 的起点很简单:制作一款适合手机操作、风格接近《命令与征服》的 RTS,让地面与空中无人部队争夺领土和资源。

最早的版本采用 Phaser 二维游戏框架,已经具备建筑建造、单位选择与指挥,以及基础电脑对手。图像素材则由编程代理调用 OpenAI 图像生成接口制作。

随后几轮更新补齐了单位精灵图,加入电脑对战观战模式,并扩展地图、地形和建筑。视觉效果逐渐完善,但试玩体验仍容易让人感到乏味。

第四轮迭代的指令反而非常简短:

这个游戏还不够好玩。让它好玩得多。

这次执行采用了能够编排多个子代理的动态工作流,持续了一个晚上,到第二天上午较晚时才得到可玩的结果。调整不再局限于画面,而是深入到对局节奏、争夺目标与玩家反馈:

  • 开局路线选择:在闪击、工业发展和空军路线之间取舍。
  • 战场支援能力:加入弹幕、EMP、空投舱与轨道打击。
  • 地图争夺目标:增加中继站、补给空投和可回收残骸。
  • 操作与反馈:补充战斗提醒、游戏速度调整、编队保存与触屏部署。
  • 更多玩法:加入抵御连续敌军的生存模式,以及任务、每日挑战和规则变体。
  • 声音反馈:加入单位语音、播报,以及随战斗升温而增强的音乐。

这一轮还运行了超过一千场模拟对局,用于调整单位平衡和玩法。这里需要区分两件事:模拟对局能够提供平衡与节奏方面的反馈,但“是否好玩”仍包含主观试玩判断,不能仅靠自动测试得出。

转向三维后,让地图赋予单位用途

第五版将游戏迁移到 Three.js,建筑、载具与地形转为三维表现。三维模型由编程代理通过 TypeScript 代码构建。

后续版本加入机器人步兵与 Condor 运输机,但新的单位并没有自然成为战术核心:电脑对手很少使用它们,因为缺乏足够明确的战略理由。

为此,游戏加入了热带群岛地图 Archipelago。它的关键不是换一套场景,而是改变资源争夺方式:

  • 岛上设有七处可占领的中继站。
  • 地面车辆和步兵无法直接抵达这些岛屿。
  • 飞行单位不能直接占领中继站。
  • 玩家必须用 Condor 将步兵运送到岛上,才能完成占领。

这样,运输机、步兵和空中护航就围绕同一个目标形成了配合需求,而不只是单位列表里的额外选项。

巨型机甲不只是更强的战斗单位

第十版加入了 Goliath 巨型机甲,配有眼部激光和臂炮,也能承担前线基地的作用。

建造它需要先完成一系列前置建筑,再通过专用建造设施生产。机甲可以移动到新区域后“锚定”,在当地生产步兵、建设额外建筑;两架 Condor 还能共同吊运一台机甲。

胜利条件也随之改变:摧毁敌方总部还不够,还必须消灭对方已经建成的 Goliath。

这让机甲同时参与战斗、运输与基地扩张,而不只是一个血量更高、火力更强的终局单位。

两种 AI 对战,解决不同问题

游戏提供两类容易混淆的对战功能:

  1. 内置电脑对战:让不同策略风格的电脑对手互相交战,便于观战和测试。
  2. 大模型代理对战:让两个大语言模型通过工具获取战场信息、指挥单位并完成比赛。

大模型对战的设计要求是:模型只能获得符合己方视野与战争迷雾规则的信息,而不是直接读取整个战场。配套功能包括对局记录、回放,以及查看模型交互内容的调试工具。

第十一版还加入了随机地图生成器,覆盖已有的多种环境风格,并采用旋转对称布局与随机种子,使地图能够再次生成和复用。

声音联机:让附近设备直接交换消息

第十二版最特别的功能,是让两台处于麦克风可接收范围内的设备,通过音频消息进行多人游戏同步。

实现过程先从一个声音通信乒乓球实验出发,随后制作了 Radio Probe 测试工具,测量设备间可用的音频通信带宽,再构建完整的音频调制解调系统。

这一方案已在笔记本电脑、iPhone 和 iPad 之间进行尝试,但功能刚刚完成,实际测试时间仍然有限。因此,目前更适合将它视为已经跑通的实验性联机方式,而不是对兼容性和稳定性的全面保证。

选择声音通信的主要动机,是保留静态网页的部署方式,避免为了多人游戏额外运营一台需要长期维护的服务器。它面向的是附近设备之间的通信,并不是远程互联网联机。

回放与同步,暴露了浏览器间的数值差异

声音联机之外,一个值得关注的工程问题是 确定性模拟。

回放与多人同步需要游戏在相同输入下得到一致结果。但不同浏览器对 Math.sin()、Math.cos() 等函数的计算结果可能存在极小差异,差异积累后就可能导致模拟失步。

项目因此将部分数学函数替换为自定义实现,以处理跨浏览器回放不同步的问题。这也说明,从单机可玩走向可回放、可同步,并不只是增加一个通信通道。

实验的价值与边界

Battle Drones 展示了浏览器游戏与编程代理结合的一些具体可能性:二维原型、三维模型、程序化音乐、地图生成器,以及模型浏览和对局调试工具,都可以纳入同一条迭代流程。游戏还具有离线运行能力,已缓存的内容可以在没有网络时继续游玩。

但开发过程也有明显边界:开发者几乎没有审查生成代码,对 TypeScript 和游戏开发的既有经验有限;部分复杂任务需要长时间执行,并消耗大量模型额度;新加入的声音联机还缺少充分测试。

因此,这个案例更值得讨论的,不是“一句话就能做出成熟游戏”,而是:当编程代理承担大量实现和自动测试工作后,人仍然需要通过试玩发现问题,并为单位、地图与规则之间的关系提出更明确的设计目标。

评论

请登录后发表观点

暂无数据