Simon Willison 发布 AI 编码制作的 RTS 游戏 Battle Drones,支持音频多人联机
Battle Drones - a vibe coded RTS with audio-based multiplayer
Simon Willison 发布了浏览器 RTS 游戏 Battle Drones,经过 12 次主要迭代和 321 次编码智能体提交,现支持手机与桌面游玩、随机地图及双设备音频联机。Claude Code 还运行了大量模拟对局来调整游戏平衡;作者也分享了用音频同步游戏状态、避免维护服务器的做法。
Battle Drones 展示了编码智能体如何通过模拟对局迭代玩法,并用音频在附近设备间同步游戏状态。
2026年10月20日
我最新的氛围编程游戏实验是一款《命令与征服》风格的 RTS(即时战略)游戏,名为 Battle Drones(在这里游玩)。与我之前的实验不同,这款游戏玩起来真的很有趣。有点不好意思承认,我是通过告诉 Claude“让它有趣得多”才做到的。它还支持附近设备之间通过音频同步游戏状态,实现多人游戏!下面是我目前构建的内容,以及一路走来学到的一些经验。
- Battle Drones
- 我是如何构建它的
- v1:初始原型
- v2:完整精灵图
- v3:多样化地形
- v4:趣味更新
- v5:Battle Drones 进入 3D
- v8:群岛
- v10:Goliath 与智能体对战
- 智能体对战
- v11:随机地图
- v12:通过声音进行多人游戏
- 一些想法
Battle Drones
我的最初目标是打造一款可以在手机上玩的 RTS 游戏,风格类似 Command & Conquer。我对 1995 年的原版(我也喜欢《红色警戒》)有着美好的回忆,想重现其中一点魔力。
经过 12 次重大迭代(以及编程智能体提交的 321 次提交,主要由 Claude Code 完成),我现在有了一款基于浏览器的游戏,可在手机和桌面设备上运行,包含多种游戏模式、数张地图(包括随机地图生成器),甚至支持两台处于彼此麦克风范围内的设备进行多人游戏。
下面是 Battle Drones 在桌面浏览器中运行的视频演示:
目前的功能包括:
- 9 种建筑、7 种地面载具、6 种飞行载具、3 种步兵单位——全部都是 3D 模型,你可以在这里浏览
- 战争迷雾
- 攻击空中或地面载具需要使用不同的武器
- 六张地图,分布在五种生物群系中——温带、沙漠、极地、火山、热带
- 随机地图生成器
- 遭遇战模式——红队与蓝队在旋转对称的地图上交战
- 最后防线模式——一名玩家抵御尽可能多波次的敌人
- 范围效果武器:弹幕、EMP、空投舱、天空之锤
- 补给箱空投,提供额外资源
- 会对游戏事件做出响应的游戏内音乐——战斗开始时音乐会变得更加激烈
- 不同的游戏内AI 性格(均衡、速攻、空军蜂群、爆发发展、天空力量、铁甲)
- AI 对战 AI模式,可观看这些性格互相较量
- Goliath——一台巨型跺地机甲,配有激光眼和手臂炮,还能建立新的基地
- 变异规则,可添加额外规则或变化
- “每日行动”挑战
- 段位与成就(奖章)
- 智能体对战模式,两款 LLM 可以在 Battle Drones 中互相对战
- 基于两部相邻手机通过音频消息通信的多人游戏模式,这是我早先的实验 Chirp Pong 的扩展
我是如何构建它的
Battle Drones 在很大程度上是通过氛围编程构建的——我几乎没有审查过代码,而且它使用的语言(TypeScript)我自己也几乎没怎么用过。不过我对它进行了相当多的试玩测试,自项目启动以来也经历了大量迭代。
下面是迄今为止该项目的大致历程,包括关键提示词和对话记录链接。
v1:初始原型
早在 7 月,我就从 Claude Fable 5 开始着手:
We are going to build a mobile friendly RTS game - command and conquer style - called Battle Drones, in which two armies of drones (both flying and ground-based) battle for territory and resources
Let's start with a MVP design, ask me some questions
这是共享的对话记录。我为 Claude Code for Web 提供了一个包含 OpenAI API 密钥的环境变量,并告诉它使用 OpenAI 图像生成 API制作素材,这为我生成了一些基础精灵图。
你可以在这里试玩 v1——当时看起来是这样的:

它能让人一眼认出是即时战略游戏,具备建筑机制,以及选择和指挥单位的能力,还有一个可供对战的基础 AI。
第一个版本基本只是个概念验证,玩起来也毫无乐趣。
这些早期版本中,Claude 使用了 Phaser 2D 游戏框架。直到后来经过多次迭代,我才意识到这一点!
v2:完整精灵图
第二个版本(在这里试玩 v2)为所有载具添加了精灵图,还加入了“AI 对战 AI”模式,这样我就可以观看游戏自行进行,而不必亲自操控。
Claude 在提示 OpenAI 的图像模型生成精灵图方面表现得相当不错。你可以在 public/assets/sprites 文件夹中浏览 v2 的精灵图。

v3:多样化地形
游戏仍然不怎么好玩,画面也很乏味。当时已经到了 10 月,我也升级到了 Claude Opus 5.5。我对它说:
Massively improve this game. Make the graphics and gameplay better (keep it mobile friendly). Render new graphics using the latest OpenAI GPT image API (lookup details) with the API key in the environment variable. Add new unit types and balance the gameplay better. Also add new buildings and better, more varied terrain.
这次生成了五张新地图,背景地砖风格各异,可在此查看。Opus 还重新生成了精灵图,让它们在视觉上吸引人得多。你可以在这里试玩 v3——看起来是这样的:

这开始有真正游戏的感觉了!不过玩起来还是不太有趣——我发现自己很快就厌倦了。
v4:趣味性更新
到目前为止,我的 Battle Drones 实验印证了我先前的看法:编程代理可以做出看起来像游戏的东西,却无法真正打造出引人入胜、让人乐于游玩的作品。
晚餐时,我把这个想法告诉了一个人,随后心想,我应该给这些模型一个真正证明我错了的机会。我在手机上向 Opus 5.5 输入了提示:
This game isn't fun enough yet. Make it a LOT more fun.
这次我使用的是Ultracode 模式,Claude Code(此处为 Claude Code for Web)会运行“动态工作流”,其文档对此的描述是:
动态工作流是一种 JavaScript 脚本,可以同时编排多个子代理。
这启动了数小时的工作。我在晚上开始运行,直到次日早上很晚才拿到可玩的结果。但结果令人惊叹。
你可以在这里试玩 v4——看起来是这样的:

我让 Claude 撰写了自己的发行说明——以下是亮点:
现在,每场遭遇战和每日行动都会以一项选择开场,为落后的一方提供扭转局势的机会,并将双方军队引向地图中央。此外还新增了两种玩法。
- 开局选项:在计时开始前选择闪电战、工业或空军联队。
- 召唤支援技能:弹幕轰炸、电磁脉冲、空投舱和“天空之锤”轨道打击。
- 目标与废料:中继站、补给空投和可回收废料的残骸。
- 游戏体验:战斗反馈、动态音乐、单位语音和播报员。
- 指挥:战斗警报、游戏速度、已保存的小队和触屏部署。
- 新模式:坚守阵地生存波次和包含 8 个任务的行动战役。
- 进度系统:英雄、附带奖项的战后报告、生涯系统、7 个变异因子和每日行动。
战斗持续时间更长,局势反转也更多。在 Normal 难度下进行的 1,200 场 AI 对 AI 测试对局中,25 分钟后仍未分出胜负的对局比例从 14% 降至 0.9%。曾落后 800+ 废料的一方最终获胜的比例从 24% 升至 46%。
Claude 花费如此长时间的部分原因是,它运行了上千次模拟试玩,并利用结果重新平衡现有单位、添加新单位和引入新功能。
v5:Battle Drones 进入 3D
在 Ultracode 实现“让它有趣得多”并取得成功后,我决定更进一步:
Port this game to three.js with 3D models for all of the buildings and vehicles and landscapes
那又是一次通宵运行。我醒来后看到了这个 v5 版本:

全新的 3D 模型完全由 Claude 使用 TypeScript 代码构建。
v6(在此游玩 v6)增加了更多视觉润色。v7(游玩 v7)增加了机器人步兵(突击兵、火箭小队、狙击手)以及一架名为“Condor”的运兵飞机。
v8:群岛
我开始为自己对游戏实际设计投入如此之少而感到内疚——过去几个版本,我基本上只是在说“让它更有趣”以及“增加视觉润色”。
我注意到,AI 并不经常使用 v7 中新增的步兵和运兵飞机——使用它们并没有太充分的战略理由。
如果我们能加入一张新地图和一种新的游戏机制,积极鼓励玩家用步兵机器人装满 Condor,然后把它们派往地图各处,那一定很棒。
这产生了我迄今为止最长的一段提示词:
Design a new map. Goal is to make different strategic incentives that encourage use of Infantry and Condors and aerial vehicles.
To do this the map will have limited harvester resources but several more uplinks - but uplinks will be on islands that are inaccessible by land vehicles or infantry. These uplinks can also not be claimed using air vehicles. The ONLY way to get them is to fly infantry there in a Condor.
Armies always start with a Condor and a single squad. If an army has no Condor a new one will be provided for free, flying in from the edge closest to their HQ and landing there. That free condor will come with a single free squad on board.
The two HQs should be entirely separated by water, but still accessible by vehicles thanks to two bridges across the map in different places
I want to encourage a battle over uplinks.
The map should be the times the size of other maps - still square
First research and then critique this design. Only build after we have agreed on any modifications
You get to design a new biome for this
最终结果是热带的群岛地图,其中有七个岛屿链路点,玩家只能乘坐 Condor 运送步兵前去占领。掌握了更简单地图中的基本游戏机制后,这无疑是最有趣的地图。v9 版本让这张地图变得更有意思了一些——现在它看起来是这样的:

v10:Goliath 与代理对战
我决定在游戏中加入巨型机器人机甲——可以想象成《环太平洋》中的 Jaeger,或者《战锤 40,000》中的 Titan。
以下是我用来与 Claude 头脑风暴的一些提示词:
Help me brainstorm ideas for adding giant robots to this game - think dreadnoughts or titans from W20K - how could we do this in a way that enhanced gameplay, kept things balanced, added unique twist? Don't overthink this yet
Let's keep brainstorming. I like the idea that it's a mobile base - that can accept harvested scrap and can have buildings built near it (even if it later moves on) and can produce infantry units too. An interaction with condor would be neat but I don't know what that could be.
Idea: as it gets damage it loses the ability to fire some weapons - by default it has eye laser (like lancers) and arm canons (like titan) and two shoulder mounted mortars, plus machine guns similar to a squad of troops
Damage knocks out mortars and then laser - it always has guns. You can't build next to a building that was only put there because of the mech, you need the mech there for off-base building and only within three squares of it
[...] Lets do two condors can carry the mech
最终结果真的很酷。
Goliath 可以使用 Gantry 建造——这是一种只有在先后建造 Fab、Bay、Airpad 和 Tech Lab 后才能建造的建筑。你可以看到 Goliath 正在建造,随后它会从 Gantry 中走出,并在地图上行进。
Goliath 可以“锚定”,将自己挖入地下。在锚定状态下,它们可以充当新的总部,在新区域建造步兵单位和其他建筑。
两架 Condor 飞机可以钩挂到 Goliath 上,此时它就可以飞行穿越地图!
现在,只有在摧毁敌方的 HQ 建筑物以及他们可能建造的任何 Goliath 后,游戏才会结束。
此外还有几个与 Goliath 有关的变体:
- Goliath Armada 会让双方一开始就拥有四架空中的 Goliath(每架配有两架 Condor),且没有其他单位。
- Robot Love 增加了一条特殊规则:如果敌方 Goliath 在战场上彼此靠近,它们就会坠入爱河,游戏以平局结束。(这点要感谢 Natalie。)
代理对战
v10 的另一项功能是代理对战。在思考多人游戏可以如何运作时,我有了一个想法:如果不同的 LLM 能在游戏中一决高下,会怎么样?
Fun extra challenge: think about how we might make multiplayer available to coding agents. It would be neat if we could set up a battle between eg GPT-6 Sol and Claude Opus 5.5 where each model has access to a tool which gives them information about the game (presumably non-visual, but only the information they could see through fog of war etc) and lets them control their units etc [...]
Consult ~/dev/llm/docs and include notes in that file about how LLM could be used here via a new tools plugin
Opus 5.5 着手处理了这件事,生成了这份 AGENT-BATTLES.md 提案,随后完成了实现和测试。该功能还包括记录和回放这些对战的能力——这里是Claude Haiku 5.5 对战 GPT-6 Luna 的回放,这里则是同一场对战在一个独立调试工具中的呈现,其中展示了底层的提示响应。

驱动代理对战的提示可以在这里看到。
README 中还链接了几段类似的回放。我希望将来某个时候能把它做成完整的联赛积分榜。
v11:随机地图
这个版本的诞生纯粹是因为有一天我看了一眼Claude Usage页面,发现自己每周的额度只用了 75%,而且 45 分钟后就会重置。我决定看看能否用剩余令牌再做出一个 Battle Drones 功能,于是选择了“随机地图”作为目标:
Design and implement a mechanism for generating a random map using any of the available biomes - it should be the size of the largest map and rivers and bridges and rocks and forest and scrap and crystals are all in play. Make them rotationally symmetric and use a seed to allow them to be selected or reused later. You have 45 minutes to build this! Be creative.
这是文字记录,以及 Claude 生成的一张展示其工作成果的图片:

v12:通过声音实现多人游戏
我刚刚才让这个功能运行起来,所以还没有太多时间进行主动测试。最新版本的 Battle Drones 现在支持多人游戏:两台设备只要彼此处于麦克风可收音的距离内即可!
这个功能最初源自我上周进行的Chirp Pong实验。我将 Claude Code 指向了那个已经可以运行的概念验证:
Clone Simonw/tools from GitHub and look at recent branches for the example pong game that uses web microphone to implement multiplayer between two phones via audio signals
Build a version of that for battledrones
Opus 构建了这个 Radio Probe 工具,用于测量两台设备之间能够获得的带宽;在结果令人鼓舞的基础上,它实现了一套完整的音频调制解调器系统。目前我已经在笔记本电脑、iPhone 和 iPad 之间进行过尝试,效果似乎非常好!
为什么要使用声音?因为我喜欢静态 HTML,它无需任何运行成本;我也不想在某处启动一个服务器,然后只要有人可能想玩这个游戏,就一直负责维护它的运行。
一些想法
我对游戏开发几乎一无所知。这让它成为尝试在一个我已有的软件工程经验影响较小的领域使用编程代理的绝佳机会。
游戏的风险也非常低。最糟糕的情况不过是我的某个傻乎乎的游戏实验出现一个 bug。
今天早上(通过 Hacker News)我发现了Steam Next Fest 充斥垃圾内容,Steam 粉丝恳求推出无 AI 过滤器。我个人绝不会考虑将 Battle Drones 投稿到这样的活动中——它目前的投入程度仍然太低,还不足以被视为一个真正的独立游戏项目。
……但我现在已经能看到一条路径,让这类通过氛围编程制作的游戏得到认真对待。Battle Drones 很有趣,外观也不错,还具备创新功能(据我所知,通过音频实现多人游戏这一点在 RTS 中尚属首次)。
我很想看看一个品味比我更好、并且满怀热情地想创作出真正卓越作品的人能做出什么!
这个项目还有一些其他观察:
- 静态 HTML 和 JavaScript 是非常出色的游戏开发媒介。WebGL 的效果很好,而Three.js(以及在它之前使用的Phaser)都是非常优秀的构建平台,目前的模型对它们也了如指掌。
- 这还让它们能够作为渐进式 Web 应用运行——我并没有提出这一要求,但 Battle Drones 可以离线运行。我甚至能在飞机上玩它,尽管我从未直接安装过它——我的手机已经将它缓存了。
- 给 Claude 一个 OpenAI API 密钥,并告诉它使用 OpenAI 的模型生成图像,效果非常好。它可以查看自己生成的图像,并不断迭代提示词。
- Opus 5.5 使用 Three.js(以及 Blender,毫无疑问还包括其他 3D 应用)进行 3D 建模的能力非常出色。GPT-6 Astra 也是如此。它们绝对能够为 3D 游戏项目构建模型。
- 对于回放和多人游戏等功能,拥有一个确定性模拟引擎非常有用。有一次,Claude 不得不将对
Math.sin()和Math.cos()等的调用替换为自定义版本,因为不同浏览器(例如 Chrome 和 Safari)返回的数字存在极其细微的差异,导致回放不同步。 - Opus 5.5 能创作音乐!这个项目中没有任何音频文件——配乐完全通过代码生成,会随着不同地图而变化,甚至会随着战斗升温而变得更加激烈。有关 Claude 音乐创作的早期实验,请参见 Scrimshaw Jukebox。
- 我至今仍无法不惊叹于“让它有趣得多”的提示词效果有多好。
- 工具实际上是免费的。我提示它完成了 Radio Probe、Model browser 和 Agent vs. Agent debug tool,而 Claude Code 还为自己构建了一大堆工具,其中一些我自己甚至还没探索过。
- 基于音频的静态 HTML 游戏之间的多人游戏确实可行!我希望看到更多游戏采用这种模式——今天我仔细搜寻了一番,除了 Alon Horesh 开发的 Siner 和 Georgi Gerganov 开发的 ggwave(他也因
llama.cpp而闻名)之外,没找到多少先例。 - Claude Code 的“Ultracode”消耗令牌的速度快得仿佛明天不会到来,但它也能仅凭一个提示词解决复杂问题(例如添加基于音频的多人游戏)。
- 我仍然没有完全摆脱以这种方式开发软件所带来的愧疚感。我觉得自己没有资格创造出这么优秀的东西,尤其是在一个我此前几乎没有经验的领域!此时此刻,我已经私下向足够多的人展示过它,所以如果不把它发布出来,让其他人也能看到并从中学习,我反而觉得不妥。
来源:Simon Willison · simonwillison.net