首页 › games › 《复扫雷》雷是复数,扫雷变解方程

打开「复扫雷」(Complexweeper),第一眼是怀旧:Win98 味道的像素脸按钮、灰色浮雕边框、熟悉的九宫格。你随手翻开中间一格,屏幕上跳出一个数字——√2。

√2 不是周围有一根√2根雷。它意味着:周围八格里埋着四种雷(+1、−1、+i、−i)的某种组合,它们加起来的复数,模长恰好是√2。可能是对角线上一对 (+1, +i),可能是 (−1, −i),也可能是雷区里藏着一对互相抵消的正负实雷、再加两个虚雷。经典扫雷的数字只回答“有几个”,而这个游戏的数字开始回答“是什么”——扫雷从数数游戏,悄悄变成了在复平面上解方程的游戏。这就是今天要拆的仓库:Yueqing-Chen/complexweeper-A-minesweeper-game,一个把初等数学当玩法引擎的中文个人项目。

仓库档案

这游戏是什么

一句话:扫雷的规则里只改了一条——雷不再是“1 个”,而是四种复数(正实、负实、正虚、负虚),格子显示的数字是周围所有雷的复数之和的模长。

别小看这一条改动,它牵出的连锁反应全都是设计:

数值表塌缩成 24 种。 因为周围最多 8 格,模长的取值是有限的:0 到 8,加上 √2、√5、√10、√13、√17、√26、√29、√34、√37、2√2、2√5、3√2、4√2、5√2、2√10。经典扫雷的数字是“计数”,这里的数字是“光谱”——每一种模长对应一族可能的雷组合,玩久了你会像认音阶一样认出它们。

抵消对是灵魂。 一颗 +1 和一颗 −1 相邻时互相抵消,对模长的贡献为零。于是“0”和“空白”不再是一回事:空白表示周围完全没有雷,0 表示周围有雷、但全部成对抵消了。你能“看见”不存在的雷。

展开判定变成假说检验。 经典扫雷的双击和弦在这里被改造成:只有当你插的旗帜数量等于真实雷数、且实虚比例符合真实比例(或其倒数)时,才允许展开。作者甚至在规则里明说:可以利用这一点试探周围是否存在抵消对——把赌博式的乱插旗,变成了有数学依据的策略行为。

胜利与复盘。 胜利判定和原版一致:翻开所有非雷格子(不是插对全部旗)。而无论输赢,结局都会揭晓你标对了哪些雷、标错了哪些雷。

游戏目前有两种模式。除了上面的复数模式,还有闵可夫斯基模式:定义单位 j²=1,时空间隔 S=√(a²−b²),四种雷变成正负类时雷和正负类空雷,数值表扩到 40 种(含纯虚数),展开判定更严格——实部和 j 部的旗数都要精确对上。作者很诚实地注明:这只是借了闵可夫斯基度规的灵感,跟广义相对论关系不大。

flowchart TD
    A["翻开一个格子"] --> B["得到一个模长,比如 √2"]
    B --> C["列出候选组合:四种雷怎样加和出这个模长"]
    C --> D["用相邻格子的信息联立消元"]
    D --> E{"收敛出确定解?"}
    E -->|是| F["插旗或触发展开"]
    E -->|否| G["试探性插旗,赌一把抵消对"]
    G --> H{"踩雷?"}
    H -->|是| K["结算:全部揭晓标对与标错"]
    H -->|否| F
    F --> I{"展开判定通过?"}
    I -->|通过| J["连锁翻开,地图缩小"]
    I -->|不通过| C
    J --> L{"还剩格子?"}
    L -->|是| A
    L -->|否| K
    K --> M["带着新学的数值组合再来一局"]
    M --> A

为什么上头

熟悉的外壳,一条新公理。 全人类都会扫雷,学习成本趋近于零;但经典扫雷几十年沉淀的定式——1-2-1、1-2-2-1——在新规则下全部作废。老玩家被拉回新手村,手里却还握着“旗该插哪”的肌肉记忆。这种“我明明会,又好像不会”的错位感,是最强的前五分钟留存。

从计数约束到模长约束,推理深度换挡。 经典扫雷每个数字是一条计数约束,高手的乐趣在于模式识别;复扫雷的每个模长是一条带多解的方程——|z|=√2 在八个格子里有十几种植雷方式。单条信息高度模糊,但相邻两条信息联立就能消元。模糊本身就是难度曲线:你看着一个 √2 迟迟不敢下手,直到旁边翻开一个 3,所有候选组合瞬间只剩一种——那一下的“啊哈”,正是解谜游戏最值钱的多巴胺。

试探机制制造心跳。 因为存在抵消对,有时全场信息用尽仍无确定解,规则反而鼓励你“插旗试探展开”。按下去之前你知道这是 gamble,展开成功等于白赚一片信息,失败就是爆雷。数学游戏里做出了俄罗斯轮盘的手感。

结局审计是最硬的“再来一局”。 大多数游戏输了给你一个分数,复扫雷输了给你一份验尸报告:你每一面旗的对错都摊在桌上。你死之前以为的“运气不好”,看完复盘往往变成“原来那一格我推得出来”。不甘心让人弃坑,“我下一把能推对”才让人重开。这个零成本的复盘机制,是整个仓库里最值得抄的设计。

收集欲藏在数值表里。 24 种模长像 24 个音符,√5 出现在角落意味着什么、2√10 有多罕见,都是可以积累的私人模式库。作者连显示 i 用的伪数码管素材都亲手画了——这种细节暴露了作者自己玩进去了。

技术拆解

Zig + Win32,零依赖的原生路线。 没有引擎、没有框架、没有 Electron,整个程序是对着 Win32 API 直接写的,编译出来一个独立 exe。对一个纯 2D 网格回合制游戏,这是最诚实的选型:渲染就是画格子,交互就是鼠标消息,复杂度全留给游戏逻辑本身。Zig 在这里的角色接近“更好的 C”——作者要的显然是可控和编译产物干净,而不是生态。

规则即数学,移植成本极低。 整个游戏的核心是一张可枚举的模长查找表(8 邻组合是有限的)加一组纯比较判定,没有浮点累积误差(√ 只是显示层格式化)、没有随机模拟、没有帧率敏感逻辑。这意味着它极其好测试、极其好移植——想搬到网页、搬到手机、搬进任何语言,核心逻辑几百行就能带走。对想“简化复刻”的读者,这是天花板级的友好。

素材授权是这个仓库隐藏的亮点。 作者直接沿用了微软原版扫雷的像素素材(原版作者 Robert Donner、Curt Johnson),同时新增的 16 个显示值、四种旗帜、i 单位数码管、人脸按钮全部自绘。关键操作是:README 和单独的《素材说明》明确切割了权利——代码走 GPL-3.0,微软素材不在授权范围内并注明归属。任何人想复刻/魔改经典游戏,这份授权切分就是模板:玩法规则不受版权保护,美术素材受。

工程习惯在线。 仓库带 CI 工作流目录,“正式版”目录直接跟代码走,文档分工清楚(README 讲玩法、素材说明讲版权)。37 个 commit 撑起一个完整可玩的产品,节奏很像“一周一个里程碑”的个人项目范本。

变现观察

先说这个仓库本身:没有任何变现痕迹。免费、GPL、无广告位、无内购、无赞助入口,连在线 Demo 都没挂——这是一个手艺和作品导向的仓库,作者要的可能是“被看见”。

但它的品类参照系很硬:

给我的灵感

1. 网页版 + 每日挑战(MVP 1~2 周)。 用 TypeScript + Canvas 重写核心(查表 + 判定,几百行的事),托管在 GitHub Pages。每日生成一块“无猜板子”(公开资料里扫雷无猜生成算法很成熟),配 streak 计数和分享文本卡。变现:网页广告打底,把“揭示一个抵消对”“校验一面旗”做成提示道具内购。这是投入产出比最高的一条路。

2. 六边形 / 三维复扫雷(周末级实验)。 换网格是这类游戏的天然扩展:六边形 6 邻格会让模长集合缩小、手机上更好点按,适合做轻量移动版;3D 体素版 26 邻格则让数值表爆炸,反而是硬核社区的卖点。变现:itch.io 付费下载,1~3 美元价位在解谜区跑得通,几乎零上架成本。

3. 推理复盘器(把钩子做成产品)。 用求解器对每局生成“哪一格里时存在确定解”,结局回放你的推理路径,高亮你漏掉的那步。这是把原作的审计机制升级成独立卖点的做法,配上计时榜和无猜测模式,足够撑一个 Steam 抢先体验的正版化产品——记得先联系原作者,或者按玩法无版权的边界自己做一套。定价参考同类:3.99 美元起步。

上手

经典游戏的改造定理在这个仓库里写得明明白白:好点子未必是往游戏里加东西,有时候只是把一条公理换掉——然后把剩下的一百条规则,让数学替你重新推一遍。

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