下载 App

开发者日志 ⑤:不会写代码,用 AI 做游戏

昨天 13:461 浏览 包含 AI 合成内容
#聚光灯gamejam开发者日志这个项目从 10-02 到今天 10-15,14 天,88 次提交,164 张卡、107 条配方、24 座建筑、56 个 Lua 模块。
这些代码没有一行是我手写的。
但我要先把话说全:「我不会写代码」不等于「我没有在思考」。 这 14 天里我做的最多的事不是生成代码,是判断代码对不对。
这是两种完全不同的工作量,而后者才是真正的门槛。
一、别让 AI 直接开始写
我犯过的最大的错,是第一天就把需求丢给它然后等着。
正确的顺序是这个:
代码块
先让它读代码 → 再让它给方案 → 你批准 → 它才动手
举个例子。我要加「土壤肥力」系统,第一句话不是「帮我实现土壤肥力」,而是:
先读一遍现有的 Production.lua 和 Config.lua,告诉我现在作物收获时会改哪些字段、土壤卡有哪些属性。读完先不要改代码。
为什么这一步不能省? 因为 AI 对「你现在的代码长什么样」默认是猜的。它猜的时候会用最常见的写法,而你项目的写法不一定是常见的。
后面我会讲到,我因为这个吃过四次亏。
二、让它写测试,而不是让它「注意」
这是我最想分享的一条。
10-12 我给配方系统加「标签规则」——让「任意作物 + 粪便 → 堆肥」这种通用规则可以被写出来,不用给每种作物抄一遍。
我顺手把通用规则放在了配方表的第一行。
跑测试才发现全错了。原因是:find 用顺序扫描,命中第一条就返回。通用规则在最前面,把所有具体配方全抢走了。
最可怕的是它不报错。 游戏照常跑,日志一片干净,只是番茄忽然种不出番茄了。
所以我没有让 AI「下次注意」,我让它写测试:
护栏测试 守什么
标签词表完整 卡上用到的标签都必须登记
尾缀纪律 通用规则必须在数组末尾
零遮蔽 逐条验证具体配方没被抢走
无成环 不能出现免费刷资源的闭环
写完我还让它做了一件事:故意把规则挪回前面,看测试会不会报错。
会。这四条护栏才算真的存在。
没验证过的护栏不算护栏。
这一条适用于所有「让 AI 别再犯」的场景:你让它记住,它下次还会犯;你让测试盯住,它永远犯不了。
三、数字必须自己算,不能让它拍
10-05 我让它做了一件事,是我这 14 天里最值的一笔投入:
把 Config.lua 里所有数值提取出来,建约束链,交叉验证代码是不是真的读了它们。不许用「感觉」下结论。
出来的结论是三个字:不可玩。
三处结构性断裂,其中最要命的一处是这样算出来的:
代码块
一天 86.4 秒 ÷ 天气间隔 43.2 秒 = 一天 2 次天气
夏季晴天权重 27%
→ 每天阳光产出 = 2 × 27% = 0.53 张
→ 而每株作物必须消耗 1 张阳光
→ 全年理论产量上限 193 株
→ 而任务要求累计卖 9000 币
→ 即使全程种番茄也只有 579 币
产出率比任务门槛低一个数量级。
这不是「玩家要努力一点」,是这个游戏在数学上就通不了关。
而在此之前,游戏能跑、测试全绿、构建成功——它是一个完整的、无 bug 的、且不好玩的游戏。
测试全绿 ≠ 游戏能玩。 测试只验证「代码按写的跑」,验证不了「写的东西是对的」。
这个方法我后来固化成了纪律:
数值不得凭感觉写:先跑脚本得约束链,再定目标曲线。顺序不能反。
先定「一株番茄应该几天」再调参数,是设计;先调参数再看结果,是赌博。
四、AI 会说谎,而它不知道自己在说谎
这是最难防的一类。
10-12 写固氮规则,AI 在文档里写:
不新增卡牌,只给现有作物打标签。固氮作物:豌豆、大豆、三叶草、卷心菜。
写得很专业、很完整、逻辑自洽。
而这四种作物,一张都不存在。
它不是在骗我,它是在补全——它觉得这些作物「应该有」,就写上了。这是语言模型的工作方式。
后果是:固氮规则写完了、测试通过了、代码跑得一点没错,而它永远不会生效。玩家永远等不到那块地自己回肥。
同一天我清出来同类问题四处。最离谱的一处:我提议把一年从 365 天压到 48 天,理由是节奏太慢。核对后才发现 365 不是孤立数字——它是整套二十四节气历法的坐标系,改它等于推翻全部历法。那个提议撤回了。
我给这类错误起了个名字:凭印象写,没回代码核对。
防法只有一条,写进项目纪律的第一条:
动任何文件之前,先核对「记忆」与「实际文件」是否一致。
我踩过三次之后才把它提到第一位:
用旧版配置审计 → 得出「11 个建筑拿不到」的错误结论(其实早就改好了)
记的「顶层变量 194 个」,实测只剩 163 个
按旧行号去改代码,行号已经漂移了几百行
用过期事实回答,比不回答更糟。 因为它看起来是对的。
五、报错要贴原文,别转述
User-facing 的沟通里,我最坚持的一条:
出了问题,把报错原文整段贴给 AI,不要自己转述。
原因很实在:转述会丢信息,而丢掉的那部分往往是关键。
举个真实例子。早期有一次每次进配方页就崩溃,我的描述是「进配方页会崩」。这个描述没用。
贴上原文之后,AI 一秒定位:LoadLayout 在第 420 行被调用,但它在第 992 行才 local function 定义。Lua 的 local 只在自己那一行往后可见——声明之前读到的是 nil。
这个坑后来占了整个项目 bug 的六成,它有三种症状:
症状 表现 难度
抛错 整层黑屏 容易,看得见
静默失效 有 if x then 守卫 → 不报错,整块不跑 难,看不见
误读全局 恰好有同名全局变量 → 跑出完全无关的行为 最难查
第二种最贵。10-04 那次「合成通知链断裂」就是它:玩家做了一百次合成,进度条一动不动,日志干净得像新装的。
六、让它解释,直到你能复述
我不懂 Lua,但我最后能读懂这个项目在干什么。
方法是:每次它给方案,我要求它先讲清楚「为什么这么改」和「改了会影响什么」。
讲得我听不懂,就让它换说法。讲到我能用自己话复述一遍,才让它动手。
这件事有两个作用:
过滤错误方案。 它讲不清楚的方案,往往是它自己也没想清楚的。
让你有判断力。 14 天之后,我能看出来「这个改动会打断动物 AI 的坐标语义」这类问题——不是因为我学会了 Lua,是因为我搞懂了这套系统的因果。
七、生产出来之后,必须自己玩一遍
这是第 4 篇的内容,但作为方法论它值得再说一次。
10-14 我提交了当天最大的一次改动(49 个文件,+4789 行),然后在日志里写「建议下一轮先做真机试玩」。
第二天真机试玩,21 小时里修了 24 个问题:
弹窗正文 20 号字、补货按钮 9 号字——手机上根本看不见
「日常订单」按钮被历史遗留偏移挤到屏幕外
图鉴翻页按钮在单页时隐藏 → 玩家以为「按钮不见了」
拖卡松手卡自己飞回去(四个独立成因,连修四个提交)
新加的两张卡忘了配图,真机上直接加载失败
没有一个会报错。全部是「程序自认为一切正常」。
按钮确实被渲染了,只是坐标在屏幕外。翻页按钮确实按逻辑隐藏了。卡确实被正确地移回了「原位」。
只有人拿起来说「这不对」。
八、最后一条:让它写文档,尤其是「不要照着做」的文档
这个项目有一份 MEMORY.md,按事故类型分节,不是按功能分节。
我明确要求它这么做,理由是:按功能写的文档会告诉你系统长什么样,按事故写的文档会告诉你哪里会咬人。
里面有一段是这样写的:
⚠️ 以下是死配置:注释写得很专业,但代码从不读。 照它们调平衡会得到全错结果。
还有一段:
⚠️ 本文下面写的「一天 720 秒」未采用,实际是 86.4 秒。 本节保留仅为记录当时的推导过程,不要照着它调平衡。
让 AI 把「自己曾经的错误」也写进文档,这是最有价值的一类内容——因为它是不会再犯第二次的错,而你会犯。
如果重来一次
做法 我会不会再做
先让它读代码再给方案 会,一步都不能省
用测试代替「注意」 会,收益最高的一笔
跑脚本算数值 会,它救了整个项目
每次都核对记忆 vs 实际 会,这条排在纪律第一条
贴报错原文不转述 会
要求它讲清楚为什么 会
真机试玩留到最后 不会。 应该每两天就玩一次
最后一行是唯一后悔的。
我在电脑上跑了几千条测试,然后攒了 4789 行改动才第一次拿起来玩——结果那 4789 行里的问题,测试一条都没发现。
写在最后
这 14 天我学到的,跟代码关系不大:
AI 会把事情做得很快、很完整、看起来很专业。它的产出永远比你手写的好看。
所以你的价值不在写,在于判断它写对了没有。
而判断力只有三个来源:真机玩过、数字算过、报错读过。
开发者日志 ④:真机试玩截图
开发者日志 ④:真机试玩
10-15,21 小时,24 个提交。 这是一篇没有英雄叙事的日志——它记录的是我做完游戏之后,第一次真正拿起来玩,然后发现它有多不好用。 前一天的豪言 10-14 晚上 23:00,我提交了那天最大的一次改动:49 个文件,+4789 / −301。 变异遗传、土壤贴图、人员走动、季节契约,全在里面。项目单日最大的一次改动。 然后在日志末尾,我写了这么一段: 按项目约定本轮未触发远端构建,即所有
开发者日志 ③:鸡饿了会去吃你的苗截图
开发者日志 ③:鸡饿了会去吃你的苗
讲一条我自己最喜欢的规则,以及它怎么把整个农场串成一条会自己闭合的环。 起因:家畜太无聊了 最早的家畜是一个产出器。 鸡身上挂一条饥饿条,单向下降。你喂它草,条就涨回去。饿了它就变骨架。 它能跑,但它没有生命——它不会做任何你没让它做的事。 我想让家畜变成「会自己做事的存在」。不是为了真实感,是为了让农场变成一个生态,而不是一排并列的产出机器。 【配图:牧场场景,鸡、牛、羊散在牌桌上】 先纠正了一
如何使用一周时间作出一款游戏截图
如何使用一周时间作出一款游戏
参加 TapTap 2026 聚光灯 21 天挑战的第 13 天。 这是我写给玩家的第一篇日志,想先回答一个问题:我到底做了个什么东西。 一句话 把一张卡拖到另一张卡上,等一会儿,上面那张会变成别的东西。 这就是全部操作。没有虚拟摇杆,没有技能按钮,没有连招表。 剩下的 164 张卡、107 条配方、24 座建筑,都是这一句话长出来的。 从一颗番茄说起 游戏里种一株番茄是这样发生的: 你把番茄种子
2 回复
开发者日志 ②:我怎么让一块地有了记忆截图
开发者日志 ②:我怎么让一块地有了记忆
起因:我不满意「土壤」 最早的土壤是一张消耗品卡:种 5 次就没了,施一次肥补回来。 它能跑,但我越看越不对——玩家对它没有任何决策。它只是一个倒计时,你会做的只有「记得补肥」。 农场游戏里,土地不应该是背景板。你在一块地上种过什么、种了几次、有没有让它歇过,这些东西应该留下痕迹。 所以我想让土壤变成一个有历史的实体。 六态状态机 现在它有六个状态: 状态 怎么进去的 长多快 还种子吗 新垦 开卡