19 KiB
排雷玩法
一句话:挖格、封印、连锁展开等扫雷规则本体 状态:已定稿
设计目的
排雷玩法是扫雷规则本体:玩家在地牢厅室里做的每个动作——挖格、封印、移动——都由它裁决,并把发生的事实如实上报给全项目。它不决定每个动作花多少钱(系统资源归行动经济),也不决定收益怎么兑现成战斗效果(归战斗结算)——它只保证棋盘上的事实真实、顺序确定:数字从不说谎,每个拒绝有据可查。没有它,棋盘生成生成的板没有发生地,战斗结算也没有事实来源。
格子的正式名称全库统一(2026-10-11 用户裁):有惩罚的格子一律称危险格(见术语表;同日补裁=无具体类型划分,怪物巢穴类型概念退役)——惊动危险格则怪物倾巢而出、敌方占得先机;封印叫控制(标中则化险为利)、连锁展开叫坍塌显形(挖穿薄壳,整片塌陷露出)、标错叫控制失败。本文一律使用「危险格」。
系统范围
边界这样划:一个动作"碰棋盘"的部分全归这里——合不合法、执行后格子变成什么样、翻开了哪些格、封印印记立在哪;"花多少钱"归行动经济,"兑现成什么战斗效果"归战斗结算,"画成什么样"归 HUD 框架,"格子怎么生出来"归棋盘生成。本系统自己不含任何玩法数值、零随机、也不认界面:同一张板、同一份动作序列,必然得到逐位相同的结果。
负责:
| 负责 | 说明 |
|---|---|
| 全部棋盘面规则 | 动作合法性(相邻、开未开、封印位)、连锁展开、数字提示、封印印记的棋盘状态、清图判定(安全格是否全部开完) |
| 开局初始展开 | 装板事务:结构前提校验、免费展开出生开阔地、小人落位 |
| 单一结算入口 | 玩家意图只从批次结算入口进,按固定语义序仲裁 |
| 三种对外事件 | 挖开格、封印判定、轮次结束——全项目的事实流源头 |
| 拒绝原因清单 | 每个被拒动作带可辨原因,供呈现层区分"棋盘面非法 vs 资源不足" |
不负责:
| 不负责 | 归谁 |
|---|---|
| 行动点价目与扣费 | 行动经济 |
| 棋盘怎么生成、可推理性保证 | 棋盘生成 |
| 轮次编排与收益兑现 | 战斗结算 |
| 格面资源内容与极性兑付档位 | 地图战斗资源 |
| 界面呈现 | HUD 框架 |
在核心循环中的位置
扫雷阶段:玩家每帧提交一个意图 ──▶ 排雷玩法(棋盘裁决)──(三种事件:事实流)──▶ 战斗结算(轮末兑现)──▶ 冒险推进
排雷玩法站在"扫雷"这一段,是全项目的事件源头:它只外发事件、从不订阅任何下游。战斗结算订阅事件流,在轮末把这一轮扫雷攒下的因逐行兑现成战斗的果。
核心规则
挖、封印、移动:每个动作怎么才算合法
玩家对棋盘只做三件事:挖未开格、封印,以及移动小人(玩家摆在棋盘上的探险者棋子)。前两个是付费动作,按标准动作价计费(价目见 game/data/tables/action_economy.tres;每轮的决策预算,系统资源归行动经济);本文只管棋盘面这一半,总纲只有一条:付费动作只能作用于小人周围一圈 8 格(8 向相邻)之内。
移动不花行动点:点任何已开格,小人沿已探明区一次走到位,"已探明区"包括踩过的危险格残址。点击已开格的唯一含义就是移动——本作没有经典扫雷里"双击数字格一键翻开周围"的 chord(双击快开),每一格的兑现都必须花行动点。
挖已封印的格是合法动作(2026-09-19 用户拍板):封印印记是一次性承诺、没有撤旗动作,直接挖开就是对承诺的兑现——封印印记随挖掘消失、该封印轮末不再判定;挖开封印格的兑付改判(标中不发 / 安全格零奖励等四情况)归战斗结算。
| 动作 | 合法对象 | 棋盘面拒绝情形 |
|---|---|---|
| 挖 | 8 向相邻、未开(有封印照挖) | 不相邻 / 已开过 |
| 封印 | 8 向相邻、未开、无封印 | 不相邻 / 已开过 / 已有封印 |
| 移动 | 任意已开格,且能只经已开格连通到达 | 目标未开 / 无连通路径 |
每个被拒动作都带一个可辨的拒绝原因;原因只能取自一份固定清单,清单外没有别的来源。三个来源互不混淆:棋盘面非法(上表各情形,细因彼此数据可分——"已有封印"和"不相邻"必须是两个可区分的原因)、资源不足(判定权在行动经济)、相位不对(本轮已收尾,不收动作)。玩家看到的文案归HUD 框架。
一个意图进来
├─ 棋盘面判定(本系统):不相邻?开过了?已有封印?── 任一命中 → 拒绝,状态不变
├─ 扣费(行动经济):点数不够 → 拒绝(资源不足),状态不变
└─ 都过 → 执行:改棋盘、上报事实
移动免费直达,不经扣费。
举证:本节全部为合法性判定与流程,无计算。
挖开空地整片塌开:数字提示与连锁展开
每个已开安全格都亮着一个数字,恒等于它周围 8 格里的雷数。这条"数字恒真"是全部推理的地基:数据层从不说谎,呈现层怎么遮掩都不改真值——任何让数字失真的实现都在禁止之列。
挖开一个数字为 0 的格(周围一圈没有雷)时,它周围未封印的安全格免费连锁全开,一路递推到没有新的 0 格为止——这就是连锁展开,玩家看到的是"坍塌显形":挖穿一层薄壳,整片松动的地面塌陷露出。连锁格只扣首格挖掘按价计的一笔,照常计入清图进度(清图 = 开完全部安全格),格面资源资格也照常——连锁开出的格与单挖的格同权,资源身份归地图战斗资源、极性兑付归战斗结算,本系统不区分。
连锁遇到封印就停:封印格不被链开,也不给更远的格当传播跳板。封印按价计费,正是玩家亲手买下的"链阻断器"——对一片不敢确定的地,提前落一枚封印印记,塌方到它为止。
清图在每次挖完成后判定;封印、移动都不改已开格,永远不会触发清图。
| 连锁展开的性质 | 含义 |
|---|---|
| 免费 | 只扣首格按价计的一笔,连锁翻开的格不另收费 |
| 计入清图进度 | 连锁开的格照常算进"全部安全格开完"的判定 |
| 资源资格照常 | 连锁开出的安全格与单挖的安全格同权 |
| 遇封印即止 | 封印格不入链、不作传播跳板;封印印记留在原地,轮末照常判定 |
挖开 0 格 → 翻开周围 8 向未封印的安全格 → 新开格里还有 0 格吗?
├─ 有 → 对每个新 0 格重复上一行
└─ 没有 → 连锁结束(整段只扣首格按价计的一笔)
举证:连锁是纯粹的格面翻开闭包(flood fill),无计算。
每张新图白送一片开阔地:开局初始展开
每装上一张新图,本系统在同一个事务里免费翻开出生 3×3(小人出生的那片安全区),加上与它连成一片的开阔地——凡是与出生区连通的 0 格地带全部亮起。展开完成后,小人落在出生 3×3 的中心格。这片初始展开每次装板只发生一次,跨轮不重放;换新图时按新板重来。这批格是封锁格:已开、计入清图进度,但恒不携带格面资源——不再有任何加成(资源分配规则归地图战斗资源)。
初始展开守四条铁律:
| 铁律 | 含义 |
|---|---|
| 免费 | 不扣行动点,零写入 |
| 计入清图进度 | 剩余安全格从这片开完后起算——呈现上即"剩余未探索安全区域"计数 |
| 无格面资源(封锁格) | 这些格恒无资源、不再有任何加成,禁止下游对它们做任何兑付 |
| 只在装板时发生一次 | 跨轮不重放,防止"每轮白送一遍" |
装板时本系统还当场校验生成产物的结构前提:出生区内无雷、数字恒真、初始展开没有大到直接吞掉全图。任一不过就拒绝装板并报出诊断,绝不停带病运行;这些前提的正常保证由棋盘生成负责,本校验只是消费侧的最后一道闸。
装上新图 → 校验结构前提 ── 违例 → 拒绝装板并报出诊断
→ 免费翻开出生 3×3 及其连通开阔地(无奖励、计入清图)
→ 小人落位出生 3×3 中心格
举证:本节为装板流程与静态校验,无计算。
踩过的雷能走:已引爆危险格的通行规则
挖开危险格不是死亡,是事实上报:轮次不结束,危险格从此算已开——小人能站上去,也能穿过它继续挖。挖开后的危险格不计清图进度(图不是靠踩雷清的)、不能再挖、不能再封印;同一轮连挖多颗雷,每颗都是独立的事实,逐颗上报。
因此挖已知雷成了一条"有价捷径":按价计费、给敌方送去优势,换来一条穿行的近路。它既是玩家主动抄近路的权衡,也是棋盘被挖残时的兜底通路。惊动危险格的代价在轮末结算兑现,归战斗结算。
| 已引爆危险格的格态 | 行为 |
|---|---|
| 可通行 | 移动可以经过、可以站立;穿越仍按移动规则找已开区路径 |
| 不计清图 | 不算安全格,"全部安全格开完"的判定不认它 |
| 不可再操作 | 不能再挖,也不能封印 |
| 事实已上报 | 轮次不结束;惩罚由战斗结算在轮末兑现 |
举证:本节为格态规则,无计算。
封印立得住、也带不走:封印印记的生命周期与换图重置
封印印记是棋盘状态的一部分,不是背包里的实物:落下的封印印记跨轮保留、随图存续,没有数量上限,也没有任何移除手段(移除动作已退役——封印印记只能被挖开,不能被撤下)。每次轮次结束(行动点耗尽、玩家停手或清图时),本系统对当时在场的每一处封印如实上报一条判定——封印底下是雷记标中(玩家看到危险格被控制、化险为利),不是雷记标空;封印一直落在雷上,就每轮如实重复上报标中,去重是战斗结算的事,本系统只报事实。被直接挖开的封印随挖掘消失、不在轮末在场基线里,自然不报判定;封印本身不发事件,界面反馈走调用返回值。
标空(封错格)的纠错路径只有一条:把它挖开(兑付改判四情况见战斗结算);不挖也可以留着它当链阻断器、当"别走这边"的地图注记。封印印记不参与清图判定,但带封印的格没挖开就照常挡着——全图封印一格不挖,永远清不了图。
标空就是标错,玩家读到的是控制失败——惩罚兑付为该安全格格面资源的负向(极性矩阵,归地图战斗资源与战斗结算),本系统只报"标空"事实。
换图时封印印记全量消失,两条路径待遇不同:清图换图发生在轮末,旧封印先走完当轮判定、再随旧图清空;挖掘期刷新换图不打断当轮,旧封印没等到判定就失效——零兑付,封印花的行动点也不返还。战斗结束、整板退役时同样清空。
| 封印印记的结局 | 时机 | 发生什么 |
|---|---|---|
| 留在图上 | 跨轮 | 原样保留,每轮轮末重复判定 |
| 随清图消失 | 轮末换图 | 先完成当轮判定,再随旧图清空 |
| 随刷新消失 | 挖掘期换图 | 未判定即失效:零兑付、行动点不返还 |
| 随战斗结束消失 | 整板退役 | 与板一同清空 |
封印(按价计费,界面即时反馈)→ 封印印记立在未开格上,跨轮保留
每次轮次结束 → 逐封印判定,如实上报(标中 / 标空)
换图(清图或刷新)或战斗结束 → 封印印记随旧图全量消失
举证:本节为状态生命周期规则,无计算。
一帧一个意图、对外只有三种事件:批次仲裁与事件面
玩家每帧只提交一个意图,全部意图经同一个批次结算入口进入本系统——这是唯一的结算入口,保证任何情况下只有一种结算顺序。批次是整体事务:先按固定语义序重排(能清图的挖最优先、停手次之、其余殿后,同类内按提交顺序),再逐个执行;轮次结束条件第一次成立处定出赢家,其后的意图全部丢弃。丢弃不等于被拒:拒绝是本来就不合法,丢弃是来不及了——零棋盘效果、零扣费、零事件。单意图帧下正常玩不出批次竞争,这套仲裁是防御性兜底。
| 批次语义序 | 类别 | 说明 |
|---|---|---|
| 最先 | 能清图的挖 | 执行后图即全开的挖——防止"耗尽优先"把清图高光结算成最差结局 |
| 次之 | 停手 | 玩家主动收轮 |
| 其余 | 普通挖、封印、移动 | 同类内按提交顺序 |
对外,本系统只发三种事件、不订阅任何东西;事件集合封闭,增删事件就是接口修订:
| 事件 | 何时发 | 内容 |
|---|---|---|
| 挖开格 | 每开一格(初始展开、连锁、单挖各算) | 哪格、安全还是雷、数字、经哪条路开的、有无格面资源资格(封锁格恒无;安全格与危险格恒有——资源本体与极性兑付归地图战斗资源,本系统不区分) |
| 封印判定 | 每次轮次结束时逐封印一条 | 哪处封印、标中还是标空 |
| 轮次结束 | 每轮恰一条 | 这轮怎么结束的(清图 / 耗尽)、下一轮换不换图的建议 |
这套"只发不收"是全项目唯一允许的下游反向接线:订阅方被动接收事实,本系统零依赖下游、不知道谁在听。战斗结算订阅事件流、轮末逐行兑现收益;停手路径的轮次结束事件由行动经济直发,本系统不重复发。
一批意图到达
→ 按语义序重排(能清图的挖 > 停手 > 其余,同类按提交序)
→ 逐个执行,轮次结束第一次成立处定赢家,其后意图丢弃
→ 收轮:先把封印判定逐条报完,再报轮次结束
举证:本节为事务顺序与接口封闭规则,无计算。
依赖与输出
本系统对上游只有两张依赖,对下游只发事件流;下面这张表就是删除任何一方时的影响面清单。
| 方向 | 系统 | 接口要点 |
|---|---|---|
| 上游 | 棋盘生成 | 棋盘产物的消费方;装板时校验结构前提(出生区无雷、数字恒真等),违例拒绝装板 |
| 上游 | 行动经济 | 唯一扣费入口:本系统判棋盘面后请行动经济扣费,绝不自行扣减;挖成后上报连锁规模与清图事实;停手意图经批次入口转交 |
| 下游 | 战斗结算 | 三事件的订阅方、轮末兑现方;换新图指令由它回发 |
| 下游 | 地图战斗资源 | 本系统只上报"这格有无格面资源资格"的事实;资源内容与极性兑付不经本系统 |
| 下游 | HUD 框架 | 呈现义务归 HUD 框架 |
P0 最小闭环
最小闭环只保留跑通"装板—挖—收轮—兑现—换图"必需的规则:
- 战斗开始装上新图:校验结构前提,违例拒绝;初始展开免费翻开出生开阔地,小人落位。
- 玩家每帧提交一个意图:挖(判棋盘面,请行动经济按价扣费,开格加连锁并逐格上报;有封印格照挖、封印印记随挖掘消失)、封印(按价计费,封印印记入棋盘,零事件)、移动(免费,已开区一次走到位)。
- 被拒动作带可辨原因、状态不变;批次内轮次结束首次成立处定赢家,其后意图丢弃。
- 收轮:先报完在场封印的逐条判定,再报轮次结束(停手路径由行动经济直发)。
- 战斗结算订阅事件流逐行兑现;清图或刷新换图时按它回发的指令装新图,旧板封印印记全量失效,回到第 1 步。
P1 / P2 后置
后置不等于删除:以下条目保留在案,复活任何一条都走本文修订流程。
| 优先级 | 内容 | 后置原因 |
|---|---|---|
| P2 | 探测类道具的查询接口 | 接口已由身份解析只读面桥接,本系统不预写 |
| P2 | 地形变异接入的格面规则 | 地形变异已定稿落地,新增类型走双方修订流程 |
调参表
本系统无自有参数:价目与每轮点数见行动经济的调参表,棋盘形态见棋盘生成。连锁免费、移动免费、无 chord、批次语义序、三种事件封闭都是冻结设计而非参数——改动走本文修订流程,不走调参。
验收标准
每条都可单独验证:构造给定局面,执行动作,核对结果。
- 数字恒真:任意已开安全格的数字恒等于其 8 向相邻雷数;出生区无雷、数字恒真、初始展开不吞全图三条结构前提任一不满足时,装板被拒绝。
- 初始展开恰等:装板后翻开的格集合恰为"出生 3×3 加连通开阔地"——不止 3×3,也不外扩一圈;全程免费、恒无格面资源(封锁格)、计入清图进度;跨轮不重放。
- 连锁免费且遇封印即止:一次触发连锁翻开任意多格,扣费恒为首格按价计的一笔;封印格不被链开、不作传播跳板;连锁格计入清图进度、资源资格照常。
- 挖封印格放行:有封印格直接挖开被受理——封印印记随挖掘消失、该封印轮末不判;重复封印仍被"已有封印"拒绝;兑付改判四情况(标中不发 / 安全格零奖励)归战斗结算。
- 已引爆危险格可通行:挖雷后轮次不结束,小人可站、可经已开区穿行续挖;危险格不计清图、不可再挖再封印。
- 移动合法且预览同源:目标未开或无已开区连通路径时拒绝;路径预览与实际执行逐格相同;移动免费、零事件。
- 批次仲裁与到达序无关:同一批意图按任意顺序提交,结束路径与结算结果一致;赢家定出后其余意图丢弃——零棋盘效果、零扣费、零事件,且丢弃区别于拒绝。
- 收轮事件序:先报完全部封印判定,再报轮次结束;轮次结束每轮恰一条,停手路径由行动经济直发、本系统不双发。
- 拒绝三源可辨:棋盘面非法、资源不足、相位不对三类原因互异可判定;任何拒绝零副作用。
- 换图重置:清图换图时旧封印印记先判定后消失;刷新换图时旧封印印记未判定即失效、零兑付、行动点不返还;新板封印为空、初始展开按新板重来。
- 确定性回放:同一张板、同一份意图序列驱动两次,事件流逐条逐位相同(本系统零随机)。
待办
本系统待办条目已统一收编至 待办清单,本节不再逐条登记。