一个关于沉默、恐惧与集体行动的策略游戏。依据《道路以目——沉默相变模型》的方程实现。
纯前端、零依赖:双击 index.html 即可运行(或 python3 -m http.server 后访问)。
English version: en/index.html (title-screen button "English"; offline single file dist/Glances-on-the-Road.html). It is generated from the Chinese source by node i18n/build-en.js using the translation table i18n/en.json — see i18n/TRANSLATE.md.
在别的电脑上玩:把 dist/道路以目.html 这一个文件拷过去,双击即可——样式和脚本全部内联,不需要服务器,也不需要联网。它由 node build.js 生成;改了源码后重新运行一次。
你有时站在街头,有时坐在宫殿里。你看不到任何人的"门槛"——只看得到街上有多少人、下面报上来的情报,和真假难辨的传闻。
- 民间一方打出"对策"牌:集会、串联、罢工、地下刊物、曝光真相、悼念、劝说士兵……目标是越过临界点,或让执行者倒戈。
- 当局一方调整常设"政策"(执法力度 / 警力 / 抓捕对象 / 舆论 / 关押)并打出行动牌。越强硬越贵;一旦越过人们认可的界线,每次处罚都会变成看不见的积怨。
- 战争迷雾:执法越凶,下面的人越不敢说真话,情报越"报喜不报忧";封锁压住的不是记忆,只是记忆的公开。
- 每关结束后的复盘揭晓真实曲线:街头人数、执行者抗命、真实积怨 vs 你看到的积怨、真实临界点 vs 你的估计。
像《瘟疫公司》一样,时间默认一直走(每轮约 3 秒,可加速);只有打开事件、建设、菜单、分析这类面板时才停,关掉后片刻继续。空格暂停,→ 只走一轮。
- 走势图(左侧,A 键放大):街上的人 vs 估计的临界点,你和对手每一次出手都标在时间轴上;放大后能看积怨、军心、警觉、暗流的走向,鼠标悬停看那一轮发生了什么。
- 参谋:对临界点做敏感性分析,排出"眼下最大的阻力"(人太少 / 代价太重 / 怨气不够 / 人们看不见彼此),当局一方则是"最大的隐患";并提示手里对症的牌。
- 暗流图层(L 键):城里"在观望"(橙)与"蠢蠢欲动"(红)的人——即论文性质十所说的"门槛附近的人数"。它是迷雾中的版本,会有错。
- 回报:每次出牌或改政策,两轮后告诉你人数、被捕、临界点与暗流怎么变了。
- 组织元气:你带出来的人没能越过临界点、却被抓走时,抓走的多是骨干——以后每次出手能带出的人变少,安静时慢慢恢复。一路狂点所有牌的打法,在多数关卡会输。
- 态势读数旁的 ↑↓ 是最近两轮的方向。
- 顶部两根条:左边是你的进度(民间:街上人数、你手里的组织力一次能带出多少人〔斜纹〕、估计的临界点〔紫框〕;当局:还要撑多久),右边是对手——当局警觉(到 25 / 50 / 75 依次升级为「警戒 → 严打 → 全面镇压」)或反对派组织度(满了就倾巢而出)。
- 气泡:局势一变化,城里就冒出可点击的气泡(愤怒、士气、同情、情报……),过一会儿消失。组织力 / 政治资本主要靠它们。
- 建设树(快捷键 B):每方三条路线的永久升级(民间:组织网络 / 信息 / 军中工作;当局:铁拳 / 耳目 / 安抚)。民间的每项建设都会推高当局警觉。
- 行动牌一次性、有冷却;政策(当局)常设,越强硬维持开销越大,入不敷出时代价转嫁给百姓,变成积怨。
- 突发事件逼你二选一(内鬼、死讯、物价、内部分歧……),每关只抽符合那段历史的事件。
- 历史时间线:几乎每一轮都有当日要闻,许多条会真实地推动局势(带出人群、加深积怨、动摇士兵、推高警觉);关键日子会弹出抉择。
- 越过临界点时有"连锁反应"提示,差一点失败时有"差一点"提示——沉默与爆发之间,往往只隔几个人。
| 章 | 关卡 | 阵营 | 核心机制(对应论文) |
|---|---|---|---|
| 序章 | 操场上的二十一个人(教程) | 民间 | 临界种子:20 人熄灭,21 人燎原(p15–16) |
| 一 | 厉王弭谤 · 约前844 | 当局 | 沉默不发出预警、镇压债务(性质一、二) |
| 二 | 面包与士兵 · 彼得格勒 1917 | 民间 | 群众与执行者两层反馈(性质四) |
| 三 | 清明 · 北京 1976 | 民间 | 小行动被吸回低位;被压住的悲痛与共同的日子(性质六) |
| 四 | 四十日 · 伊朗 1978 | 民间 | 延迟记忆核:四十日悼念周期 |
| 五 | 戒严之夜 · 波兰 1981 | 当局 | 按名单拘押、断联、财政代价(性质九) |
| 六 | 六月 · 首尔 1987 | 民间 | 处罚何时带来更多参与者;掩盖与曝光(性质三) |
| 七 | 春夏之交 · 北京 1989 | 民间 | 执行者门槛;外地部队切断人群影响 |
| 八 | 我们是人民 · 莱比锡 1989 | 民间 | 信息与教会网络(性质五) |
| 九 | 最后一次大会 · 布加勒斯特 1989 | 当局 | 情报失真;沉默不发出预警,崩落也未必有前兆(性质一、十三) |
| 十 | 一张白纸 · 2022 | 民间 | 审查、偏好伪装、悲剧后的集体确认 |
| 十一 | 看不见的裂缝 · 朝鲜 | 民间 | 识别的限制:让临界点"出现" |
另有自由对局(虚构城市,任选阵营与社会类型)和模型实验室(lab.html,原沙盒:全部参数、反应函数、分岔图)。
史实部分力求准确;数值是为玩法设定的示意,不是历史估计。
| 文件 | 内容 |
|---|---|
index.html game.css app.js |
游戏界面:标题、关卡、简报、对局、事件、新手引导、复盘 |
city.js |
城市视图(每个点是一群人) |
engine.js |
游戏引擎:政策/对策、对手 AI、情报迷雾、事件、星级 |
levels.js |
关卡数据:史实简报、关键抉择、结局与模型结论 |
timelines.js |
各关逐日 / 逐周 / 逐月的"当日要闻"时间线 |
model.js |
模型核心(论文 p1–8 方程 + 可选的游戏层扩展) |
lab.html lab.js |
模型实验室(原沙盒界面) |
tests.js |
论文数值自检 node tests.js |
tune.js |
沙盒场景叙事检查 node tune.js |
playtest.js |
关卡平衡测试 `node playtest.js [关卡id |
build.js → dist/ |
打包离线单文件(中英文) node build.js |
i18n/ → en/ |
英文版: 抽取中文字符串、译文表 en.json、生成 en/ |
video/ |
讲解视频(中英): 旁白脚本、逐帧渲染的场景页、渲染脚本 node video/render.js zh|en,见 video/README.md |
node tests.js:37/37(论文 p5/p16 算例、Catalan 级数、迟滞阈值、执行者几何侵蚀等)node tune.js:21/21(实验室各场景的预期玩法)node playtest.js all:只看玩家读数的机器人(会点气泡、会建设)跑各关——认真玩在大多数关卡能赢(北京约三成),而且多半要等到历史上的关键时刻之后;什么都不做会输;当局一方一味铁腕常常适得其反