欢迎光临
我们一直在努力

从零复刻《超级动物自走棋》游戏(12):做完了——138 只宠物,点开就能玩

系列说明

这是这个系列的最后一篇。

前面 11 篇讲的是过程:怎么选架构、怎么被参考数据坑、怎么测、怎么调平衡、怎么加联机、怎么扩内容。 这一篇不讲过程 —— 它讲做出来的东西是什么。

如果你刚点进来,建议先玩一局,再决定要不要往回看。 下面所有的数字,都是写这篇时(第一个大版本完成)的数 —— 游戏还在更新,你玩到的可能已经比我写的又新了一些。

📚 本系列
第 1 篇 · 技术选型与引擎架构 第 2 篇 · 我被一份“参考数据”坑了整整一轮
第 3 篇 · 同一个功能,我写了三遍 第 4 篇 · 没报错 ≠ 通过了
第 5 篇 · 把“感觉太强”变成数据 第 6 篇 · 根据真实玩家反馈进行优化!
第 7 篇 · 优化大改战斗画面 第 8 篇 · 给一个纯静态网页加上联机
第 9 篇 · 排行榜——把别人的队伍拿来打 第 10 篇 · 76 只新宠物,和一套官方没有的羁绊
第 11 篇 · 阶段性总结——用 AI 做完一个游戏,我学到了什么

🎮 边玩边读

👉 Super Auto Pets · 单机版

纯网页版,点开就能玩,不用注册、不用下载、不用等加载。

📦 源码

👉 GitHub – DSJ0812/Super_Auto_Pets · GitHub


一、先玩,再读

先把上面的链接点开,玩一局,再回来看。

这不是客套。因为这一篇要讲的所有东西,你玩一遍就全看见了。

如果你玩过官方原版,你会在几秒钟内认出来这是什么:

  • 一样的商店 —— 一排放宠物、一排放道具,下面是刷新和冻结

  • 一样的拖拽买宠物 —— 拖到队伍某个位置,直接放那儿

  • 一样的合成升级 —— 买第二只同名宠物,它会合并进已有的那只,而不是变成两只

  • 一样的战斗 —— 双方最前排同时互殴,不是回合制你先我后

不一样的地方也在几秒钟内能看出来 —— 这个放到第四节讲。

主页。上面是四个模式入口,下面可以选用哪个宠物包开这一局


二、它有多大

先把这个东西的体量说清楚,因为"复刻了一个游戏"这句话,听起来像是抄了一遍,实际上不是。

内容数量
可购买宠物 138 只(龟包 61 + 星包 77)
召唤物 10 种(由技能召唤出来,商店里买不到)
道具 39 种
遗物 13 种
模式 4 个
宠物包 2 个(两包的宠物池完全不重叠)

拆开看几个:

宠物 138 只,覆盖 Tier 1–6。 龟包 61 只,正好是官方 Turtle Pack 的 Tier 1–6 全部; 星包 77 只,对应官方 Star Pack(其中 3 只没做,原因在第五节)。

经典模式的商店。顶栏下面那一条是"阵营条",宠物卡中间的徽章是它所属的阵营

道具 39 种,而且两个包的道具池也是分开的: 龟包 24 种、星包 19 种,只有 4 种两边都有。 这不是我加的限制 —— 官方的食物池本来就是按包独立的,照做而已。

四个模式,共用同一份引擎和同一份数据:

模式玩法
经典 10 胜通关、3 败出局。每回合打一支系统生成的对手队伍
每日挑战 经典模式,但种子由日期决定 —— 同一天所有人玩的是同一局
8 人混战 你和 7 个人机同场,每回合随机两两配对,血量归零出局
联机混战 8 人混战,但其他座位可以是真人(局域网,见 3.1)

战斗画面。双方最前排同时互殴,伤害数字、血条、阵亡塌缩都按官方那套做

图鉴:宠物(按星级)、召唤物、道具、遗物、阵营全在里面,四个界面共用同一份数据


三、三件反常识的事

这一节是这篇里我最想写的部分。因为这个项目有三个决定, 第一次跟人说起的时候,对方的反应基本都是"啊?那怎么可能"。

3.1 没有后端

单机那三个模式(经典 / 每日挑战 / 8 人混战)没有任何服务器。

它们是纯静态文件 —— 你把这个文件夹丢到任何一个静态托管上 (GitHub Pages、Netlify、随便什么 Web 服务器),它就能跑,因为它只是一堆 HTML + CSS + JS。

单机模式下的"对手",是本机算出来的,不是从服务器拉的。你关掉网络,它照样能玩。

联机模式是个例外,但它的"服务器"也不是你想的那种。

它不需要租云主机、不需要域名、不需要备案。主持人双击一下 开服.bat, 自己的电脑就变成了服务器,同一个 WiFi 下的人用浏览器打开地址就能进房间。

主持人双击 开服.bat 之后弹出的窗口。它把局域网地址直接列出来,发出去就行

这个窗口关掉 = 服务器停止,所有人掉线。所以联机的成本是"一台开着的电脑", 而不是"一台云服务器 + 一笔月费"。这也是为什么公网链接上点不到联机入口 —— 静态托管只发文件,不会算游戏,所以主页探测不到服务器就不显示那个入口。

3.2 没有依赖

没有 package.json,没有 node_modules,没有任何第三方库。

核心的每一行都是自己写的 —— 随机数、战斗引擎、渲染、动画、局域网服务器, 没有一个环节是"引一个库来解决"。

唯一"用了外部东西"的地方是排行榜:它借了别人的云服务。 而代价在第 9 篇里写过 —— 国内直连不通,所以首页上那个入口是探测到能连才显示的。

3.3 没有构建

没有 npm、没有 webpack、没有 vite、没有打包、没有编译。

这一条最反常识:你双击 index.html 就能玩。

地址栏里是 file:///… —— 没有经过任何服务器,就是本地打开了一个文件

注意地址栏。这不是"本地起了个服务然后浏览器访问",是真的用文件协议打开的。

能做到这一点,靠的是一个一开始就定死的约束: 不用 ES Module,全部用普通 <script src> 按顺序加载。 因为 type="module" 在 file:// 协议下会被浏览器的同源策略拦掉 —— 用了它,双击就打不开了。

这个约束在写第 1 篇的时候就定下了,后面 138 只宠物、4 个模式、联机, 全都建立在它之上。代价是没法用 import,所有跨文件调用都靠全局变量 —— 但换来了"双击就能玩"这件事。

💡 顺便说一个副作用:因为整个游戏都在浏览器里跑, 你按 F12 就能看到它的全部源码。这是纯前端项目独有的坦诚 —— 你玩到的每一个数值、每一条技能规则,都在你能看到的那些文件里。


四、和官方比:像在哪、不像在哪

这一节可能是整篇里最有用的一节 —— 因为它能帮你判断这个复刻到底做到了什么程度, 而不是只凭一句「我复刻了一个游戏」。

4.1 像的部分

项目实现
战斗规则 双方最前排同时互殴;伤害 = 攻击力、最低 1 点;遗言链递归结算;Perk 只能带一个
商店经济 每回合固定 10 金、不累积;宠物统一 3 金;刷新 1 金
商店等级 回合 1→T1、3→T2、5→T3、7→T4、9→T5、11+→T6
升星奖励 宠物升星时商店出现 2 个「下一星级」的宠物;合成到 3 级不触发
队伍上限 回合 1–2 最多 3 只、3–4 最多 4 只、5+ 最多 5 只
对手生成 官方 wiki 的 Ghost 算法:回合 1 选 3 只;回合 2+ 选 5 只并获得行动点

这些不是"参考了一下",是逐条对着官方 wiki 和开源实现核过的。 第 1 篇里写过核对的方法,第 2 篇里写过核错一次的代价。

4.2 不像的部分

第一,星包差 3 只。

官方 Star Pack 76 只,我做了 73 只。剩下三只:

宠物卡在哪
小飞象章鱼 「刷新 4 次后从最近 3 个星级里挑一种食物」—— 需要一个选择食物的界面
暹罗猫 「移除一个打折的食物,给相邻友方 +N/+N」—— 得追踪每个食物位的折扣来源
鹈鹕 「吞掉前方带草莓的友方、阵亡时变成鲑鱼」—— 鲑鱼是官方 token,需要新召唤物

共同点很清楚:每一只都要求为"一只宠物"引入一个"子系统"。 这个判断的后果放在第五节。

第二,对手不是真人快照。

官方匹配的是真实玩家的队伍快照;本作的对手是按 Ghost 算法现场生成的。 所以你会觉得 AI 对手"有点傻"或者"莫名其妙地强" —— 因为它的强度完全来自行动点的随机分配,有的把属性全堆在一只身上,有的摊得很散。

第三,多了一套官方没有的机制:羁绊。

每只宠物属于一个阵营,队伍里凑够同一个阵营的 N 只就激活加成。 这是我自己加的,官方没有,设计思路在第 10 篇里写过。

它跟原有的玩法是解耦的:不喜欢可以完全无视,它不会改变任何原有规则。

第四,难度是我自己定的。

官方没有显式的难度系数。本作对 Ghost 的行动点打了 0.61 的折扣 —— 因为官方那条曲线是给"完整 6 tier 宠物池 + 真实玩家快照"设计的, 而这里只有 61 只宠物、对手全是幽灵,照抄会碾压玩家。

这个值是调出来的,不是算出来的:用一个"普通水平 AI"跑几千局, 让通关率落在 20–25% 之间。


五、还没做的

先把话说清楚:"第一个大版本完成"不等于"全部做完"。

差的东西不多,但都是明确的:

5.1 那 3 只宠物

就是 4.2 里列的三只。它们的共同点是都要为一个技能引入一个新子系统:

  • 小飞象章鱼 → 一个"选食物"的界面

  • 暹罗猫 → 一套"折扣来源追踪"

  • 鹈鹕 → 一个新召唤物

为一只宠物加一个子系统,在"内容量"上的收益是 1 只,在"工作量"上却和加一个玩法模块差不多。

5.2 三个没做的系统

系统是什么为什么没做
玩具 官方后续加入的一个新机制 要给全部 138 只宠物重新过一遍平衡
困难模式 官方的高难度模式 需要另做一套难度定标,等于把定标工作再来一遍
每周包 每周轮换的宠物包 需要继续扩宠物池,而宠物池是最大的成本项

5.3 为什么停在这里

不是做不出来。

上面这些东西,每一件都要动引擎、动回放层、动四个模式的战斗入口, 动完之后还要重新平衡 —— 而它们带来的新玩法,相对于现在已经有的 138 只宠物, 边际收益是递减的。

这个判断是我下的,不是"做不下去了"。

"什么时候停下来"这件事,AI 不会替你判断 —— 它倾向于继续做。 这是第 11 篇里写过的那条边界,也是这里真实用上的一次。


六、回望这 11 篇

前面 11 篇讲的其实是同一件事:

一个 61 只宠物的单机小游戏,怎么一步步长成 138 只 + 局域网联机 + 排行榜。

如果把它们画成一条线:

阶段篇发生了什么
起步 1–2 先定死"纯前端、双击就能玩"的约束;然后被一份参考数据坑了整整一轮
做对 3–4 发现"同一个功能我写了三遍",以及"测试通过了 ≠ 没问题"
调准 5–6 把"感觉太强"变成数据;按真实玩家反馈改,而不是照着描述改
做好看 7 照官方重做战斗画面
做多 8–9 加局域网联机、加排行榜
做大 10 内容翻倍(61→138 只),并且加了一套官方没有的羁绊
收尾 11–12 阶段性总结;然后是这一篇

如果你只想看一篇,看第 11 篇(《阶段性总结——用 AI 做完一个游戏,我学到了什么》)。 它是前十篇的压缩包,也是这个系列里唯一一篇不按技术点、而按经验组织的。

如果你只想知道这东西怎么做的,看第 1 篇。 那篇里定下的约束(纯前端、事件日志、技能即数据),后面 138 只宠物全都长在上面。


七、小结

这个系列到这里就结束了。

不是因为没有东西可写 —— 上面第五节列的那些(3 只宠物、玩具、困难模式、每周包)都还没做。 而是因为:第一个大版本完成了,这件事值得单独交代一次; 而“过程”这件事,前 11 篇已经写完了。

这件事结论
做到了什么程度 138 只宠物、39 种道具、13 种遗物、4 个模式;规则逐条对过官方 wiki
最反常识的三件事 没有后端、没有依赖、没有构建 —— 双击 file:// 就能玩
和官方最大的差别 星包差 3 只;对手是现场生成的幽灵,不是真人快照;多了一套自创的羁绊
为什么停在这里 剩下的每一件都要动引擎 + 回放 + 四个模式,还要重新平衡,边际收益递减
之后 当成版本更新继续做,不再写连载

之后如果继续做,我会把它当成版本更新,而不是“文章连载”。 真有什么值得单独讲的东西,再单独写一篇。

游戏本身会继续更新 —— 那个在线链接一直是活的。 所以你玩到的版本,会比我写这篇时更新。

想跟进的话,三条路:

想干嘛怎么做
玩 上面的链接一直在,随时点开
看源码 仓库是公开的;纯前端,按 F12 就能看到全部代码
提问题 在评论区说,尤其是“哪里和官方不一样”这一类

💬 说说你的想法

最后一篇了,所以这一节问得直接一点:

我想知道为什么
你能玩到第几回合? 这是最直接的难度反馈 —— 通关率的目标是 20–25%,高了低了都说明标定偏了
哪里和官方不一样? 这一类我最想收。手感不对、数值不对、规则不对,都算
两个包玩起来像两个游戏吗? 宠物池不重叠是设计如此,但如果你觉得差得过头,告诉我
你会想自己做一个吗? 如果想,你想做什么样的?

系列完结

这个系列到此结束。

下一篇没有预告 —— 因为不会有下一篇了。

如果你是从中间点进来的,建议从第 1 篇开始; 如果只挑一篇,看第 11 篇。

⬅️ 上一篇:第 11 篇 · 阶段性总结——用 AI 做完一个游戏,我学到了什么


(在线版还在持续迭代中——你点进去玩到的,可能比我写这篇时又新了一些。如果发现哪里和文章对不上,多半是我后来改了。)

赞(0)
未经允许不得转载:171主机测评 » 从零复刻《超级动物自走棋》游戏(12):做完了——138 只宠物,点开就能玩
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址