首页 › games › 《mah》老麻将的日更钩子

《mah》老麻将的日更钩子

你手机里一定装过它的“亲戚”。麻将连连看、连连消除、四川麻将接龙——App Store 和微信小游戏里成千上万款“消麻将”游戏,玩法全都是同一个:两块相同的牌,两头不被压住,就能点掉。这个玩法有个正式名字,Mahjong Solitaire(麻将接龙/麻将消除),1981 年在街机上也叫《Shanghai》。而今天要讲的这个仓库,把这个“烂大街”的玩法原样搬进浏览器,做出了 40 种语言、五端互通、还带每日挑战的完整产品——⭐151 星,MIT 协议,一个人维护了近九年。它叫 mah,作者 ffalt。仓库描述写得很直白:“many Mahjong experiences on the web 的开源原版”。翻译一下:网上很多消麻将游戏,底下垫的都是这套代码的思路。

对想入局休闲游戏变现的个人开发者来说,这个仓库的价值不在“又一款消麻将”,而在于它把这类游戏的三个命门拆开摆给你看:玩法怎么做才不腻、留存钩子怎么不上服务器也能做、一个周末的量级怎么长成五端产品。

仓库档案

一个冷知识式的细节:README 第一行写着 "The original open-source Mahjong Solitaire game powering many Mahjong experiences on the web",副标题是 "Completely free. No ads. No tracking. No cloud."。免费、无广告、无追踪、无云端——这四连不是一个产品宣言,是这个仓库所有架构决策的因。

这游戏是什么

一句话:麻将牌堆成一座立体小山,你每次点掉一对相同的牌(或同花色成序列的风位牌),牌被点走会解锁压在下面的牌,把整座山拆光就赢,拆到死局就输。

规则一分钟讲完,但它是个不折不扣的“策略性运气游戏”:每一步可选的对子往往不止一个,选哪对先消,决定了后面是通路越走越宽还是提前钻进死胡同。老手看三步,新手看一对,同一副牌能玩出完全不同的结局。

核心循环长这样:

flowchart TD
    A["开一局:选布局或输种子"] --> B["扫牌面:找出可消的牌对"]
    B --> C["点击消除一对"]
    C --> D{"下方压着的牌被解锁?"}
    D -- "是,新牌面" --> B
    D -- "没有对子了" --> E["悔棋 / 提示 / 重开"]
    E --> B
    C --> F{"牌山清空?"}
    F -- "否" --> B
    F -- "是" --> G["彩带庆祝 + 计入最佳纪录"]
    G --> H["连胜 +1,日历打勾"]
    H --> I["明日挑战待解锁"]
    I --> A

这个循环里藏着三层反馈:秒级的“点对子、牌飞走、音效响”;局级的“清空整座山、彩带撒花”;天级的“连胜续上了、日历又亮一格”。多数换皮消麻将只做到第一层,mah 把三层全焊死了——这就是它值得拆的原因。

为什么上头:三层钩子的拆解

第一层:玩法本身的“假自由度”。 麻将接龙上头的心理学基础是“可解的死局感”。你永远觉得“刚才如果先消那对就赢了”—— mah 的 84 种内置布局(经典的乌龟、龙,加上各种自定义造型)就是 84 张难度曲线各异的考卷。加一条:它支持输入种子复现任意随机布局,同一副牌可以和朋友比谁先拆完、拆几次悔棋。比拼同一副牌,是这类游戏从“打发时间”变“社交攀比”的最短路径。

第二层:七种挑战规则,一个玩法卖出七种紧张感。 这是 mah 最值得抄的设计。它的每日挑战在同一个棋盘规则上叠了 7 种目标,每种对应完全不同的心率曲线:

挑战 目标 上头点
Midas Match 找出金标记的那对牌 每一步都在猜“是不是它”
Sparkstone 限时清盘,消火花牌加时 死线不断跳动
Match Rush 限时完成指定消对次数 不求清盘只求手速
Fortune Hunt 限时冲分,连消涨倍率 连击不许断
Running Sand 开局时间极少,每消一对加一点 时间管理变资源管理
The Purge 限时清光指定花色的所有牌 目标从“全消”变“定向爆破”
Blackout 被压住的牌全盖着,只有明牌可见,禁悔棋 记忆力+风险决策

注意这里的杠杆:代码里只有一套棋盘和消除判定,七种挑战全是“目标+计时+限制”的排列组合。个人开发者最容易犯的错是给游戏加内容=加美术加关卡,mah 示范了怎么用规则变体把一个玩法的生命周期拉长七倍。

第三层:日更钩子,不用服务器。 每日挑战的规则是“每天一副牌、一套规则,全球所有人相同,本地时间午夜解锁”。它怎么做到无云端还能全球同步?答案朴素到令人发笑:用日期做随机种子。2026-10-06 这天,所有人用同一个字符串喂进确定性伪随机数生成器,生成的自然就是同一座牌山。连胜(streak)、战绩日历、各挑战的最佳分,全部存在浏览器本地。

这就是 Wordle 验证过的留存模型:稀缺性(一天一次)+ 公平性(人人同题)+ 攀比(连胜晒图)。Wordle 每天一词,mah 每天一局,汉兜每天一成语——机制是同一个,而 mah 证明它能套在任何“单局短、可量化”的玩法上。纽约时报后来买下 Wordle,买的从来不是那个词库,是这台日更发动机。

技术拆解

技术栈一句话:Angular 22 + TypeScript + RxJS + Tauri,构建走 Vite(Analog 插件),测试是 Vitest,没有一行后端代码。

几个值得单独说的亮点:

可直接复用的组件清单:种子→布局的确定性生成器、按本地时区解锁的每日任务调度、连胜/日历/分模式最佳纪录的本地统计、无障碍键盘导航(Tab+方向键全流程可玩,这对休闲游戏过审和口碑都有用)、i18n 管线、Tauri 多端打包脚本。

变现观察

先把话说清楚:mah 本身零变现——无广告、无内购、无打赏入口,README 里的立场近乎洁癖。它是个作品集式的项目,赚的是声誉和影响力。但这不妨碍它是一份高质量的“变现底稿”,因为它的每一个机制都精确对准了休闲游戏史上被反复验证的收费点:

一句话总结变现逻辑:玩法抄 mah,钩子抄 Wordle,发行抄 itch/微信小游戏,把“无广告”当成卖点而不是成本。

给我的灵感

点子一:两周复刻“日更消麻将”,只加一个钩子。 MIT 协议下直接 fork 起步都合法,但更有价值的做法是照着架构自己写一遍:棋盘数据结构+自由牌判定(一两天)、种子布局生成器(半天)、每日挑战+连胜日历(两三天)、zzfx 音效+彩带反馈(一天)。MVP 量级 10-14 个晚上,产出物是一个“每天全球同一副”的消麻将站。变现选微信小游戏广告或 H5 站 Adsense,起量靠“今天这副你过了吗”的社交裂变——全球同题的设计天然适合发朋友圈比连胜。

点子二:把七种挑战规则移植到你自己的玩法上。 这是本仓库最便宜的“高维抄法”:你不做消麻将,做泡泡龙、数字消除、甚至成语接龙,把上面那张七行表原样套用——限时冲分、连击倍率、定向清除、记忆遮罩、禁悔棋。一套核心判定,七个日更模式,内容排期一个月不用愁。个人开发者做休闲游戏的死穴是“两周就玩腻”,规则变体是性价比最高的解药。

点子三:中文题材的“麻将消除+知识付费”混血。 把牌面从万字筒条换成成语、诗词、化学元素、英语词根——消除判定不变,配对逻辑从“同牌”改成“成语接龙”或“词根+释义”。中文知识类小游戏在教育和企业采购侧有溢价空间,mah 的 i18n 管线和种子系统直接复用。这条路的有趣之处在于:题材一换,它就从红海品类变成了几乎没有直接竞品的细分。

上手

建议的阅读顺序:先玩一局感受三层反馈的节奏,然后直接翻种子生成器和每日挑战的实现——那两块代码加起来可能不到一千行,却撑起了整个产品的留存模型。对个人开发者来说,这两个文件就是这 151 星里最值钱的部分。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入