天选打工人

设 计 方 案 · v0.2
内容:机制提炼 · 画面风格 · Quality Bar · 数值平衡
数值结论来自 balance-sim.js:虚拟对局求零和纳什均衡,再校准胜负条件到 50%

① 核 心 机 制

一个双人、同时决策、信息不对称的日程博弈
一句话

老板和打工人在每天开工前各自秘密排好八小时日程表,然后这一天照表逐小时执行。老板开会的小时看不见车间——这是全局唯一的信息机制,整个游戏都长在它上面。

A. 角色与视角

你可以就是如果你只有一个人玩的话你就当老板或者当打工人,如果两个人玩的话你就一个当老板一个当打工人

B. 一天的循环

  1. 排班(秘密、同时)——老板每小时选 监督 / 开会;打工人每小时选 干活 / 摸鱼
  2. 执行——按表逐小时判定,没有实时操作
  3. 结算动画——被抓的小时播大逼兜
  4. 日结账本 → 进入第二天,带着对手的历史情报

没有反应操作是关键。录音里自己推翻了纯反应版本:

如果这个纯粹是一个靠反应的游戏那就根本没法偷懒……老板日程表上有会可以这样,就是老板的日程表是他提前排的但是打工人不知道

C. 三层压力,缺一层就塌

正向诱惑反向约束缺了会怎样
打工人摸鱼赚外快被抓罚钱,一次比一次贵纯挨打,没人想玩这边
老板开会拿收益倍率不盯车间就没产能老板全程盯人,退化成单向监视
老板的上级每天至少 3 场例会老板可以摆烂式全程监督

第三层是录音里推得最漂亮的一步。它把「老板为什么不干脆一直盯着」这个致命问题解决了:

他可能是个 multi round,就是说上级对于这个组全在摸鱼,上级会发现,然后这个老板就被 fire 掉了……他开会的目的是他给自己的组增加 visibility

D. 惩罚阶梯

录音给的是「罚款 → 白干 → 开除」的三级硬阶梯。v0.2 把开除拿掉了——被抓已经有经济惩罚,再叠一个立即判负,会让对局绕过整套计分(见 4.4)。换成累进罚款:

本周第几次被抓这次罚多少累计
1 次2 元2
2 次3 元5
3 次4 元9 —— 已超过两天底薪
4 次5 元14
n 次n+1 元无上限

被抓那小时的私活钱同样清零。额度按周累计、不按天清零,于是多出一层跨日决策:周一便宜的时候敢下重注,周五贵了只敢划水。

为什么必须是累进的

直接删掉开除会让数值变成刀锋。8 个小时是同质的、收益对摸鱼小时数线性,最优解必然落在角点(全摸或全不摸)。实测罚 2 元时打工人周入 52(目标的 174%),罚 3 元时掉到 3.9——中间没有可调的余地。
v0.1 能有内点解,靠的根本不是罚款,而是「一周 5 次警告」这个凸约束。累进罚款是同一个凸约束的纯经济版本:风险额度依然稀缺,用光了不是被开除,而是越来越贵。

E. 录音里没解决的三个问题(我做了裁决)

争议 1 · 底薪到底怎么算

录音里从「底薪 8」改到「底薪 4」,但同一段又说「干活每小时自己拿一块」,两套并存会算出两个不同的数。
裁决:底薪 4 元/天固定,干活不额外拿钱。这样「打工人的钱只能靠摸鱼多起来」这条主线才干净。

争议 2 · 被抓之前摸到的钱还算不算

录音里绕了一圈没定论(「你之前摸的还有」「我想想」)。
裁决:算。被抓只清算当前小时 + 扣底薪。理由:如果追溯清零,玩家会在第一次被抓后彻底放弃当天,后半天变成空转,节奏塌掉。

争议 3 · 开会倍率长什么样

录音只说「越多越高,但不能太高」。
裁决:线性 M(m) = 1 + 0.20m。v0.1 用的递减曲线(封顶 ×2.00)在取消开除后会让老板无脑多开会——递减与否不是关键,关键是产能必须真的随开会数下滑,而那取决于打工人能不能读出安全窗口。具体见 4.3,这是全局最敏感的参数


② 画 面 风 格

工业冷幽默 · 反劳动宣传画

录音里已经定下的

我觉得这个游戏的精髓在于它的动画,就是每一天的那个结算动画……如果有一个小时那个打工人被抓包了,那个大逼兜一定要打得戏剧化

这句话应该被当成美术需求的第一条,而不是一句玩笑。它意味着:结算动画不是表现层,它是奖励本身。玩家一整天的博弈,兑现在那 1 秒钟里。

提案:平涂矢量 + 粗黑描边

丝网印 / 劳动宣传画的质感,但内容是反着的。不做 3D,不做渐变,不做粒子。

水泥灰
#1B1D20
惨白日光灯
#E8E6E1
纸/表格
安全黄
#F2C744
交互/强调
铁锈红
#C0392B
只给「啪!」
会议紫
#7A4B96
老板不在场
指示灯绿
#4ADE80
安全/达标

铁锈红是全局稀缺色——只出现在大逼兜和扣钱上。玩家看到红色就该心里一紧。

四条硬约束

做法为什么
角色方脑袋火柴人,五官三个点,靠道具辨识:老板=领带+地中海,打工人=工牌+保温杯后面要扩到多打工人,角色必须能批量生成又不撞脸
镜头固定横向剖面,像剖开的工厂模型。不做镜头运动玩家全程在读日程表,镜头一动信息就断
UI排班界面直接长成一张纸质考勤表,白纸压在水泥背景上全局最重要的视觉隐喻。玩法本身就是「填表」,UI 不该假装自己不是表格
结算漫画拟声词(啪!/咚!)+冲击线+顿帧+屏幕震动+红闪,全长 ≤ 1.2 秒一周要看 5~15 次,超过 1.2 秒第二局就会被跳过
为什么是这个风格

1. 可读性——平涂 + 粗描边在手机小屏上辨识度最高,8 个时段的状态要能一眼扫完。
2. 成本——一个人能画完,没有骨骼动画、没有光照。
3. 调性——题材本身是苦的,风格必须干、冷、快。一旦画成温暖可爱的卡通,讽刺就没了,会变成一个奇怪的模拟经营游戏。


③ Q U A L I T Y B A R

六条 P0,不满足就不算做完

每条都配了可验证判据。做不到判据就是没做到,不接受「感觉还行」。

P0-1大逼兜必须爽
这是整个游戏的兑现时刻。它不好玩,别的都白做。
盲测 10 人,看完第一次大逼兜后主动出声(笑 / 「我靠」/「再来」)的 ≥ 7 人。触发到冲击帧 ≤ 200ms,动画总长 ≤ 1.2s。对照组把动画换成一行文字提示,两组次日留存必须拉开差距——拉不开说明动画没起作用。
P0-2排班要快
这是每天都要做一遍的操作,一慢就变成填表作业。
新手第一天排班中位时长 ≤ 90 秒,第三天 ≤ 45 秒。8 行 × 4 选项在 iPhone SE(375×667)一屏内不滚动看完。
P0-3每局都要有「猜对了 / 猜错了」的瞬间
全程没被抓 = 太松,全程被抓 = 太紧,两者都是失败局。
单局 5 天内,玩家既有至少 1 次摸鱼成功、又有至少 1 次被抓的比例 ≥ 80%
P0-4不能退化成掷骰子
隐藏同时决策天然带运气成分,必须证明技巧仍然占主导。
同一玩家第 5 局平均收益显著高于第 1 局(学习曲线存在)。会读历史的 AI 打随机 AI,胜率 ≥ 65%
P0-5两边都好玩
老板和打工人玩法完全不对称,极易出现「一边才是正确玩法」。
老板局与打工人局的重玩率差距 ≤ 15%。差得更多就说明有一边没做完。
P0-6手机单手可玩
这是通勤路上玩的游戏,双手操作等于没人玩。
可点区域全部 ≥ 44×44pt;主操作在屏幕下 2/3;纯竖屏;无双指、无长按、无拖拽

P1(该有,但不卡验收)

P1-1情报可读
第 2 天起能看到对手的历史时段分布,让「读人」有依据而不是玄学。
P1-2一局 ≤ 6 分钟
5 天 × 约 70 秒。一局要能塞进一趟地铁。
P1-3动画可跳过,但第一次不可跳
第一次必须完整看完,之后允许长按快进。
P1-4文案是打工人黑话
「划水 / 摸鱼 / 大逼兜 / 可见度 / 例会」。不要翻译腔,不要正经商务词。
反面清单 · 出现即判不合格

④ 数 值 平 衡

一套跑过模拟的起始参数

4.1 起始参数表

参数来源
一天 / 一局8 小时 / 5 天录音
底薪4 元 / 天录音(8 → 4)
干活产能 +2,打工人 +0录音
划水打工人 +1,产能 +1,检出 40%新增
摸鱼打工人 +2,产能 0,检出 80%录音
罚款本周第 n 次 = n+1 元,无上限v0.2 改
开除取消v0.2 改
开会倍率 M(m)1 + 0.20m (m=3 → ×1.60,m=5 → ×2.00)v0.2 改
例会下限老板每天至少开 3 场会v0.2 新增
胜负换算率 K产能 ÷ 3.5 = 老板的钱,与打工人直接比大小v0.2 改
v0.1 → v0.2 的四处连带改动

取消开除不是删一行就完事,它牵动四处,少改一处均衡就退化:

1. 罚款解除封顶,且不进老板口袋。v0.1 是 min(BASE, FINE×caught),且老板利润里减的是「底薪 − 罚款」。封顶只在有开除兜底时才成立;而罚款进老板账更糟——解除封顶后模拟出来的老板均衡是「82% 概率一场会都不开、全程盯人靠罚款吃饭」,可利用度 0.1pp(是真均衡)。「开会 = 放弃视野」当场消失。
2. 开除 → 累进罚款。见 1-D。
3. 老板每天必须开够 3 场。没这条时老板均衡只开 1 场,此时读到「他在开会」的后验仍有 75%(先验压倒信号),而摸鱼要求后验 < 50% —— 摸鱼在数学上永远没有位置。开够 3 场后该后验降到 42%,摸鱼才第一次成立。
4. 老板计分改成产能 × 倍率,不减底薪、不设 KPI 罚款。原公式会让老板利润变负,而按百分比比大小时负数恒输,校准直接退化到边界。

4.2 为什么是两档,不是三档

录音里只有干活 / 摸鱼二选一。二元选择 + 隐藏同时决策会产生一个硬阈值:设摸鱼收益 F、罚款 P、被盯概率 p,单小时期望 F(1−p) − P·p 一旦过零,策略就从「一次都不摸」整体跳到「全天都摸」,中间没有任何过渡。

用录音原数(F=2、P=2)算,临界点正好是 p = 0.5——也就是说只要老板开会不超过 4 小时,打工人的最优解就是完全不摸鱼,游戏当场死掉。这是我在模拟里首先撞到的墙。

解法:拆成风险 / 收益梯度

v0.1 拆了三档(划水 +1/40%、摸鱼 +2/80%、躺平 +3/100%)。收益曲线是连续了,但中间那档是死的——按单小时期望收益算,摸鱼要赢得同时满足 p < 50%(打赢划水)和 p > 55.6%(打赢躺平),无解。三档里有一档在数学上永远不该选。

v0.2 砍掉顶档。摸鱼自动继承 p < 50% 那个窗口,两档各得其位。砍顶档而不是砍中档,还顺手拆了一颗雷:躺平在老板开 7 场会时日收能到 20+,原来只靠「老板不会那么开会」软性堵着。

两档到底差在哪

每单位风险买到的钱完全相等2 ÷ 0.8 = 1 ÷ 0.4 = 2.5 元/次)。所以不存在「哪档更赚」,差别在两处:

再叠上累进罚款,同一个判断在一周内会三级衰减——读牌一个字没变,只是额度花掉了:

本周第几次被抓这次罚多少摸鱼胜过划水需要划水胜过干活需要读到「他在开会」(42%) 该干什么
还没被抓2 元p < 50%p < 83%摸鱼
被抓过 2 次4 元p < 36%p < 50%划水
被抓过 4 次6 元p < 28%p < 36%干活

分界线是 摸鱼 > 划水 ⟺ p < 1/(1.2+0.4f)划水 > 干活 ⟺ p < 1/(0.4(1+f))f 为边际罚款。所以:摸鱼是有把握时的重注,划水是额度快用完时的小注。推导见 two-tiers.js

4.3 均衡与校准

做法:「老板每天开几场会」×「打工人的读牌策略」列成收益矩阵,用虚拟对局(fictitious play)求零和纳什均衡,再校准胜负条件使胜率 = 50%。

打工人的水平用读牌准确率 q 建模——每小时他判断「老板这小时在不在开会」的正确率。这一层是必须的:如果双方都随机排班,每小时同质,p = (8−m)/8 恒大于 0.5,摸鱼在数学上永远没有位置

均衡(q = 70%,中等水平玩家)

老板开 3 场会(100%)。打工人:读到开会就摸鱼,读到盯人就干活,本周被抓 2 次后降档。
日均动作 摸 1.5h / 划 2.1h / 工 4.4h · 一周被抓 4.2
打工人周入 22.2 · 老板周产能 84.6 → 折算 24.2
老板胜率 49.6%,可利用度 0.0pp(双方都无法通过单方面偏离获益)
Quality Bar P0-3「既摸成功又被抓」的局:100%(要求 ≥80%)

后验:为什么必须开够 3 场会

开 3 场会时,q=70% 的读牌给出的后验是——读到「他在开会」→ 实际在盯你的概率 42%;读到「他在盯人」→ 80%。42% 落在摸鱼窗口(<50%)之内,80% 落在干活区。只开 1 场会时前者是 75%,先验压倒信号,摸鱼直接出局。

胜负换算率 K 的敏感度

K 是唯一的自由度(两个周目标本来就只有一个自由度:b/G_b ≥ w/G_w ⟺ b ≥ K·w)。它对读牌水平极度敏感

打工人读牌准确率60%65%70%75%80%
公平的 K 应为4.344.003.602.862.30
锁定 K=3.5 时老板胜率71%65%53%36%17%

K = 3.5 只对中等水平的一对玩家公平。这个问题不该靠继续调数值解决——见 5-风险 2。

实机验证(普通难度 AI 对打,2500 局)

指标简单难度普通难度模拟器均衡
打工人读牌准确率51%62%70%(假设)
K=3.5 老板胜率96%60%49.6%
实测公平 K5.493.833.60
打工人周入21.326.722.2
日均 摸/划/工0.8 / 1.1 / 6.11.0 / 2.4 / 4.51.5 / 2.1 / 4.4
老板产出随会议数21 → 29(涨)20 → 19(平)

最后一行是判断这游戏成没成立的那一行。产出必须随会议数下滑或至少持平,否则「开会 = 放弃视野」就是假的。简单难度的 AI 不读牌,察觉不到多开的会,倍率变成纯赚——所以它只能当新手难度,不能拿来校准 K

老板 AI 排会时看什么(消融,每档 900 局)

老板排会依据老板胜率读牌 D1→D5同一时段最多刷
纯随机(只保证 ≥3 场)79%50% → 57%3.17 / 5 天
只看摸鱼史73%51% → 68%2.87 / 5 天
只有开会习惯31%51% → 94%4.10 / 5 天
两个都用(现版本)59%51% → 70%3.48 / 5 天

纯随机其实最强(79%),也正因如此它把游戏玩死了:一周下来读牌只从 50% 爬到 57%,「猜他哪几个小时在开会」这个问题在数学上没有答案。所以 AI 老板被显式赋予了每局固定的开会习惯——这不是放水,是让对局回到设计原意。而「看摸鱼史」那一项的作用不是提高胜率,是压住重复:你昨天在哪摸的,我今天把会挪开、留着盯你(看「同一时段最多刷」那列,4.10 → 3.48)。

4.4 「最后比钱」——v0.1 说不成立,v0.2 又成立了

录音的胜负结论是双方比总钱数:

那老板赢怎么样算老板赢,就是老板和打工人就 pk 最后的钱

v0.1 判定这条走不通:两边量级差三倍,直接比钱等于老板白送胜利。于是改成「各自对自己的周目标算完成率,比百分比」。

但百分比制有两个洞

洞 1 · 开除绕过整套计分。打工人被开除时代码直接判老板胜,不看比分、当天终止。于是会出现:老板产出只做到目标的 20%、打工人已攒到 150%,但周三打工人一天被抓 3 次 → 老板赢。老板的 KPI 开除是完全对称的洞。
洞 2 · 奖励拆台。压低对手和抬高自己等价,均衡里出现过打工人主动亏钱砸产能(周入 −36)的打法。

v0.2 改法:录音那句其实是对的,只差一个换算率

b/G_b ≥ w/G_w 本来就等价于 b ≥ (G_b/G_w)·w——两个周目标只有一个自由度。把这个比值提出来,塞进老板的账里:

车间每 3.5 点产能,公司给老板记 1 元利润。然后周五收工,两边把钱摆出来,多的赢。

均衡下打工人 23.1 元、老板 88 点产能 ÷ 3.5 = 25.1 元,肉眼可比。玩家一次算术都不用做,UI 上一根拉锯条就够。

「不摸鱼必输」这个性质没丢,只是从目标数字挪到了话里:一周不摸一次鱼 = 20 元;而你老实干活时老板产能拉满 128 点 ÷ 3.5 = 36.6 元。你输 16 块。

4.5 调参杠杆(按敏感度排序)

#杠杆影响建议
1打工人能读多准最敏感,而且不是一个参数——它由 AI 质量 / 对手是否有习惯决定。q 每差 5pp,胜率差 10~15pp校准 K 之前先确定要为哪个水平段校准
2例会下限 3 场决定读牌后验能不能降到 50% 以下。降到 1 场,摸鱼这一档直接死不要降到 3 以下
3开会倍率斜率 +0.20决定老板的会议负荷。解析上最优点 m* = (8a−1)/2a,斜率再陡也顶多推到 4老板真正的博弈空间是「排在哪几个小时」,不是「开几场」
4累进步长 +1 元/次控制一周的风险额度有多稀缺,也决定三级衰减发生在周几步长是取代开除的那个凸约束,不能设成 0
5换算率 K 3.5只改难度,不改策略结构最安全的杠杆,难度分级优先用它
6两档检出率 .4 / .8控制风险层次是否可感知档间距 < 0.2 玩家就分不出来,别压缩
7底薪 4基本只是个计价基准不要动

⑤ 已 知 风 险

四个还没验证的地方
风险 1 · 联机时「随机排班」是老板的必胜解

这是目前最大的洞,而且它不是数值问题。老板只要每天把 3 场会均匀随机撒开,P(开会) = m/8 处处相等,打工人读牌恒等于抛硬币,老板胜率约 79~98%。单机靠「给 AI 老板一个可被摸清的习惯」绕过去了,但联机时人类老板可以直接选择不留习惯。

注意「每天至少 3 场」这条挡不住它——消融里的纯随机变体本来就满足 ≥3 场。问题在位置,不在数量。

候选解法:把信息变成规则而不是靠读心。测过日程泄露——老板的每场会以概率 L 提前对打工人可见(「他的日历是公开的」):

泄露率0%25%~30%50%
纯随机老板的胜率(开 3 场)98%64%≈50%11%

泄露率 30% 左右能把纯随机老板拉回 50%,而且每一档下多开会都更亏——张力反而被强化。但这是新机制,要先验证手感。

风险 2 · 单一 ELO 在非对称游戏里不成立

身份优势随水平反转(见 4.3 的 K 敏感度表),所以「房间里身份任选 + 单场决胜 + 一个 ELO 池」会变成会选边的人白拿分
解法是改赛制而不是改数值:一局两场,双方各当一次老板和一次打工人,比合计成绩。身份优势在两场之间相互抵消,技术差才浮出来——而且正好合题:今天你管我,明天我管你。可行性验证见 mp-elo.js

风险 3 · 5 天可能太短

读人需要样本,5 天可能学习曲线还没起来局就结束了。原型出来后第一件事就是 A/B 5 天 vs 10 天,看 P0-4 的学习曲线判据能不能过。

风险 4 · 打工人 AI 还差三层

实测读牌 62%,离校准假设的 70% 还有距离。缺的三层:(1) 只想到第二层——它知道「他会躲开我摸过的地方」,但没想到「他知道我知道,所以可能反而不挪」;(2) 不会养点——故意两天不碰某个时段、等老板把会挪回来再下手,这是人类的标准操作;(3) 对会议数只取历史均值,没建模临时 ±1 的抖动。
补齐这三层,读牌应能到 68~70%,K=3.5 才算名副其实。

▸ 试玩原型(手机竖屏)