系列说明
这是这个系列的最后一篇。
前面 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 做完一个游戏,我学到了什么
(在线版还在持续迭代中——你点进去玩到的,可能比我写这篇时又新了一些。如果发现哪里和文章对不上,多半是我后来改了。)


