Windows · 控制台 + 图形窗口

MSR:一款时新、独立、截然不同的扫雷程序

MineSweeper Run 是一款基于 Windows 的扫雷程序,提供控制台与图形界面窗口两种形态。 它默认生成可解地图,内置一套完整的局面求解器, 把设置、历史、录像、自制地图等全部功能压缩进一个不到 250 KB 的文件里。

控制台版 < 250 KB 窗口版 < 1 MB 地图 1×1 → 256×384 雷数 0 → 满雷 默认 可解地图

介绍

MineSweeper Run 是一款基于 Windows 控制台的扫雷游戏程序,Window 版本可在图形界面窗口进行游戏。

控制台部分特性
  1. 默认生成可解地图,无需面对死亡二选一的局面
  2. 地图求解器支持简单判断、逻辑推理、枚举判断、雷率计算、剩余雷数判断等完善的扫雷逻辑,且运行高效
  3. 在控制台的基于鼠标和键盘混动的操作界面,以及指令、WASD、鼠标三种操作混动的游戏界面
  4. 完整的扫雷难度支持,地图从 1×1 到 256×384,雷数从 0 到满(大地图建议使用 Window 版本)
  5. 生成缓存文件,自动保存用户设置、上一次地图和历史记录,胜利时显示打破纪录
  6. 可对外部输入的地图进行求解、游戏时按 ! / Tab 实时求解、连续生成地图并不断求解(压榨 CPU)
  7. 控制台可切换深浅模式、设置自选光标、设置是否实时显示用时和 3BV,界面个性化
  8. 隐藏功能:历史记录查看、统计和编辑,自制地图的编辑和游戏,操作记录(录像)的保存和播放等
  9. 将上述所有的一切,编译进不到 250K 的程序文件中
图形界面窗口部分特性
  1. 高 DPI 缩放适配,抗锯齿,不模糊,显示大小自动适配各种屏幕分辨率
  2. Ctrl+滚轮 调整显示大小,Ctrl+左键 拖动调整地图位置,适应个性需求和大地图移动视角
  3. 点击笑脸按钮或按 N 重新生成地图,以及控制台鼠标模式下的其他操作逻辑
  4. 深入上游 xege 绘图库开发,编译程序文件小于 1M

特色

推荐扫雷玩家使用 MineSweeper Run 的原因
  1. 默认生成可解地图,无需面对死亡二选一的局面
  2. 不统计胜率、连胜、连败信息
  3. 取消标记不会被问号阻碍
  4. 可通过按住鼠标右键拖动连续标记多个未知方块
  5. 快速翻开操作只需鼠标左键单击数字,而无需双击
  6. 仅标记雷可赢
  7. 可在键盘模式鼠标全选复制地图,以文本形式存储和交流当前局面
  8. 无鼠标用户可用键盘模式进行游戏
其他需要扫雷玩家注意的特性
  1. 操作在按下时触发而非抬起时
  2. 标记可直接翻开
  3. 可通过按住鼠标左键拖动连续翻开多个未知方块
  4. 用时以秒级计算而非毫秒级(包括时间纪录、3BV/s、SS)
  5. 程序不阻止多开

教程

游戏程序的文件管理

可在 GitHub 等处下载游戏的可执行文件,文件名为 MineSweeper Run + 版本号.exe,点击此文件即可启动游戏程序。

该程序面向 Windows 64 位,Windows 32 位用户需下载 32bit 版本,两版本功能、特性、源代码无任何区别。

Window 版(或早期的 WindowTest 版)至少需 Windows Vista 系统,控制台版(无 Window 后缀)则无此要求。

如想尝试在 Windows XP 系统上运行本程序 Window 版,可联系作者索取 Window 32bit XP 版本。

程序可产生以 minesweeper- 开头的缓存文件,删除均不会影响程序正常启动,但不恰当的修改可能会影响程序正常运行。

目前版本缓存文件至多有以下 5 个:

  1. minesweeper-settings.txt
    存储着用户设置,例如游戏难度,删除后程序启动后会使用默认设置。
  2. minesweeper-lastmap.txt
    存储着未结束的上一次游戏,程序启动后会优先进入上一次游戏。
  3. minesweeper-records.csv(旧版后缀为 .txt)
    存储着扫雷历史记录,用于打破纪录显示,删除后记录会丢失,第一局有效胜利即可打破纪录。
    从旧版本游戏(Run 3.4-5.14)更新为新版本(Run 5.15 起)时,需运行 MSR Records Updater。
  4. minesweeper-maps.txt
    存储着用户自制的扫雷地图,删除后自制的扫雷地图均会丢失。
  5. minesweeper-operations 文件夹
    存储着扫雷操作记录(录像)。(Run 5.19 起)
注意:不建议对以上缓存文件做任何修改,若需移动程序位置,需同时移动可执行文件和缓存文件,使之保持在同一目录下,否则所有用户数据均会丢失。

旧版本游戏更新为新版本时,仅需替换可执行文件,缓存文件一般保持兼容性,若部分设置恢复到默认状态,重新设置并保存即可。

程序可多开,各程序独立运行,仅在必要时读写文件,信息不同步,可能造成丢失,不建议多开。

基础操作

双击或右键打开游戏的可执行文件或快捷方式,即可启动游戏程序。

游戏程序一般在控制台主机中运行,在 win11 系统可能为终端,右击标题栏,点击属性或设置即可修改默认终端应用程序。

若 win11 用户在游玩顶级难度时,出现全屏仍不足以显示地图的局面,一般更换默认终端应用程序为控制台主机即可解决。

win11 终端也可在默认值-外观更改行高、字号、字体等,具体需要自己调整,建议采用更换为控制台主机的方法。

游戏程序的显示内容本质为文本,可按 Ctrl+滚轮 调整字体大小,若空间不足会自动换行,可拉伸窗口或全屏避免换行,使程序正常显示。

有的情况中文字体不能正常显示,此时需要更换系统编码为 GBK:在设置-语言-管理语言设置-更改系统区域设置,取消勾选 Beta版:使用Unicode UTF-8提供全球语言支持,重启即可。如系统编码 UTF-8 有其他用处,可联系作者索取 UTF-8 版本。

进入程序可在顶部看到多个方括号包围,圆括号数字开头的文本,此为“虚拟按钮”,可用鼠标点击或按键盘对应数字按下按钮。

顶部的横排虚拟按钮称为“控制栏”,控制栏在游戏、设置等扫雷核心场景均存在,在顶级难度游戏时隐藏。

所有可用鼠标点击的虚拟按钮均有悬浮高亮。

部分场景如调试选项、地图求解功能不可用鼠标操作,必须使用键盘操作,阅读提示即可。

游戏

点击新游戏即可进入游戏,此时可选择任意起始点,选择后程序生成地图,生成结束游戏开始计时。

游戏地图采用 % 表示未翻开且未标记的方块,# 表示标记的方块,数字表示周围 8 格存在雷的数量,其中 0 显示为空格。

游戏默认采用鼠标点击进行操作,可通过鼠标左键 % 和 # 翻开该方块,右键进行标记或取消标记。

“标记”在某些扫雷程序也称“插旗”,程序默认认为,玩家认为标记位置为雷。

当玩家执行标记操作时,剩余雷数将会更新。

竞速玩家常选择无标记、仅使用翻开操作完成游戏,此时剩余雷数不会更新。

当玩家翻开所有非雷方块时,即可胜利,若翻开雷,则立即结束游戏。

另外,标记所有雷,且无任何多余标记时,也可胜利。

游戏结束后,程序显示全部地图,其中 * 表示未标记的雷,@ 表示被翻开的雷,数字+# 表示错误标记,其中错误标记 0 显示为 _#。

游戏结束后,可点击新游戏再来一局,或进行其他控制栏操作。

游戏时,若点击新游戏,则立即结束当前游戏,再次点击即可再来一局。

游戏时,若关闭程序,下次启动时则直接回到该局游戏的先前状态。

鼠标模式游戏时,点击 [鼠标左键:翻开/右键:标记] 可切换左右键功能。

游戏时,按 Q 进入问号模式,此时翻开/标记操作会转换为翻开问号/标记问号,再次按 Q 退出问号模式,也可按 E 执行标记问号并退出。

对于高级 120 秒以上的大部分扫雷玩家,如觉得按键过于轻浮,可在调试选项内关闭快速显示。

对于高级 90 秒以下的熟练扫雷玩家,如觉得按键不跟手,可在调试选项内自行调整刷新周期,或使用 Window 版,注意确保快速显示的启用。

对于大部分玩家都建议使用并适应默认的设置。

设置

点击设置,即可进入设置页面,你可以在这里进行很多方面的设置。

如需更改游戏难度,点击设置游戏难度即可选择难度。

如需生成可解地图,点击设置地图生成校验,随后点击可解地图即可。

当选择难以生成的难度时,地图生成校验会自动降低,手动调整可强制执行生成,但可能需要无限等待,例如全图满雷难度且起始点必非雷。

当较高难度生成可解地图时,如果很快结束游戏,可能出现重复地图。

当设置较为严苛的筛选条件生成筛选地图时,可能出现重复地图,或需要较长时间的等待。

设置完成后,如需下次启动游戏时仍保持设置,需点击返回并保存,若直接点击控制栏或关闭程序,设置则不会在下次启动程序时保持。

部分设置存在下一级页面,此时点击设置页面任意其他按钮即可不作修改关闭下一级页面。

地图求解

可进入地图求解功能页面查看详细使用说明。

若键盘操作无效,可能是启用了中文输入法,请切换到英文输入法尝试。

在该页面,或键盘模式的游戏页面,存在控制台的“快速编辑”特性。

若点击页面,标题栏左上角会显示 选择 二字,此时右键鼠标会复制选择的内容到剪贴板,若无 选择 二字,右键会将剪贴板中的内容粘贴。

若需复制地图粘贴入此处,请勿使 选择 二字出现,否则剪贴板内容会被代替。

在 Window 版,也可按 ! / Tab 实时求解当前局面,若需复制控制台的文本地图,右击标题栏,点击属性或设置,勾选快速编辑模式即可。

操作记录(录像)

进入设置页面并进入调试选项,输入 9 回车,再输入 1 回车,点击返回并保存,即可启用保存连续(未暂停或重启程序)且有效记录的操作记录。

在主页按 V,将操作记录文件拖入并回车,即可播放。

如果不熟悉以上操作,可自行录屏。

可解地图说明

可解地图,指起始点必为空,并可通过不断计算当前局面解并执行,直至取得胜利的随机扫雷地图。

局面解:简单、逻辑、枚举、雷率

其局面解包含 4 种情况:

1. 简单解:1 个数字提供的信息
  1. 如果某个数字与周围未翻开方块的个数相同,则标记该数字周围未知方块。
  2. 如果某个数字与周围标记的个数相同,则翻开该数字周围未知方块。
2. 逻辑解:2 个数字提供的信息
  1. 如果数对之二与数对之一之差等于已知雷数差加数对之二独占区未知方块个数,则翻开数对之一独占区未知方块。
  2. 如果数对之一与数对之二之差等于已知雷数差加数对之一独占区未知方块个数,则标记数对之一独占区未知方块。

数对之二可能在数对之一的 5×5 共 24 个方块的范围内,其中上下左右 4 个方块称为常形逻辑解,剩余 20 个方块称为异形逻辑解。

3. 枚举解:局部多个数字提供的信息
  1. 如果某个未知方块在所有符合数字和剩余雷数的可能性中都是雷,则标记该未知方块。
  2. 如果某个未知方块在所有符合数字和剩余雷数的可能性中都不是雷,则翻开该未知方块。
4. 雷率解

对地图所有未知方块枚举当前所有符合数字和剩余雷数的可能性,并对所有可能性综合分析得到剩余雷数范围,从而得到全部未知方块的雷率,如果雷率最低的一个或多个方块,在实际地图中都非雷,则翻开这些未知方块。

雷率解是不确定解,但结合实际地图又是确定解;Run 1.4-4.10 版本可解地图均不排除雷率解,Run 4.11 开始排除雷率解。

以下情况属于逻辑解
  • 等数定式及其变种(边等数及其传递、等数 T 形挖坑及其深入挖坑、等数雷传递)
  • 21 减法及其变种(121 定式、1221 定式、32 减法)
  • 31、42 等任何减法
以下情况属于枚举解
  • 涉及 3 个及以上数字的逻辑推理(角 131、角 222、1 窗)
  • 结合剩余雷数判断
生成方式:筛选式和调整式

可解地图按生成方式分为筛选式和调整式,筛选式适用于低密度、小地图难度,调整式适用于高密度、大地图难度。

Run 1.4-5.22 版本仅存在筛选式可解地图生成算法,Run 5.23 开始试行引入调整式。

筛选式算法性能高效,从 Run 5.22 开始,在默认地图求解器设置下,所有预设难度(包括顶级)都可在 0.1 秒以内生成。

调整式算法当前仅供体验,不支持操作记录(录像)、中断(暂停或重启程序)的情况,且仅供自定义难度使用。

在设置页面进入调试选项,输入 2 回车,再输入 6 回车,点击返回并保存,即可体验调整式可解地图。

逻辑推理的数对实质
(1)概念

两个数字,如果它们的控制区存在交界,则称为数对。

其中任意数字称为数对之一,另一数字称为数对之二。

数对共同控制的区域,称为共享区,数对之一控制区与共享区之差,称为数对之一独占区,数对之二控制区与共享区之差,称为数对之二独占区。

(2)实质

逻辑推理的数对实质是,数对之一与数对之二之差,等于其独占区雷数差。基于“任意未知区域雷数至少为 0,至多全雷”,当仅有一种可能时,实现逻辑推理。

(3)约定

约定数对之一独占区被操作,那数对之二就是执行对数对之一独占区操作的条件。

若数对之一和数对之二互换,不会改变某些区域存在解的事实,只会让数对整体转换为另一类数对。

(4)数对分类
  • 如果数对之二独占区全已知,称为 1234 类数对,否则,称为 5678 类数对。
  • 如果是相等数对,即数对之一与数对之二相等,即为其中的 12、56 类数对,否则,即为 34、78 类数对。
  • 如果对数对之一独占区执行操作为 @(翻开),即为 1、3、5、7 类数对;
  • 如果对数对之一独占区执行操作为 #(标记),即为 2、4、6、8 类数对。
(5)分类数对的特征

78 类数对,实际是所有数对的通式,然而实战中一般不现场演算,熟练玩家可瞬间对数对定义的逻辑推理进行判断并操作。

大多数逻辑推理为 1-5 类数对,1、3 类尤为常见。

对于 1234 类数对,可通过数对之二确定共享区雷数,从而确定数对之一独占区雷数,确定操作。也被称为“有且仅有”论。

对于 5678 类数对,则不存在直观的判断思路过程,常引用枚举判断进行证明,而此类解释在实战中可用性极低,必须采用“数对”论或类似的“减法公式”、“双集合模型”。

对于 1234 类数对,由于数对之二独占区全已知,只需对数对之一独占区进行操作。

对于 5678 类数对,由于数对之二独占区不全已知,在对数对之一独占区进行操作后,必然对数对之二独占区可进行反向操作。

对于 5678 类数对,若数对之一和数对之二互换,将产生 5↔6,7↔8 的转化,若已对数对之一独占区进行操作,则会在转化后数对类型 -4,即 5→2,6→1,7→4,8→3。

(6)操作逻辑
  1. 1 类数对:数对之二独占区全已知的相等数对,如果已知雷数相等,则翻开数对之一独占区未知方块;
  2. 2 类数对:数对之二独占区全已知的相等数对,如果已知雷数之差等于数对之一独占区未知量,则标记数对之一独占区未知方块;
  3. 3 类数对:数对之二独占区全已知的不相等数对,如果数差等于已知雷数差,则翻开数对之一独占区未知方块;
  4. 4 类数对:数对之二独占区全已知的不相等数对,如果数差等于已知雷数差加数对之一独占区未知量,则标记数对之一独占区未知方块;
  5. 5 类数对:数对之二独占区不全已知的相等数对,如果数对之一和数对之二独占区已知雷数之差等于数对之二独占区未知量,则翻开数对之一独占区未知方块;
  6. 6 类数对:数对之二独占区不全已知的相等数对,如果数对之二和数对之一独占区已知雷数之差等于数对之一独占区未知量,则标记数对之一独占区未知方块;
  7. 7 类数对:数对之二独占区不全已知的不相等数对,如果数对之二与数对之一之差等于已知雷数差加数对之二独占区未知量,则翻开数对之一独占区未知方块;
  8. 8 类数对:数对之二独占区不全已知的不相等数对,如果数对之一与数对之二之差等于已知雷数差加数对之一独占区未知量,则标记数对之一独占区未知方块。

标准分数说明

为什么需要 3BV/s 以外的指标

为了计算玩家在某一具体扫雷地图的发挥水平,目前广为传播的解决方案是 3BV/s,也是玩家普遍认可的“速度”指标。

然而对于相同难度的不同扫雷地图,3BV 有高有低,称为大小图。

以相同的扫雷水平扫完一局,小图用时短、3BV/s 低,大图用时长、3BV/s 高,这就使相同 3BV/s 的情况下大图实际比小图发挥的更差。

为了在大图和小图间取得平衡,出现了 RQP、QG、STNB 等解决方案。

RQP / QG / STNB
RQP
Rapport Qualité Prix,认为 3BV/s 需要除以时间来修正,计算公式:(time+1)*time/solved3BV,值越小越好,但并非如 QG 一样基于拟合,是没有道理的。
QG
Quality Grade,由郭锦洋提出,计算公式:(time^1.7)/solved3BV,值越小越好,通过拟合修正。
STNB
尸体牛逼,由郭锦洋提出,计算公式:sqrt(completion)*stnbc/QG,值越大越好,其中 completion=solved3BV/total3BV,stnbc 为常数,旧版的 8×8-10 难度、中级、高级分别为 47.299、153.73、435.001,新版分别为 36、162、435。

旧版的 STNB 是其中最为好用、较受认可的存在,然而其仅限于 3 个难度,并非任意难度,且在 completion<1 时值偏高,另外受作者影响,其定义可能被随意更改而劣化。

故从 MineSweeper Run 5.16 开始,独立提出 RDV 和 SS 的概念,SS 可横跨难度、地图、完成度评估该局玩家发挥水平,且无视上游概念更新。

RDV 与 SS
RDV
Relative difficulty value,相对难度值,计算公式:A(e^(n/(h*w))-1)*(h^B)*(w^C),其中 n 为雷数,h 为短边长,w 为长边长,A=8.14593564,B=0.528462037,C=1.172055106。该值在 3 难度等于旧版 STNB 常数,但定义域扩充到任意难度。
SS
Standard Score,标准分数,计算公式:RDV*(completion^0.7)/QG。在 completion 为 1 的 3 难度,值与旧版 STNB 相等。

操作方式

在默认设置下,玩家可粗浅的认为鼠标左键即为翻开/快速翻开操作,鼠标右键即为标记/取消标记操作。

以下仅为一些粗浅的介绍,尚未描述全部特性,部分特性可能会因版本变化而改变。

拖动操作

操作在按下时触发而非抬起时;标记可直接翻开;鼠标按住拖动可连续操作多个方块。

拖动操作的方块,并不完全是移动路径经过的方块,对于控制台,可参考“屏蔽空格”功能。

对于图形界面,适量超出路径的方块不会被触发,以减少误触,其实现因版本而异。

视角控制

对于图形界面,Ctrl+滚轮 调整显示大小;Ctrl+左键 拖动调整地图位置。

对于控制台,仅能少量 Ctrl+滚轮 调整显示大小,故不建议在控制台游玩大地图。

无论是游戏的开局、过程、终局,你都可以进行调整操作。

问号模式仅控制台

在控制台操作模式时,可按 Q 进入问号模式。

此时翻开操作和标记操作会转化为“翻开问号”和“标记问号”,或对应问号的取消。

再次按 Q,即退出问号模式,不执行任何操作;按 E 即执行所有标记问号并退出。

中断局

游戏的中断有两种情况:暂停或重启程序。

游戏过程中退出程序时,下次启动程序,直接从上一次游戏的最后一次操作时间开始继续。

对于中断局的操作记录(录像),属于未定义行为。

对于自制地图,不支持中断。

可设置项
快速标记

当对已翻开方块执行标记操作时,如果启用了“快速标记”,则会触发快速标记/取标操作。

此时若周围未翻开方块(未知方块+标记方块)的数量等于数字,则标记所有未知方块;否则,若无未知方块,且标记方块数量大于数字,则取消所有标记。

屏蔽空格仅控制台

在控制台鼠标操作时,操作的方块,即数字/符号本身,加上右侧的空格。

故点击空格时,操作的便是空格左侧代表的方块。当玩家不熟练时,此规则可能带来令人遗憾的爆炸。

如果启用了“鼠标点击屏蔽空格”,则点击空格将不被识别。

鼠标操作切换左右键仅控制台

当玩家使用触屏/触摸板执行鼠标操作时,右键操作可能极为不便。

在控制台鼠标操作时,点击 [鼠标左键:翻开/右键:标记] 可切换左右键功能,使翻开键、标记键互换。

图形界面的鼠标因暂无按键,可参考“点击空地切换左右键”功能。

点击空地切换左右键

当操作空地(数字 0),且操作为控制台或图形界面的鼠标,而不是键盘、指令时,如果启用了“鼠标点击空地切换左右键”,则鼠标的翻开键、标记键互换。

触动翻开

如果启用了“触动翻开”,当执行标记操作,且操作为控制台或图形界面的鼠标,而不是键盘、指令时,如果该操作更换为翻开操作,可触发快速翻开,则该操作更换为翻开操作。

控制台的操作模式和混动切换

控制台存在 3 种操作模式:(0) @#rc Command (1) wasd23 wasdhu Keyboard (2) 鼠标 Mouse

另外,(3) Window 为独立图形界面窗口操作模式,不参与控制台操作混动。

C

@#rc 是一种类指令操作模式,需输入 @:翻开 / #:标记、r:行坐标、c:列坐标 3 个元素,并按回车后执行。

中途可以通过退格键撤销输入,其特性与纯文本略有不同,数字整体会被一键删除。

非法的字符、越界的坐标都不能被成功输入,执行的回车也可以是任意非数字键。

K

wasd23 是一种键盘非阻塞型操作模式,通过 wasd 移动光标,按 2 翻开,按 3 标记,主键盘/小键盘均可,可用 hu 代替 23。

操作混动和模式切换

快捷键切换:一般按 C / K / M 都可切换模式,除 C 不能切换到 K。

在 C,无输入时,wasd 可切换到 K;仅输入操作字符(@ / #)时不可切换;输入到行坐标时,ws 可上下调整,输入到列坐标时,wasd 均可调整。

在 K,@ / # / C 可切换到 C。

在 M,仅能通过 K / C 切换,wasd 可调整当前位置,23hu 可操作,但不会离开 M。

其他

根据上文介绍的特性,你或许可以尝试一些奇异的操作。

移动、触发分离式操作

如使用一只手用触摸板/鼠标移动,另一只手按 23 或 hu 触发。

傻瓜扫雷

当同时启用“快速标记”和“触动翻开”时,你或许可以按着键不放沿着数字移动,直接完成某些简单的局面。

对于坚持传统扫雷手法者

你被禁锢得太久了。你害怕,你怕突破,你怕一旦改变,就会丢掉现有的成果。事实上,扫雷应该是自由的,我们也是自由的。

声明

MineSweeper Run 的所有概念、规则均独立,不受任何其他扫雷游戏程序的约束。

其产生的游戏纪录仅用作自我提升,不可与其他扫雷游戏程序的纪录横比。

MineSweeper Run 过去、现在、未来不会统计胜率、连胜、连败信息,可放心使用。