← 返回主页
小游戏 游戏合集 原生 JS 元进度系统 猫

从消消乐到游戏合集:Nikki 猫宇宙开发实录

2026.09 · by Easin

上个月我做了一个消消乐——用自家八只猫的照片当棋子。本来故事到这就该结束了,结果停不下来:打地鼠、贪吃蛇、Flappy、跑酷、配对接连上线,最后长成了一个六游戏合集 + 猫咪图鉴的「猫宇宙」。这篇记录这次进化里最有意思的部分:113 行公共代码撑起的跨游戏元进度系统,以及一只马里奥怎么跑进消消乐里补位。

🎮 线上地址:bayshier.github.io/Nikki(手机浏览器直接玩)

一、缘起:一只猫的消消乐

一切从一个朴素的想法开始:市面上的消消乐千千万,但棋子上不是你家的猫。于是有了第一版——8×8 棋盘、八只真猫照片当棋子、Hello Kitty 粉色体系、加一只拥有三重性格的问题儿童「大儿」(挂机乱跑 / 倔强拒绝消除 / 反咬扣分)。做完发到家人群,效果超预期。

然后问题来了:通关的家人开始催更。一个游戏喂不饱了,那就——多来几个。

二、合集全景:六个游戏一只猫

现在合集长这样,全部游戏共用同一批猫咪角色:

游戏玩法一句话介绍
🐱 猫咪消消乐三消本合集的起点,2.0 版新增 L 形炸弹与马里奥补位
🃏 猫咪配对记忆翻牌翻开卡片寻找相同的猫,40 步内通关有成就
🐟 猫吃小鱼贪吃蛇操控小猫吃小鱼变长,别撞墙别咬自己
🐦 飞飞猫Flappy点击振翅穿管道,飞过 6 根管道解锁大儿
🔨 猫咪打地鼠打地鼠猫咪冒头快点它喂小鱼干——小心别点到大儿,他会反击
🍄 猫猫马里奥跑酷平台戴红帽的猫猫闯关:踩捣蛋猫、收金币、抵达旗帜

注意大儿的戏份扩张了:在消消乐里赌气,到打地鼠里继续反击——角色性格跨游戏一致,这是合集比"六个游戏"多的那点东西。

三、消消乐 2.0:三个新机制

1. L 形炸弹:第三种特殊道具

原版只有 4 连条纹(清行/清列)和 5 连彩虹。2.0 加入了 L 形 / T 形匹配生成炸弹 💣,特殊道具之间还能两两交换触发组合技。生成判定延续了旧版的克制思路——只在交叉匹配时生成,防止道具泛滥把关卡冲垮。

2. 马里奥补位工:最有梗的一个设计

跑酷游戏里的箱子被砸碎后会留下洞,猫咪不会自动下落补位——这时候「马里奥」会从屏幕外跑进来,把猫一只只丢进缺口,丢完拍拍手跑走。平时他躲在屏幕外不出现,有活儿才来。这个设计解决了一个真问题(箱子关卡的地形需要手动补位),但表现形式完全是个喜剧:你永远会为一只戴红帽的猫抱着另一只猫跑进场而会心一笑。

3. 疯狂星期四弹窗:反差萌的极致

解锁弹窗升级成了肯德基疯狂星期四主题——红底(#e60012)黄字(#ffcc00)大横幅「🍗 疯狂星期四 V50 🍗」,文案是标准的疯四文学:「今天是肯德基疯狂星期四,V 我 50 获得密码助力通关 😼」。粉色 Hello Kitty 游戏里弹出一个正红金黄的 KFC 弹窗,配色上就是故意的反差萌。背后依然是家人专属密码解锁,逻辑没变,仪式感翻倍。

四、公共系统层:113 行代码撑起整个合集

六个游戏如果各自为政,就是六个孤岛。合集真正的工程核心是一个 shared/common.js——113 行代码的公共系统层,所有游戏共用三个子系统:

1. 💰 Wallet 统一钱包

所有游戏的金币读写同一个池子。这里有个值得记录的细节:存档迁移——消消乐比钱包先存在,金币存在它自己的存档里。Wallet 首次被访问时检测到全局池为空,就把消消乐存档里的金币一次性迁移进来。老玩家无感升级,金币一分不少。

2. 📅 Daily 每日挑战

每天从奖池抽一条任务(配对 40 步内通关 / 贪吃蛇 60 分 / 飞飞猫 6 管道……),达标自动发金币。抽选没有用随机数,而是拿日期字符串做哈希再对奖池取模——同一天所有人抽到的是同一条任务,且跨天自动重置。「伪随机但确定」的选择让每日挑战有了集体话题感:今天全家都在肝同一条。

3. 🐱 Dex 猫咪图鉴:元进度的闭环

图鉴是整个合集的进度粘合剂——8 只猫各有一条跨游戏的解锁规则:

猫解锁条件引导去向
陈皮消消乐解锁第 3 关消消乐
包子消消乐解锁第 6 关消消乐
年年配对 40 步内通关配对
松露猫吃鱼单局 60 分贪吃蛇
有鱼猫吃鱼单局 120 分贪吃蛇
警长打地鼠单局 120 分打地鼠
大儿飞飞猫飞过 6 根管道飞飞猫
阿狸完成 1 次每日挑战全游戏

每条规则指向一个玩家还没玩过的游戏——图鉴本质上是一张「缺什么补什么」的任务清单。未解锁的猫显示灰度剪影 + 问号 + 解锁条件,游戏结束时上报成绩、check() 评估所有规则,新解锁的猫以粉色渐变胶囊 toast 全屏弹出(多个解锁错峰依次出现,一个一个爽)。

为什么这套元进度系统重要?单游戏的生命周期是「玩到腻」,合集的生命周期是「还有猫没收集」。113 行代码把六个独立小游戏变成了一个有长期目标的产品——这可能是整个项目性价比最高的 113 行。

五、踩坑清单(合集版新增三条)

坑现象解法
倔强状态记坐标大儿移走后旧坐标误伤其他猫状态挂在 DOM 元素引用上,跟着猫走
音效自动播放限制首次操作无声首次用户交互后才初始化 AudioContext
多游戏存档分裂各游戏各存各的,金币不通用统一钱包 + 首次访问一次性迁移旧存档
每日挑战被刷反复领奖励领取即刻置 done 标记,跨天(日期比对)才重置
图鉴重复弹提示已解锁的猫反复触发 toastcheck() 只返回「本轮新解锁」,解锁即刻落盘

六、小结

回头看,这个项目最值得记的不是任何一个单独的游戏,而是「合集」这个形态本身:六个小游戏各自都只是「能玩」的水平,但统一钱包让金币有了跨游戏的价值,每日挑战给了每天打开的理由,猫咪图鉴给了长期收集的目标——1 + 1 + 1 + 1 + 1 + 1 > 6。

以及,大儿现在会在三个游戏里欺负玩家了。家人的猫咪图鉴还差有鱼和警长没解锁,看样子最近要被贪吃蛇和打地鼠虐一阵——这正是我想要的效果。

Easin's Code Lab · 作者:Easin 🎮 玩一下 · ← 返回主页 · GitHub ↗