首页 › games › 《BalatroTUI》印钞机搬进了终端

2024年独立游戏圈最离谱的造富神话,是一个化名 LocalThunk 的匿名开发者用 Lua 写的一款扑克肉鸽《小丑牌》(Balatro):上线不到一个月卖出百万份,官方随后公布销量突破五百万份,拿了 TGA 最佳独立游戏,还挤进了年度游戏提名——而它的本体小到只有几十兆,美术全是扑克牌加一层滤镜。这样一台印钞机,玩法内核到底是什么?有个叫 Passeriform 的开发者给出的回答很硬核:用 Rust 把它整个搬进了终端。

仓库档案

这游戏是什么

原版 Balatro 的规则一句话讲完:打扑克牌凑牌型,用牌型分数去够一条不断翻倍的及格线,够不着就死,死了从头再来。

每局你只有 4 次出牌机会和 3 次换牌机会。小盲注要求 300 分,你轻松过了;大盲注要 800,Boss 盲注直接要 4000,到了后期及格线会指数飙升到几十万。靠手里那 8 张牌的底子肯定不够,所以每过一关赢的钱要去商店买"小丑牌"——那些改变规则的被动道具:有的让每个方块加倍率,有的让"对子"算两遍,有的在你出第 4 张牌时突然爆炸。20 到 30 个小丑牌叠出化学反应,分数开始以几何级数滚雪球,这才是这游戏真正的毒品。

BalatroTUI 忠实复刻了这个循环,只是把画面从霓虹滤镜换成了字符方块:

flowchart TB
    A[抽牌/换牌<br>每回合限4次出牌3次换牌] --> B[打出5张组牌型<br>对子/顺子/葫芦/同花]
    B --> C[计分结算<br>底分 x 倍率 逐张跳动]
    C --> D{分数够到盲注线?}
    D -- 够了 --> E[赢钱 + 利息<br>进商店]
    E --> F[买小丑牌/塔罗牌/行星牌<br>构筑滚雪球]
    F --> G[下一关及格线指数上涨]
    G --> A
    D -- 不够 --> H[本局失败]
    H --> A

注意这个闭环里最毒的一环:及格线指数涨,你的构筑也指数涨,全程在跟一条抛物线赛跑。系统每个回合给你的反馈清晰到残忍——分数差多少、哪个小丑牌触发了、钱还够不够重掷商店,所有数字都摆在字符界面上,一眼看清,一秒不服,立刻再来。

为什么上头

把 Balatro 的成瘾机制拆开,你会发现每一层都是教科书级的随机奖励设计,而 BalatroTUI 因为没有动画干扰,反而把骨架裸露得更清楚:

1. 即时反馈拉到秒级。 每打出一手牌,计分是逐张结算的:牌面先加底分,倍率再一张张乘上去,小丑牌依次触发。原版用动画表现这一段,terminal 版直接逐行滚动数字——本质是一样的:你每个动作之后 1 秒内必有数字反馈,且反馈是"跳涨"不是"平移",多巴胺按次发放。

2. 随机奖励三层嵌套。 商店刷什么小丑牌是随机的,抽到的手牌是随机的,塔罗牌改造结果还是随机的。三层随机互相耦合,意味着每一局你都在做"现在的构筑要不要赌下一张"的决策,赌赢了当场起飞,赌输了记进下一局的教训。

3. 构筑带来的进度感。 单局内,你的牌组从"裸打对子"进化成"每个方块加四倍率、同花算两张",雪球滚起来的瞬间是这游戏最上头的 30 秒;跨局呢?原版有牌组收集和成就系统,terminal 版目前还是纯单局,这恰好是二次开发者的机会(后面讲)。

4. 失败归因永远指向自己。 死了以后复盘,你总能找到"早知道买那张小丑牌"的理由——这种"差一点"的感觉是重开率的最大发动机。Balatro 的及格线设计精确地制造这种感觉:它总是让你觉得本局本来能过。

5. 决策密度极高但单步极简。 每回合就三个动作:出牌、换牌、进商店。小学生 30 秒学会,但"保留哪个牌型路线"的决策深度够你研究几百小时。上头游戏的通用配方就是这一条:规则一分钟,深度一千小时。

技术拆解

这个仓库对开发者的价值,一半在玩法,一半在工程结构。

技术栈:纯 Rust,无游戏引擎,终端渲染(TUI)。Rust 99.1%,剩下 0.9% 是 Nix——仓库里带 flake.nix,说明作者用 Nix 锁定开发环境,clone 下来 nix develop 就能进一致环境,这点对协作项目值得抄。

架构亮点是三crate工作区,README 里明说了职责划分:

这个分层直接回应了所有卡牌游戏都会遇到的核心工程问题:规则核必须和表现层解耦。卡牌游戏的计分规则会被你反复调整测试,逻辑独立成 crate 才能用 cargo test --workspace 跑纯逻辑单测(仓库也确实这么组织测试),改数值不用碰 UI。更重要的是,这套核明天就可以编译成 WASM 挂个 Canvas 前端出网页版,后天编个 libc 出 iOS 版——规则只写一遍。

可以直接复用的组件:扑克牌型判定(顺子/同花/葫芦的识别与取最优五张)、"底分×倍率"的结算器、商店随机刷新与重掷经济、盲注难度曲线。这四样是任何扑克/牌堆类肉鸽的地基,BalatroTUI 全都替你踩过一遍。仓库 0 个 open issue、5 个 PR、带 CONTRIBUTING.md 和 CI 配置,工程卫生在同体量个人项目里算好的。

要认清的现状:它是 WIP,功能以 TODO 文件为准,塔罗/行星牌等系统未必全部实现,README 自称 minimal。拿来当"完整 Balatro 替代品"会失望,拿来当"学习怎么用五百行状态机表达一套卡牌规则"正合适。

变现观察

先看原作蹚出来的路,这是一条已被验证到极致的变现路径:

Steam 买断制。 Balatro 定价 14.99 美元,上线一个月破百万份,2025年初官方口径超 500 万份。它的成本结构才是重点:单人开发、美术全是扑克牌加 CRT 滤镜、音乐外包一首。这意味着毛利结构极端健康——你不需要美术团队,需要的是一套调到让人上头的数值。2024 年之后,"扑克×肉鸽"成了发行商主动找上门的题材。

手机端买断。 Balatro 手机版 2024 年 9 月上线,同样走付费下载,没有内购。竖屏、单手、一局十几分钟,天然适配手游场景。

但有两个坑必须记在账上:一是 审核风险——Balatro 上线时曾被 PEGI 以"赌博画面"为由判了 18+ 分级,开发者公开抗议,成为行业事件。你的同类产品在双端商店过审时,"看起来像老虎机"的界面元素随时可能被卡,计分逻辑要尽量往"纸牌策略"上靠。二是 IP 红线——玩法机制不受版权保护,但"Balatro"这个名字、美术、小丑牌文案全都受保护。BalatroTUI 在 README 里郑重声明权利归属,就是克隆者的标准动作,你抄作业时一个字都不要省。

至于这个仓库本身:没有变现痕迹,纯作品集项目。它的作者赚的不是钱,是"我用 Rust 复刻了年度游戏"这条硬核简历——这本身就是个人开发者另一种变现:仓库即名片。

给我的灵感

1. 换皮扑克肉鸽,打中文网游空档(MVP 2-4周)。 Balatro 的规则核照抄:牌型打分、及格线指数涨、商店买被动道具。皮全换:小丑牌改成"法宝",盲注改成"天劫",钱改成"灵石",扑克牌面换成 ordinal 数字牌避开扑克联想。变现走微信小游戏广告位:看激励视频换一次商店重掷,这是把"再来一局"直接 monetize 的最短路径。

2. 每日一副牌的轻量版(MVP 1-2周)。 把 Balatro 压缩成 5 分钟一局:固定每日种子,全球玩家同一副牌、同一个商店序列,只比谁分高,做一张每日排行榜。原版深度是它的护城河,也是休闲用户的门槛——你砍掉构筑只留"出牌规划",就是 wordle 之于填字游戏的关系。变现:广告 + 付费去广告。

3. 直接复用它的工程骨架(MVP 2-3周)。 把 balatro_tui_core 这层逻辑核抄出来,编译成 WASM,配一个极简 Canvas 前端,你就有了一个浏览器里能跑的扑克肉鸽引擎。之后每换一个题材皮,就是一款新产品——规则核一次投入,皮无限换,这是小团队对抗内容消耗战最经济的打法。

上手

仓库:https://github.com/Passeriform/BalatroTUI

装好 Rust 后一行命令进游戏:

cargo run --release --package balatro_tui

没有网页 Demo,仓库里有演示动图可以先看效果。想感受完整版的上头,原作 Balatro 在 Steam 有免费试玩 Demo——先玩半小时原版理解那个循环,再回来读它的 Rust 实现,你会知道一个"印钞机"在代码层面其实朴素得惊人:一套状态机、一个计分器、一张商店表。贵的从来不是代码,是调到让人不服输的那条及格线。

[!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学通信知识星球海报-扫码加入