<!-- title: 《BasketballGM》满屏数字，凭什么养他十年 -->
<!-- domain: games -->
<!-- repo: dumbmatter/basketball-gm -->

# 满屏都是数字，一张图都没有，这游戏凭什么养活一个人十年

你如果去问大多数开发者“什么游戏能赚钱”，十有八九会得到一个劝退答案：做画面，买素材，上Steam。但今天这个仓库偏偏反着来——没有一张立绘，没有一段动画，界面全是表格和按钮， player 是一行行数字。它叫 **Basketball GM**，一个人写的网页篮球经营游戏，跑了十来年，作者靠它全职吃饭。

对想搞副业的开发者来说，这个仓库的价值不在于“抄一个篮球游戏”，而在于它验证了一条极其省钱的路线：**零美术 + 纯数值 + 网页免费玩 + 订阅变现**。整条链路上每个环节的开销都低到令人发指。

## 仓库档案

| 项目 | 情况 |
|---|---|
| 仓库 | dumbmatter/basketball-gm |
| 作者 | Jeremy Elberson（GitHub: dumbmatter），个人开发者 |
| 语言 | TypeScript（早期为 CoffeeScript/JS，后整体迁移） |
| Star | 四位数量级，长期活跃（据仓库页面） |
| 更新 | 至今持续迭代，提交频率以天计（据仓库页面） |
| License | 开源，具体以仓库 LICENSE 为准 |
| 在线版 | zengm.com（原 basketball-gm.com，免费可玩） |

一个人的项目能连跑十年、几乎天天有提交，这件事本身就比 Star 数更说明问题——它是被收入持续供养的，而不是被热情燃烧三个月就熄火的典型个人仓库。

## 这游戏是什么

一句话说清：**你是 NBA 球队的总经理兼教练，从选秀、交易、签约、排兵布阵到看比赛结果，全程在网页上点按钮，目标是建立王朝。**

没有画面怎么“看”比赛？游戏生成一段文字战报和比分走势，你看着自己82分的核心第四节6犯离场，看着交易来的替补砍下生涯之夜——脑补，全靠脑补。而这恰恰是这类游戏的第一性原理：**画面越少，想象越满**。

核心循环长这样：

```mermaid
flowchart TD
    A["开档：接手一支球队"] --> B["查看阵容/薪资/财政"]
    B --> C["操作决策"]
    C --> C1["交易：AI 会跟你讨价还价"]
    C --> C2["签约/续约：工资帽内抠钱"]
    C --> C3["排兵布阵：轮换/战术"]
    C1 --> D["模拟比赛日"]
    C2 --> D
    C3 --> D
    D --> E["即时反馈：文字战报/数据/士气/伤病"]
    E --> F{"赛季结束"}
    F --> G["选秀乐透：抽签定新人"]
    G --> H["休赛期：自由市场/球员老化/退役"]
    H --> I{"夺冠了吗？"}
    I -- "没夺" --> B
    I -- "夺冠：冠军数+1" --> J["王朝成就解锁"]
    J --> B
    D -.->|"随机奖励：新秀爆发/绝杀"| C
```

注意图里那条虚线：每一场比赛都是一次开盲盒。这是整个循环能转起来的燃料。

## 为什么上头

这类纯数值经营游戏的上头机制，拆开来其实是五根杠杆，每一根都能对应到具体玩法细节：

**1. 没有天然的停止点。** 打一局FPS，一局结束你天然会放下手机。但 Basketball GM 的循环是“赛季→选秀→休赛期→新赛季”，休赛期结束的那一瞬间，新赛季又开始了。“就再看一眼新秀”和“再打一个赛季”之间没有边界，你一抬头，凌晨两点。放置游戏靠数值膨胀留人，经营模拟靠**日历推进**留人，这是后者更凶的地方——它模拟的是时间本身。

**2. 随机奖励精确地埋在每个节点上。** 选秀乐透是老虎机：抽中状元那种多巴胺，和开卡包是同一种东西。球员潜力值是雾里看花——你签下一个“潜力A-”的19岁新秀，他要两三个赛季才揭盅，这段悬而未决的等待期，就是留存期。AI交易机制更是把老虎机嵌进了谈判桌：你永远不知道报价发过去对方是秒拒还是秒同意，秒同意的那一下，爽感直逼抽到SSR。

**3. 进度感是复利式的。** 一个新秀从潜力A-练成联盟第一人，横跨七八个游戏赛季。这种慢进度有个特点：**你投入越久，越舍不得走**。沉没成本在这里不是贬义词，是留存工具。游戏还配合做了名人堂、历史记录、冠军计数器——你的第3个冠军和第9个冠军意义完全不同，后者意味着王朝，意味着截图发到社区里炫耀。

**4. 决策有真实的策略深度。** 工资帽、奢侈税、鸟权、-max合同、买断，这套财政系统是从真实NBA规则里抠出来的。它意味着玩家会主动去看攻略、算公式、做Excel——玩家开始自己做表的瞬间，就是他戒不掉的瞬间。这一点对中文玩家尤其致命：中国体育社区的“云经理”文化（虎扑里排兵布阵的帖子）根基极深。

**5. 社交攀比自带出口。** 单机游戏怎么攀比？靠存档的含金量。社区里晒“82胜0负”、晒“二轮秀养成MVP”、晒“摆烂三年抽中三个状元”，这些战绩图全是游戏数值自动生成的天然传播素材——不需要开发者做任何分享功能，玩家自己会做图发帖。

把这五根杠杆抽象一下，你会发现它们和《A Dark Room》《Football Manager》是同一族：**用文字和数字塞满你的想象力，再用日历和时间锁住你的退出路径。**

## 技术拆解

这才是对开发者最值钱的部分。这个仓库的架构选型，几乎每一条都是为了“一个人维护十年”服务的，可以直接抄：

**1. 游戏逻辑跑在 Web Worker 里。** 模拟一个赛季可能要算几千场比赛，放在主线程里页面直接卡死。Basketball GM 把整个模拟引擎放在 worker 进程，UI 线程只负责收发消息和渲染，用户操作时永远跟手。这套“sim in worker”的架构，是你做任何放置/经营/模拟游戏的地基，照搬即可。

**2. 存档用 IndexedDB，而且封装成了库。** 多个存档位、自动保存、云端同步前的本地兜底，全靠浏览器数据库。作者为了把 IndexedDB 的回调地狱变成 Promise，自己写了个封装库（backboard）并开源。你做网页游戏存档，这一层不用再发明轮子。

**3. jsbi：一个顺手改变生态的副产品。** 薪资空间的计算要求金融级精度，JS 的 Number 会丢精度，而当年 BigInt 还没普及。作者干脆自己写了纯 JS 实现的 BigInt 库——jsbi。这个库后来被 Babel 生态采纳为 BigInt 的官方 polyfill，成了基础设施级别的开源项目。一个游戏副业顺手养出一个被 V8 生态引用的库，这是个人开发者技术影响力复利的最佳样本。

**4. 求助真随机：random.org。** 选秀乐透的抽签结果，据仓库文档，走的是 random.org 的真随机数 API。用意很妙——乐透是这个游戏最敏感的随机点，玩家输了会怀疑“伪随机坑我”，真随机数从源头堵住了“黑箱操纵”的指控。做抽卡类玩法的可以借鉴这个信任设计。

**5. 可直接复用的组件清单。** 翻这个仓库，下面几块代码剥出来就能用在你自己的项目里：工资帽/奢侈税财政模块（任何经营游戏都缺这个）、AI 交易评估逻辑（“AI凭什么接受你的报价”的量化写法）、球员成长曲线生成器（潜力→成长的进度感引擎）、文字战报生成器（把比赛数据翻译成叙事文本的模板系统）。最后这个尤其值钱——它就是“没有美术的画面”，一套把数字变成故事的文本模板。

技术栈本身毫无炫技：TypeScript + React + IndexedDB + Web Worker，全部是十年不过时的朴素组合。这也解释了它为什么能一个人维护十年——**没有用任何会死的框架**。

## 变现观察

这个仓库的变现路径，可能是所有开源游戏里最值得抄的一套组合拳：

**免费网页版 + 广告 + 订阅去广告。** 在线版免费玩，非付费用户看广告；订阅 Zen GM Gold 后去掉广告，并解锁上帝模式（随意改阵容、改规则，相当于内置的“作弊器付费点”）。注意这个设计的聪明之处：**广告不是收入主力，是付费转化器**——看广告的烦躁感就是订阅的推销员。据作者在社区的公开分享，这游戏是他的全职收入来源，一个人、一个网页、一套订阅，跑了十年。

**对比同品类的传统路线**，更能看出这条路的省钱程度：同类型经营游戏上 Steam（如 Out of the Park 系列卖几十美元一份），要对付商店审核、退款、打折节奏；做移动端 F2P 体育经营（各路篮球经理手游），要买量、接SDK、对抗渠道分成。而 Basketball GM 零买量——它是开源的，GitHub 本身就是它的流量入口，玩家从仓库点进在线版，转化路径短到只有一个链接。

**它的天花板也摆在那里**：没有移动端原生包（错过手游大盘）、没有多人模式（错过社交裂变）、题材美式篮球（中文市场天然窄）。但反过来想：一个上限不高但下限极其稳固的生意——基础设施近乎零成本，养活一个人绰绰有余——这不正是副业最想要的形态吗？

## 给我的灵感

**灵感一：换题材做“电竞战队经理”。** 体育经营的核心资产是数值系统，不是题材。把球员换成电竞选手（枪法/意识/心态三维评分），把选秀换成青训营，把工资帽换成直播合约，模拟引擎几乎照搬 Basketball GM 的架构。电竞题材在中文社区的自带流量远超美式篮球。MVP 工作量：2-3周（数值系统一周、模拟引擎一周、前端一周）。变现：网页广告 + 一次性付费解锁上帝模式，别急着上订阅。

**灵感二：直接偷它的“文字战报生成器”思路。** 这个组件的适用面远超体育：棋牌对局回放、Roguelike 战斗日志、养成游戏的一生总结，本质都是“把结构化数据翻译成有情绪的文本”。配合现在的大模型 API，你可以做一个“AI 解说的对战游戏”——自己先做模板系统兜底，AI 只负责润色。MVP 工作量：1-2周。变现：挂广告的网页工具站，或接 API 按次付费。

**灵感三：给经营游戏加“每日挑战”钩子。** Basketball GM 最大的留存缺口是没有每日回访理由（存档想什么时候玩就什么时候玩）。抄Hello Wordl的思路：每天发一个固定种子的开局——“0胜8负的烂队，30场比赛内打进季后赛”，所有玩家同一天玩同一个局，战绩榜全球可比。这一个功能的开发量不大（种子随机数生成器是现成方案），却把单机游戏做出了天梯感。MVP 工作量：加到现有作品上约1周。变现：挑战结果页挂激励视频广告，“看广告解锁一次重赛”。

## 上手

- 仓库：https://github.com/dumbmatter/basketball-gm
- 在线玩：https://zengm.com （免费，含广告；Gold 订阅去广告并解锁上帝模式）
- 副产品彩蛋：作者为薪资计算写的 jsbi（https://github.com/dumbmatter/jsbi ），已被 Babel 生态用作 BigInt polyfill——去看一个游戏作者的基础设施代码，比看十个教程有收获。

最后说句实在的：这个仓库最值得偷的不是代码，是它的克制。十年时间，作者抵抗住了加美术、加多人、上 Steam 的所有诱惑，只在数值深度和存档体验上做加法。小而美的“美”，一半是做出来的，一半是忍住不做的。

> [!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学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
