vibe coding 做小游戏·玩法重做篇:只留自走棋、去掉羁绊,用电脑自动对局调难度

上图是游戏现在的样子:名字从「圣光防线」改成了「合合兵团」,首页只剩一个「开始游戏」,进去先选阵营,合到最高星会出隐藏兵种。上一篇预告这一篇讲资质手续,手续还在办,软著也还在等答复,所以这一篇先讲 11 月 2 日到 8 日这一周的主要工作:改玩法。

这一周做了五件事:查到了上一篇遗留的卡顿的根因;只保留自走棋闯关一个模式,地图改成无尽;把「没有成就感、没有危急感」改成六条具体规则;定下以兵种为主线,改名,去掉羁绊,分成两个阵营并各加一个隐藏兵种;按一份画风规格重画了 40 张兵种图,加了开场故事。一周下来测试从 737 个增加到 828 个,微信包 16.13 MB。

这一周写代码依然不是瓶颈,难的是判断好不好玩。这类判断全部是我做的:不要结局、主线放在兵种上、去掉羁绊、元素兵「不要变成人」、名字和 slogan。AI 起了六轮名字,最后用的「合合兵团」是我自己说的。

AI 的作用在另外两件事上。一是把我一句模糊的感受拆成能改的规则,并指出问题出在哪个数字上。二是每改一次规则,就让电脑自己打 8 到 16 局,把「难不难」变成第几层第一次输、最后爬到第几层。去掉羁绊之后游戏有没有变难,我自己玩一局说不清,它跑了 16 局给出答案:1 到 9 层,8 局里 7 局全胜;第 10 层首领,8 局里 7 局要输一次。

上一篇的卡顿:一个涨到 121.8 MB 的统计文件

11 月 2 日我在 iPhone 17 上试玩,点「开始」要卡很久,点「战斗」也卡,资源加载完之后提示内存不足退出;随后电脑上的模拟器也变成每点一个按钮都卡住。

AI 查到的原因在数据统计上。游戏把每个事件写进手机上的一个记录文件,旧代码的写法是往文件末尾追加。微信小游戏的文件系统里,追加一次实际上会把整个文件再复制一遍,文件越写越大。模拟器上这个文件已经涨到 121.8 MB。点开始、开宝箱这类按钮都会记一条事件,每次都要把一百多 MB 读一遍、再写一遍;启动时也要读它,加载页就停在「引擎初始化中」。iPhone 报内存不足,AI 判断也是这个原因。

改法是文件只保留最近 500 条,每次整份重写,超过 1 MB 的旧文件直接删掉、不读。存档也一起换了地方:原来写在同一套文件系统里,改用微信的 wx.setStorageSync,每次写完读回来比对,写失败就保留上一份存档。第一版用 JavaScriptBridge.eval 调微信接口,在模拟器里被拒,因为小游戏禁止 eval;改成通过接口对象直接调用 wx 才通过。模拟器实测:

修复前 修复后
启动到首页 31 秒 3 秒
点「开始」 27 秒 0.17 秒
开宝箱 13.3 秒 0.16 秒

代价是我手机上原来的存档可能已经丢了:空间被这个文件占满之后,存档写不进去。AI 修完时专门告诉了我这一点。

用户数据要不要放服务器,当时也一并查了。微信云开发在开发阶段免费,上线后要按月付费,基础套餐 19.9 元/月;自建服务器则要有备案的域名和 HTTPS。AI 的建议是上线时先存在本地,云存档放到上线以后,我同意了。

只留一个模式,地图改成无尽

11 月 2 日我决定只保留自走棋闯关一个模式,先把它做到能上线。前几篇讲的塔防战役和 1v1 对战先暂停,代码留着,首页只剩一个开始按钮。自走棋是 10 月 29 日从对战模式改出来的,玩法是:每一层先在商店花金币招兵,摆到棋盘上,两个同名同星的兵自动合成,升一星;摆好以后双方自动开打,打完在地图上选下一站。

首页这个按钮前后改了几版:先是带扫光的大按钮,我嫌丑,让 AI 调研什么样的按钮点击率高,选了它给的橙金立体款;后来又换成和盾徽画风一致的金边蓝珐琅牌匾。魔法塔和宝箱缩小,摆在左下角和右下角,不抢开始按钮。

11 月 4 日我说地图上「每一个选择应该能对应不同的结局」,AI 给了一个四结局方案:三条路线各通往一个最终首领,再加一个全程不输才能打出的隐藏结局。我随后改了主意:不要结局,否则玩家打完就没得玩了。地图改成按章节无限生成,每章开头分三条路线:险路、兵营路、休整路,首领三个一轮换。

无尽模式一做出来就有一个漏洞:输了也能继续往上走。电脑自动玩,最后一场胜利在第 10 层左右,却靠一路输爬到了第 21 到 35 层。AI 先试了「输了必须重打」:骨龙首领只有远程兵打得到,电脑每次重打的结果都一样,第 10 层成了一堵墙,所以没用。它改成连输一场就多扣 8 点生命。这条规则当天又被下面的三颗心取代了。

「没有成就感,也没有危急感」拆成六条规则

11 月 4 日试玩完,我说:「感觉这个模式还是不好玩:1. 没有什么成就感;2. 没有什么危急感(不知道应该什么时候用广告救场)。」

AI 看了数值,认为两个问题出在同一处:生命有 100 点,一场输掉只扣 5 到 15 点,输一场无关紧要;开打前看不出这一仗难不难,只能打完才知道;援兵广告按「首领、精英、刚输过一场」这些规则出现,和玩家实际危不危险没关系。它提了六条,我全选了:

  1. 三颗心:输一场掉一颗,输给首领掉两颗,休息回一颗,只剩一颗时那颗心一直跳。
  2. 开战前战力对比:棋盘中线写「我方 216 vs 敌方 459 · 危险」,按优势、势均、危险标绿、黄、红。
  3. 圣光救场:战斗中明显要输时出现,全军回满血,并对所有亡灵造成最大生命 40% 的伤害;每场一次,每局两次。
  4. 战斗评级:完胜、险胜、胜利,再加上本场之星和它打出的伤害。
  5. 里程碑:打败首领时显示「第 N 章 · 攻克」,局中超过历史最高显示「新纪录!」,首页显示最高纪录。
  6. 战力可见:顶栏一直显示战力,阵容变强时数字跳一下。

「危险」的标准由自动对局的数据定。AI 让电脑按开战时双方的战力比统计胜率:0.5 到 0.7 一局没赢,0.8 时 8 局赢 5 局,1.0 以上几乎全赢。所以战力比 0.9 以下标危险,0.9 到 1.15 标势均。援兵广告只在两个条件同时满足时出现:这一仗危险,而且商店里已经没有买得起的兵。玩家能做的都做了还打不过,这时候看广告才值。援兵和救场都是广告位,微信版上线时暂不开放,原因见最后一节。

音效也是这一周换的。我让 AI 参考了我们做视频时调研过的音效方案,它下载了 Kenney 的四个 CC0 音效包,重做按钮、打击和胜负提示。AI 听不到声音,挑胜负音效时量的是旋律走向:上行的用在赢,下行的用在输;交付时它也写明,好不好听要我上手机听了才算数。我说法术还是没有声音,它查出三个原因:

  • 声音在施法瞬间就播完了,而特效要飞 0.3 秒以上才落地;
  • 19 种法术特效只共用 5 个声音;
  • 战斗激烈时同时发声的通道满了,法术声被挤掉。

改完后每种法术有自己的声音,最响的一下对准特效落地的时刻,通道满了时法术声优先于刀剑声。

先定主线再改名:「合合兵团」和「合出天使,消灭亡灵」

11 月 5 日我想给游戏换名字和 slogan。AI 先看了微信小游戏畅销榜:头部多是塔防,自走棋几乎没有同类;热门游戏取名大致两种套路,一是动作加对象,二是角色加口语。

接下来它起了六轮名字,一轮都没有用上。前两轮按市场热词起,我都不满意;我说名字应该围绕游戏内核,不要出现玩法类型和元素这些表层的词,它起了「微光成军」「长夜破晓」;我让它按动作加对象来,它起了「给亡灵一点光看看」「点亮长夜」。

起到这里我意识到,名字定不下来,是因为游戏的主线还没定:到底以兵种为主线,还是以魔法为主线?AI 的回答是兵种是每一局的主玩法,从几个小兵一路合成成军团;魔法是指挥官的本事,关键时刻扭转战局,但不替代军队。我同意了,然后想要一个叠字、一听就知道是「合兵」的名字。它第六轮给了「叠叠兵团」「小兵成军」等,并提醒有一个读音很近的已有游戏名要避开。最后我定了「合合兵团」。

slogan 它起了一批,我回了一句「太烂了」,然后自己写了「合出天使,消灭亡灵」。AI 接着指出一个问题:游戏里当时合不出天使。我说没问题,先这么写,后面迭代再加。三天后天使做出来了。

名字定下之后,AI 提醒了两件要我本人办的事:在微信后台查名字有没有被占用;后台名称要和软著申请上的名字一致。

去掉羁绊,分成两个阵营,各加一个隐藏兵种

同一天我又提了三条:先去掉羁绊,尽量降低复杂度;兵种分阵营,人类一方、元素一方;每个阵营加一个隐藏兵种,人类是天使,元素是凤凰。

去掉羁绊以后,职业只决定兵怎么打,阵营只决定长相和配色。AI 让电脑跑了 16 局,8 局不看广告,8 局把援兵广告都看了,对照目标看结果:1 到 9 层,8 局里 7 局全胜;第 10 层首领,8 局里 7 局输一次;之后多数在第 12 到 15 层把最后一颗心输掉,最终爬到 9 到 19 层,中位数 14 层。看不看援兵广告,结果几乎一样。它建议先不调数值,因为兵种名单马上要整体重做,到时候一起调。

隐藏兵种多久该出现一次,AI 给了几个选项,我选的是「大多数玩家一局能合出一次,大约在第 8 到 10 层」。天使由两个十字军(步兵线 4 星)合成,会飞,每 3 秒给全军回 8% 的血;凤凰由两个烈焰巨灵合成,会飞,攻击带灼烧,每场战斗阵亡后能复活一次。第一次合出来时全屏演出,游戏暂停。

11 月 8 日我又问:能不能开局就选一个阵营,这样合成的概率会变大?AI 先算了一下:每个费用档两个阵营各有一张卡,只留一个阵营,商店里每张卡出现的概率直接翻倍,凑齐的速度也快一倍。模拟的结果是隐藏兵种 16 局全部在第 3 到 5 层出现,不再「隐藏」;前期也太简单,第一次输推迟到了第 19、20 层。它的建议是做,但同时重调两处数值:第 1 层商店里 1 费兵的比例从 70% 降到 50%,因为每个阵营唯一的 1 费兵正是隐藏兵种那条线;亡灵每层的强度增幅从 1.15 倍调到 1.17 倍,补回合成变快带来的强度。调完之后两个阵营各跑 16 局:

爬层中位数 第一次输 天使 / 凤凰出现
两阵营混合(改之前) 19 层 中位第 10 层 16 局里 6 局,第 5--10 层
只限阵营,不调数值 19--22 层 中位第 19--20 层 16 局全有,第 3--5 层
只限阵营,重调数值 19 层 中位第 10 层 16 局里 13--14 局,大多第 5--10 层

40 张兵种图和一份画风规格

我觉得兵种和英雄的画风不统一,英雄「做得太炫了」。AI 先写了一份画风规格,再出图:头身比 1:1.2,深棕色粗描边,平涂加一处高光,光从左上来;1 到 3 星不发光,4 星只加一点闪光;全部朝右、透明底;同一条线画的是同一个人,每升一星大约长高 10%,从布衣到锁甲到板甲,4 星加披风。

它先按这份规格出了步兵一条线给我确认,我同意后再批量出其余几条,最后 40 张图进了游戏。元素一方改了两次。我说元素兵看起来一般,它把雷元素重画成了人形,我回:「不行,有点丑,还是保持元素风格,不要变成人。」最后去掉了雷元素这条线,改成风元素升级后变成雷霆,元素一方保留 4 条线。

出图仍然是 Claude Code 在浏览器里操作网页版 ChatGPT,做法和第 2 集一样。这次碰到两个新问题:

  • 一条消息要几张图,ChatGPT 会报「Error in message stream」断流,连着两次之后,改成一条消息只要一张;
  • 下载目录被系统权限挡住,读不到下载的图。AI 改成把图在页面上放大,分别垫黑底和白底各截一张,用两张截图的颜色差算出每个像素的透明度,再还原颜色,得到透明底的图。

字体也换了:标题、按钮和卡牌名用站酷快乐体,小字继续用思源黑体,两种都是 OFL 开源授权,按游戏里用到的字裁出子集。快乐体只裁了约 640 个字,包体多了 76 KB。

开场故事:让玩家知道自己在打什么

11 月 8 日我又提了一条:「开始时最好穿插一些故事背景介绍,现在直接展示第一章,爬多少层,玩家根本不知道在玩什么。」

AI 做了四页开场:亡灵苏醒、你是指挥官、一层一层打上去、天使的传说,最后一页只放天使的剪影。故事只在第一次开局时讲一次,可以跳过,设置里能重看。地图顶部加了一行目标:「登上黑塔:每层一战,打败首领进入下一章」。讲完故事就进选阵营的页面。

离上线还差什么

这一周 AI 列了上线规划,判断是最慢的环节是手续,不是代码。代码这边已经做的:

  • 流量主还没开通,微信版暂时不出现任何看广告的按钮,就算有代码误调广告也不会发奖励;
  • 存档存在本地,上线不需要服务器;
  • 设置页可以重看故事、看关于、删除存档;
  • 接了微信官方的反馈按钮,玩家留言进后台的「反馈管理」;
  • 接了 We分析 的 6 个事件,包括开局、每场战斗的结果、隐藏兵种在第几层出现,事件要我先去后台登记;
  • 分享卡片,文案是「合出天使,消灭亡灵!」。

要我本人办的:在后台填名称、头像和简介,微信认证,ICP 备案,商标检索,资质审核。资质审核要签声明,AI 的规则是签之前把原文发给它一起读,里面要是有「未使用 AI」这类表述就先停下。这件事和软著放到下一篇讲。

这一周的几条做法

做法 原因
好不好玩、叫什么名字,由人拍板 AI 起了六轮名字没有用上;「不要结局」「不要变成人」都是试玩后才知道的
一句感受先落到具体数字上再改 「没有危急感」对应的是生命 100 点、一场只扣 5--15 点
每次改规则都让电脑跑 8--16 局 去羁绊、限阵营的影响玩一局看不出,模拟给出第几层第一次输
阈值用模拟数据定 战力比 0.8 时 8 局赢 5 局,危险线定在 0.9
先写画风规格、出一条线确认,再批量出图 40 张图风格统一,返工只发生在元素那几条线
先做减法 只留一个模式、去掉羁绊、元素线从 5 条减到 4 条
AI 听不到、看不到的地方明说 音效按旋律走向挑,交付时写明要我上手机听
相关推荐
灵感__idea10 分钟前
Claude Code 实战:AI这么强了,为什么还在发明新概念?
aigc·ai编程·claude
Carson带你学Android15 分钟前
AI时代,你的 App 会被 Agent 这三种方式调用
android·ai编程
装不满的克莱因瓶25 分钟前
【SpringAI Alibaba】ReactAgent记忆管理MessageTrimmingHook与MessageDeletionHook
java·人工智能·ai·ai编程·springai·springaialibaba
西安小哥1 小时前
给 LLM 网关加一层熔断:主模型挂了 42 秒以后我做的事
ai编程
聪明的笨猪猪3 小时前
政务知识库AI架构选型:强合规约束下的架构决策与落地路径
经验分享·架构·ai编程·政务
唐老板3 小时前
最会审代码的 AI,也只挑得出三分之一
人工智能·ai编程
SmalBox11 小时前
09-01-生态-YooAsset+HybridCLR热更新方案
unity3d·游戏开发
许雪里12 小时前
XXL-AI v1.5.0 发布|AI应用开发平台
agent·ai编程