老板和打工人在每天开工前各自秘密排好八小时日程表,然后这一天照表逐小时执行。老板开会的小时看不见车间——这是全局唯一的信息机制,整个游戏都长在它上面。
future.md。没有反应操作是关键。录音里自己推翻了纯反应版本:
| 层 | 正向诱惑 | 反向约束 | 缺了会怎样 |
|---|---|---|---|
| 打工人 | 摸鱼赚外快 | 被抓罚钱,一次比一次贵 | 纯挨打,没人想玩这边 |
| 老板 | 开会拿收益倍率 | 不盯车间就没产能 | 老板全程盯人,退化成单向监视 |
| 老板的上级 | — | 每天至少 3 场例会 | 老板可以摆烂式全程监督 |
第三层是录音里推得最漂亮的一步。它把「老板为什么不干脆一直盯着」这个致命问题解决了:
录音给的是「罚款 → 白干 → 开除」的三级硬阶梯。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 次警告」这个凸约束。累进罚款是同一个凸约束的纯经济版本:风险额度依然稀缺,用光了不是被开除,而是越来越贵。
录音里从「底薪 8」改到「底薪 4」,但同一段又说「干活每小时自己拿一块」,两套并存会算出两个不同的数。
裁决:底薪 4 元/天固定,干活不额外拿钱。这样「打工人的钱只能靠摸鱼多起来」这条主线才干净。
录音里绕了一圈没定论(「你之前摸的还有」「我想想」)。
裁决:算。被抓只清算当前小时 + 扣底薪。理由:如果追溯清零,玩家会在第一次被抓后彻底放弃当天,后半天变成空转,节奏塌掉。
录音只说「越多越高,但不能太高」。
裁决:线性 M(m) = 1 + 0.20m。v0.1 用的递减曲线(封顶 ×2.00)在取消开除后会让老板无脑多开会——递减与否不是关键,关键是产能必须真的随开会数下滑,而那取决于打工人能不能读出安全窗口。具体见 4.3,这是全局最敏感的参数。
这句话应该被当成美术需求的第一条,而不是一句玩笑。它意味着:结算动画不是表现层,它是奖励本身。玩家一整天的博弈,兑现在那 1 秒钟里。
丝网印 / 劳动宣传画的质感,但内容是反着的。不做 3D,不做渐变,不做粒子。
铁锈红是全局稀缺色——只出现在大逼兜和扣钱上。玩家看到红色就该心里一紧。
| 项 | 做法 | 为什么 |
|---|---|---|
| 角色 | 方脑袋火柴人,五官三个点,靠道具辨识:老板=领带+地中海,打工人=工牌+保温杯 | 后面要扩到多打工人,角色必须能批量生成又不撞脸 |
| 镜头 | 固定横向剖面,像剖开的工厂模型。不做镜头运动 | 玩家全程在读日程表,镜头一动信息就断 |
| UI | 排班界面直接长成一张纸质考勤表,白纸压在水泥背景上 | 全局最重要的视觉隐喻。玩法本身就是「填表」,UI 不该假装自己不是表格 |
| 结算 | 漫画拟声词(啪!/咚!)+冲击线+顿帧+屏幕震动+红闪,全长 ≤ 1.2 秒 | 一周要看 5~15 次,超过 1.2 秒第二局就会被跳过 |
1. 可读性——平涂 + 粗描边在手机小屏上辨识度最高,8 个时段的状态要能一眼扫完。
2. 成本——一个人能画完,没有骨骼动画、没有光照。
3. 调性——题材本身是苦的,风格必须干、冷、快。一旦画成温暖可爱的卡通,讽刺就没了,会变成一个奇怪的模拟经营游戏。
每条都配了可验证判据。做不到判据就是没做到,不接受「感觉还行」。
| 参数 | 值 | 来源 |
|---|---|---|
| 一天 / 一局 | 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 改 |
取消开除不是删一行就完事,它牵动四处,少改一处均衡就退化:
1. 罚款解除封顶,且不进老板口袋。v0.1 是 min(BASE, FINE×caught),且老板利润里减的是「底薪 − 罚款」。封顶只在有开除兜底时才成立;而罚款进老板账更糟——解除封顶后模拟出来的老板均衡是「82% 概率一场会都不开、全程盯人靠罚款吃饭」,可利用度 0.1pp(是真均衡)。「开会 = 放弃视野」当场消失。
2. 开除 → 累进罚款。见 1-D。
3. 老板每天必须开够 3 场。没这条时老板均衡只开 1 场,此时读到「他在开会」的后验仍有 75%(先验压倒信号),而摸鱼要求后验 < 50% —— 摸鱼在数学上永远没有位置。开够 3 场后该后验降到 42%,摸鱼才第一次成立。
4. 老板计分改成产能 × 倍率,不减底薪、不设 KPI 罚款。原公式会让老板利润变负,而按百分比比大小时负数恒输,校准直接退化到边界。
录音里只有干活 / 摸鱼二选一。二元选择 + 隐藏同时决策会产生一个硬阈值:设摸鱼收益 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。
做法:「老板每天开几场会」×「打工人的读牌策略」列成收益矩阵,用虚拟对局(fictitious play)求零和纳什均衡,再校准胜负条件使胜率 = 50%。
打工人的水平用读牌准确率 q 建模——每小时他判断「老板这小时在不在开会」的正确率。这一层是必须的:如果双方都随机排班,每小时同质,p = (8−m)/8 恒大于 0.5,摸鱼在数学上永远没有位置。
老板开 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 场会时,q=70% 的读牌给出的后验是——读到「他在开会」→ 实际在盯你的概率 42%;读到「他在盯人」→ 80%。42% 落在摸鱼窗口(<50%)之内,80% 落在干活区。只开 1 场会时前者是 75%,先验压倒信号,摸鱼直接出局。
K 是唯一的自由度(两个周目标本来就只有一个自由度:b/G_b ≥ w/G_w ⟺ b ≥ K·w)。它对读牌水平极度敏感:
| 打工人读牌准确率 | 60% | 65% | 70% | 75% | 80% |
|---|---|---|---|---|---|
| 公平的 K 应为 | 4.34 | 4.00 | 3.60 | 2.86 | 2.30 |
| 锁定 K=3.5 时老板胜率 | 71% | 65% | 53% | 36% | 17% |
K = 3.5 只对中等水平的一对玩家公平。这个问题不该靠继续调数值解决——见 5-风险 2。
| 指标 | 简单难度 | 普通难度 | 模拟器均衡 |
|---|---|---|---|
| 打工人读牌准确率 | 51% | 62% | 70%(假设) |
| K=3.5 老板胜率 | 96% | 60% | 49.6% |
| 实测公平 K | 5.49 | 3.83 | 3.60 |
| 打工人周入 | 21.3 | 26.7 | 22.2 |
| 日均 摸/划/工 | 0.8 / 1.1 / 6.1 | 1.0 / 2.4 / 4.5 | 1.5 / 2.1 / 4.4 |
| 老板产出随会议数 | 21 → 29(涨) | 20 → 19(平) | — |
最后一行是判断这游戏成没成立的那一行。产出必须随会议数下滑或至少持平,否则「开会 = 放弃视野」就是假的。简单难度的 AI 不读牌,察觉不到多开的会,倍率变成纯赚——所以它只能当新手难度,不能拿来校准 K。
| 老板排会依据 | 老板胜率 | 读牌 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)。
录音的胜负结论是双方比总钱数:
v0.1 判定这条走不通:两边量级差三倍,直接比钱等于老板白送胜利。于是改成「各自对自己的周目标算完成率,比百分比」。
洞 1 · 开除绕过整套计分。打工人被开除时代码直接判老板胜,不看比分、当天终止。于是会出现:老板产出只做到目标的 20%、打工人已攒到 150%,但周三打工人一天被抓 3 次 → 老板赢。老板的 KPI 开除是完全对称的洞。
洞 2 · 奖励拆台。压低对手和抬高自己等价,均衡里出现过打工人主动亏钱砸产能(周入 −36)的打法。
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 块。
| # | 杠杆 | 影响 | 建议 |
|---|---|---|---|
| 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 | 基本只是个计价基准 | 不要动 |
这是目前最大的洞,而且它不是数值问题。老板只要每天把 3 场会均匀随机撒开,P(开会) = m/8 处处相等,打工人读牌恒等于抛硬币,老板胜率约 79~98%。单机靠「给 AI 老板一个可被摸清的习惯」绕过去了,但联机时人类老板可以直接选择不留习惯。
注意「每天至少 3 场」这条挡不住它——消融里的纯随机变体本来就满足 ≥3 场。问题在位置,不在数量。
候选解法:把信息变成规则而不是靠读心。测过日程泄露——老板的每场会以概率 L 提前对打工人可见(「他的日历是公开的」):
| 泄露率 | 0% | 25% | ~30% | 50% |
|---|---|---|---|---|
| 纯随机老板的胜率(开 3 场) | 98% | 64% | ≈50% | 11% |
泄露率 30% 左右能把纯随机老板拉回 50%,而且每一档下多开会都更亏——张力反而被强化。但这是新机制,要先验证手感。
身份优势随水平反转(见 4.3 的 K 敏感度表),所以「房间里身份任选 + 单场决胜 + 一个 ELO 池」会变成会选边的人白拿分。
解法是改赛制而不是改数值:一局两场,双方各当一次老板和一次打工人,比合计成绩。身份优势在两场之间相互抵消,技术差才浮出来——而且正好合题:今天你管我,明天我管你。可行性验证见 mp-elo.js。
读人需要样本,5 天可能学习曲线还没起来局就结束了。原型出来后第一件事就是 A/B 5 天 vs 10 天,看 P0-4 的学习曲线判据能不能过。
实测读牌 62%,离校准假设的 70% 还有距离。缺的三层:(1) 只想到第二层——它知道「他会躲开我摸过的地方」,但没想到「他知道我知道,所以可能反而不挪」;(2) 不会养点——故意两天不碰某个时段、等老板把会挪回来再下手,这是人类的标准操作;(3) 对会议数只取历史均值,没建模临时 ±1 的抖动。
补齐这三层,读牌应能到 68~70%,K=3.5 才算名副其实。