vibe coding 做小游戏·开工篇:5 天、8400 行代码一行没手写,先让 AI 能检查自己

上图是这款游戏现在的样子。它叫「圣光防线」,是一款竖屏塔防,10 月 25 日开工,到今天是第 5 天:

  • 两种玩法:战役模式从第 4 关起程序生成关卡,可以一直打下去;对战模式是 1v1,征兵、拖进坑位、合成升级,合出英雄。
  • 全部素材自制:22 个角色和全部场景、界面由 AI 生图,21 个音效和背景音乐用代码合成。
  • 能在手机上玩:打包成 13.84MB 的微信小游戏,已经在 iPhone 的微信里跑起来,适配了灵动岛。
  • 代码规模:77 个 GDScript 文件、8408 行,另有 573 个测试函数。

这些代码全部由 Claude Code 编写,我没有手写过一行。我做的事是提需求、试玩、拍板,以及处理账号注册、扫码登录这类只能本人做的操作。

这个系列按时间顺序记录它从开工到上线的全过程:开工、玩法、素材、打包、微信小游戏、对战模式、抖音与软著、上线。目前还没有上线,后面几篇会跟着进度写。

本篇讲开工第一天。值得单独拿出来讲的是三件事:AI 开工前先问了什么,引擎定下来之后查出了哪些平台约束,以及为什么在写第一行玩法代码之前,先搭了一套让 AI 检查自己工作的工具。后面 5 天能一直往上加功能,靠的就是这套工具。

开工第一句话:AI 先问了 4 个问题

我对 Claude Code 说的第一句话是:做一个塔防游戏,引擎用 Godot,角色想参考一款老游戏。

它没有直接开写,先提了一个版权问题:那款游戏的角色名字和美术都属于原厂商,如果打算公开发布,就只能借用玩法和题材,名字、美术、数据都不能用。然后用 4 个选择题把范围定下来:

问题 我的选择
做出来打算怎么用? 公开发布
美术资源怎么处理? AI 生成原创素材
塔防用哪种形态? 路径塔防(敌人沿固定路线走,玩家在路边建造)
第一个可玩版本做多大? 最小可玩:1 张地图、3 种塔、8 波亡灵、金币和生命值

这 4 个问题看起来普通,后面每个都起了作用。「公开发布」让版权规则从第一天就写进了项目说明:代码、数据、美术和生图 prompt 里都不能出现现有游戏的名字。「最小可玩」让第一天结束时就有一局能完整打完的游戏,后面所有改动都建立在这局游戏上。

Godot 是我定的,AI 查出了平台约束

引擎是我开口就指定的,没有做过横向对比。AI 没有质疑这个选择,它做的是:我说了目标平台是 Steam、微信小游戏和抖音小游戏之后,去查 Godot 在这三个平台上分别是什么情况。查到的结果是:

  • 抖音有官方的 Godot SDK,但只支持 Godot 4.5,不支持自定义导出模板,只能单线程运行。项目用的是 4.7。
  • 微信没有官方的 Godot 支持,只有社区维护的导出模板,其中一个有 4.7 版本。
  • 包体:主包上限 4MB,总包上限 20MB(调研时查到的是 30MB,后来推预览被拒才知道是 20MB)。光 Godot 引擎就要好几 MB(实测压缩后 8.4MB),必须放进分包。
  • iOS 上必须开启微信的高性能模式。
  • 小游戏环境里没有系统字体,中文字体要自己打包。

AI 的建议是保留 Godot,Steam 版照常做,等三张地图做完,花一两天把游戏导出到真机上验证,验证不通过再考虑换引擎。后来的事实证明这一步是必要的:真机上卡在加载、iPhone 黑屏这些问题,都是在这个阶段才暴露出来,第 5 篇会详细讲。

第二天又定了一件影响全局的事:全平台统一竖屏,电脑上也是一个竖长窗口。画面从 1280×720 改成 720×1280,三张地图全部按竖屏重新排布,顶栏右侧留出微信小游戏右上角胶囊按钮的位置。这个决定越晚做,返工越多。

先搭工具,让 AI 能检查自己的工作

用 AI 写游戏有一个天然的盲区:它看不到画面,也不会亲手玩。代码能编译,不代表游戏能玩;测试全过,也不代表画面没有错位。所以第一天在写玩法之前,先搭了一套让 AI 自己验证的工具,全部做成 make 命令:

命令 做什么 防住的问题
make test 跑全部单元测试(GUT 框架),无头运行,失败就返回非零 改一处坏一处
make lint 把 GDScript 的警告当成错误 Godot 命令行默认不打印警告,问题悄悄留在代码里
make smoke 无头启动游戏,8 倍速自动打完一关,出现任何引擎或脚本报错就失败 测试覆盖不到的运行时错误
make frames 自动游玩一关,每个游戏秒存一张 PNG AI 看不到画面

前三条是常规做法,但每条都有 Godot 特有的坑。例如 Godot 的命令行从不打印 GDScript 警告,不专门处理的话,警告根本不会出现在 AI 能看到的输出里。make lint 的做法是运行前临时放一个配置文件,把所有警告升级成错误,跑完再删掉。

测试方面,项目规定先写测试再写实现。测试数从第一天的 118 个,一路涨到现在的 573 个。AI 也如实说明了一个限制:GDScript 没有覆盖率工具,所以「80% 覆盖率」这条要求无法度量,只能靠先写测试的习惯来保证。

make frames:让 AI 看到游戏画面

第四条是这套工具里最关键的。Godot 自带的录制功能可以把游戏逐帧输出成图片,make frames 让游戏自动游玩第一关,4 倍速跑 90 秒,每个游戏秒存一张 PNG,一共 91 张。AI 用读图能力逐张看这些图,检查角色有没有站在路上、血条有没有被遮住、特效是不是对的位置。项目说明里写得很直接:这是在命令行里看到游戏的唯一方式。

后面 5 天,改界面和美术时都会用到它。换竖屏那次,AI 还用同样的思路批量截了几种屏幕比例下的界面,逐张检查按钮和菜单有没有出界。

这套工具也会出问题,AI 自己也踩过坑。比如有一次它把 smoke 的输出重定向到了它接下来要读取的同一个文件,读的同时文件在增长,结果陷入了死循环。另一次更严重:它做了一项启动优化,在编辑器里验证通过,但导出成安装包之后,一个数组被引擎清空,点「出征」直接崩溃。这件事之后,打包命令加上了一步:打完包后自动用导出的版本玩一关,检查退出码。第 4 篇会详细讲这次崩溃。

开工第一天的几条做法

做法 原因
开工前让 AI 先问清用途、美术来源、玩法形态和第一版范围 这些答案决定了版权规则、素材流程和第一天的交付物
引擎定下后,先查清目标平台的支持情况和包体限制,再排一次真机验证 小游戏平台对 Godot 的支持很薄,问题只有在真机上才会暴露
竖屏还是横屏尽早定 越晚改,地图、界面和截图的返工越多
写玩法之前先搭测试、lint、自动游玩和截帧 AI 看不到画面也不会亲手玩,这些工具让它能自己发现大部分问题
AI 自己踩过的坑,改成一条自动检查加进命令里 同一类问题不会第二次漏过去

下一篇讲玩法:我的每一句试玩反馈,是怎么变成无限关卡、局外积累和援军登场这些系统的。

相关推荐
Huanzhi_Lin2 小时前
资源回收源码阅读参考-上
游戏开发·gc·laya·layaair·资源回收·laya3.4
vivo互联网技术3 小时前
从知识沉淀到编程范式:AI Coding 项目冷启动落地实践
ai编程·全栈·vibecoding
SmalBox3 小时前
06-04-源码-加密解密服务
unity3d·游戏开发
超级架构师3 小时前
让 COBOL 长出 AI 大脑:原生 Agent 核心框架 praxo-core 深度剖析
c语言·开发语言·c++·人工智能·python·架构·ai编程
UWA3 小时前
告别「好像还行」:制作人别再靠感觉做线上质量决策|GPM 小Q MCP 实战
性能优化·游戏开发·gpm
挖掘狂人4 小时前
AI 代码上线前,真正的瓶颈不在 "写",而在 "验"
ai编程·测试·代码规范
一缕82年的清风5 小时前
别再手写几千字 Prompt 了:GitHub 狂揽万星的 Agent Skills,宣告了玄学的终结
gpt·chatgpt·claude
网易CodeWave-小码哥5 小时前
AI Coding 实战:用 EARS、原子任务与 E2E 测试减少返工
人工智能·ai编程·ai coding
codigger5 小时前
AI 代码上线前,真正的瓶颈不在 "写",而在 "验"
ai编程·代码质量·契约测试·变异测试