合并(可推理率退役·文档设计段): 生成端质量承诺整条撤除(用户裁 2026-11-09 四裁点: A出板检查只留出生区无雷与开局不全开两条、白给板同流重摇为唯一重摇理由, B行动经济概率锚句删除, C求解器只留离线MC测量迁sim, D秘宝ι公式删除留定性条款; 数字恒真/最少安全格/清图可达/R₀上限闸按「只留两条」连带退役)。落文: 棋盘生成 v1.4 主体重写+行动经济 v1.8+秘宝 v1.4+难度曲线与Boss v1.7+数据配置 v1.5+03-内容规模+体验验证清单⑬; 测试判据出处注记 8 处按新行号重锚(代码行为零改动); 待办清单 QQ-11 随成本闸退役注销、新条目「可推理率承诺与生成-验证-重试管线退役」文档设计已闭合(代码面归写卡段)。区内凭据: 流水线闸 PASS(37条目/交叉核绿)、文档域闸【验收通过】无新增红。合回前置检查读数见 pre-merge 钩子; post-merge 钩子推送触发远端 CI。

This commit is contained in:
DKChan committed 2026-11-09 06:02:14 +08:00
1 parent 750b491b23
commit f1127024b9
10 files changed
+62 -133

No files matched your search

+1 -1
View File
@@ -24,7 +24,7 @@ MVP 不加新敌种,也不做同深度多敌种混搭;敌种扩容走 `enemy
## 棋盘
**尺寸按关配置**(板形随关卡行投值,不再固定两档;Boss 战的台阶靠换更大的板制造):现行第一关 10×10 / 12×12 两档、第二关全关 12×12、第三关 13×13(Boss 14×14)。具体尺寸面值与雷密度读 `data/tables/board_gen.tres`(以表为准)。密度全程一档,不做密度爬坡;可推理率目标全程恒定,目标值归[排雷玩法](systems/排雷循环/排雷玩法.md)口径。
**尺寸按关配置**(板形随关卡行投值,不再固定两档;Boss 战的台阶靠换更大的板制造):现行第一关 10×10 / 12×12 两档、第二关全关 12×12、第三关 13×13(Boss 14×14)。具体尺寸面值与雷密度读 `data/tables/board_gen.tres`(以表为准)。密度全程一档,不做密度爬坡。
地形变异现行六类型、两轴 × 三关已落地:荆棘丛/藤蔓缠绕(第一关)+ 岩浆/烬覆(第二关)+ 落石/矿尘(第三关),行值见 `data/tables/variation.tres`。
@@ -1,7 +1,7 @@
# 难度曲线与Boss
> 一句话:难度曲线、期望值带与 Boss 设计
> 状态:已定稿;现行为 v1.6
> 状态:已定稿;现行为 v1.7
## 设计目的
@@ -28,7 +28,7 @@
| 不负责 | 归谁 |
|---|---|
| 生成算法与可推理率度量 | [棋盘生成](../排雷循环/棋盘生成.md)(本文只投参数行值,禁反向调用生成) |
| 生成算法 | [棋盘生成](../排雷循环/棋盘生成.md)(本文只投参数行值,禁反向调用生成) |
| 结算规则、伤害合成与护甲克制矩阵本体 | [战斗结算](../战斗循环/战斗结算.md)(本文只投矩阵数值) |
| 敌种机制、技能池语义与表结构 | [敌人系统](../战斗循环/敌人系统.md)(本文只投行值) |
| 奖励机制、库存与注入机制 | [地图战斗资源](../战斗循环/地图战斗资源.md)(本文只投权重、威力、注入参数) |
@@ -187,7 +187,7 @@ boss_hp ≈ round( Σ普通战斗敌方生命期望 × r_boss ) r_boss
Σ 的逐数闭合口径:数量走开战掷骰的区间期望(区间中点),教学位同样掷骰、按区间期望计入;各坐标行值一律读敌人表,本文不重复登记具体数值——防与配置双写失同步。
Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表),板参数仍受[棋盘生成](../排雷循环/棋盘生成.md)的可推理率绝对锚约束——加难不许加到不可推理。Boss 战胜利即关卡完成,编排归[冒险结构](冒险结构.md);登场仪式感归[战斗表现](../战斗循环/战斗表现.md)。
Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表)。Boss 战胜利即关卡完成,编排归[冒险结构](冒险结构.md);登场仪式感归[战斗表现](../战斗循环/战斗表现.md)。
### 护甲克制:本文锁行值,矩阵本体归战斗结算
@@ -203,14 +203,14 @@ Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表),板
|---|---|---|
| 敌方生命 ↔ 奖励供给 | [地图战斗资源](../战斗循环/地图战斗资源.md) | 单边移动必须走关级恒等式的联合检算 |
| 数量区间 ↔ 棋盘密度与惩罚上限 | [棋盘生成](../排雷循环/棋盘生成.md)、[战斗结算](../战斗循环/战斗结算.md) | 成群行上线前强制复算挖掘风险不等式 |
| 密度 ↔ 可推理率 ↔ 生成尝试上限 | [棋盘生成](../排雷循环/棋盘生成.md) | 三元组联动;禁止为难度牺牲可推理率绝对锚 |
| 密度 ↔ 板形 | [棋盘生成](../排雷循环/棋盘生成.md) | 板形与密度行值联动;尺寸与密度域校验归对方参数表 |
| 每轮行动点 ↔ 停手转存规模 | [行动经济](../排雷循环/行动经济.md) | 联动评估记录归本文,调参所有权在行动经济 |
| 削弱强度 ↔ 当量锚 | [增益状态](../战斗循环/增益状态.md)、[战斗结算](../战斗循环/战斗结算.md) | 联动值禁独立调参,修订须重跑锚对照 |
| 护甲类型 ↔ 克制矩阵 | [战斗结算](../战斗循环/战斗结算.md) | 敌种护甲变更须复算击杀区间 |
| 护甲等级 ↔ 攻击基线 ↔ 区间带宽 | [战斗结算](../战斗循环/战斗结算.md) | 敌种与主角的护甲等级行值变更须复算生存链区间(掷点带宽随折扣档位与攻击基线同向放大);掷点形式与档位已定稿(d20 三档——档位读 `settlement.tres`;nat20 暴击形式留档,倍率同表),护甲等级行值变更仍须复算生存链区间——现行行值读 `hero.tres` / `enemy.tres` 的 armor_class 列(均暂定),敌方正式行值随怪物设定批投值、与加难杠杆扫描合并调 |
| GP 供给 ↔ 商品定价 | [冒险结构](冒险结构.md)、[关卡节点地图](关卡节点地图.md) | 供给 × 定价 = 入关属性参数,单边移动须复算分层关卡完成率带(商店与 GP 经济杠杆节)——动供给必复算分层带,禁独立调参 |
| 封印溢价系数 δ ↔ 完美乘数 p_perfect ↔ ap_per_round | [战斗结算](../战斗循环/战斗结算.md)、[行动经济](../排雷循环/行动经济.md) | 封印激励三件套同窗检算(防封印 rush 复发:δ 与 ×2 叠加通胀、AP 吞吐上限)——任一变动须重跑双画像封印率读数 |
| η 读数 ↔ 模拟画像定义 ↔ 可推理率 ι ↔ min_safe_count/生成尝试上限 | sim 档位、[棋盘生成](../排雷循环/棋盘生成.md) | η 是画像条件量:画像重构即锚漂移,重锚顺带;可推理率三元组联动 |
| η 读数 ↔ 模拟画像定义 | sim 档位 | η 是画像条件量:画像重构即锚漂移,重锚顺带 |
| β 带端点 β_lo/β_hi ↔ D_ref ↔ hero max_hp ↔ AC 折算档(5pp 系数) | [战斗结算](../战斗循环/战斗结算.md) | 带是 D_ref 的函数:换锚(D_ref/max_hp)须全带重推;AC 档值变更改 5pp 系数,同罪 |
| 直伤雷三行(6/8/8) ↔ 正向同轴行(heal_minor/pierce_strike/magic_bolt) | [地图战斗资源](../战斗循环/地图战斗资源.md) | **同轴镜像比入对账面**:负向/正向比超出 β 带内推导区间即越带;单边动负向三行今后必须带正向镜像行联合检算 |
| clear_blast 区间(24/40/32) ↔ p_perfect | [地图战斗资源](../战斗循环/地图战斗资源.md) | 完美封印第二份的补贴基数进封印激励对账;单边动清图奖励 = 变相动封印 |
@@ -297,7 +297,7 @@ Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表),板
| 表 | 字面 |
|---|---|
| 主角表 | 生命上限 / 基础攻击 / 护甲等级(armor_class) |
| 棋盘参数 | 板形 / 雷密度 / 可推理率目标 / 生成尝试上限(按关卡 × 节点深度坐标行存放;奖励点/恢复点不开战斗无板行) |
| 棋盘参数 | 板形 / 雷密度(按关卡 × 节点深度坐标行存放;奖励点/恢复点不开战斗无板行) |
战斗侧与奖励侧的关键投值(机制归对方、数值所有权本文;行值读 `settlement.tres` / `reward.tres` / `status_effects.tres`,全部 provisional——本文只登记口径与取值域):
+34 -93
View File
@@ -1,26 +1,25 @@
# 棋盘生成
> 一句话:棋盘怎么生成、怎么保证可推理可清图
> 状态:已定稿;现行为 v1.3
> 一句话:棋盘怎么生成——确定性随机布雷,不做质量承诺
> 状态:已定稿;现行为 v1.4
## 设计目的
棋盘生成是全项目扫雷图的唯一生产者:战斗结算每要一张新图,它就按关卡序号与节点深度对应的参数行,确定性造出一张可推理、可清图的雷图。它在生成时刻就作出质量承诺——玩家只会输给自己选的赌(比如终局只能猜的一格),不会拿到大面积无解的局;这是核心循环里"推理的确定性"卖点的生成端保障。同种子同参数必产同图,回放、测试、复盘都能精确复现——确定性既是卖点,也是调试工具。
棋盘生成是全项目扫雷图的唯一生产者:战斗结算每要一张新图,它就按关卡序号与节点深度对应的参数行,确定性造出一张雷图。生成端不做质量承诺——不担保"好推理"、不担保"不用猜",随机布雷允许猜局,猜是玩法的一部分(踩雷不是死亡是事实上报,归[排雷玩法](排雷玩法.md))。同种子同参数必产同图,回放、测试、复盘都能精确复现——确定性既是卖点,也是调试工具。
## 系统范围
边界这样划:本系统管"图从哪来、生成时承诺什么质量"。图上的动作怎么执行归[排雷玩法](排雷玩法.md),什么时候换图归[战斗结算](../战斗循环/战斗结算.md)编排,数值定多少归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)(本系统只提供参数表给数值落点),变异内容是什么归[地形变异](地形变异.md)(本系统不为变异做任何工作——变异格赋予在战斗初始化第 4 步执行,生成器产物恒零变异格)。本系统是个无状态的生产者:进参数与种子,出棋盘与指标,自己不留任何记忆。
边界这样划:本系统管"图从哪来"。图上的动作怎么执行归[排雷玩法](排雷玩法.md),什么时候换图归[战斗结算](../战斗循环/战斗结算.md)编排,数值定多少归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)(本系统只提供参数表给数值落点),变异内容是什么归[地形变异](地形变异.md)(本系统不为变异做任何工作——变异格赋予在战斗初始化第 4 步执行,生成器产物恒零变异格)。本系统是个无状态的生产者:进参数与种子,出棋盘与指标,自己不留任何记忆。
负责:
| 负责 | 说明 |
|---|---|
| 四阶段确定性生成管线 | 读参数 → 布雷 → 生成-验证 → 产出上报;顺序冻结,不调换、不跳步(变异布置段已移出管线) |
| 四阶段确定性生成管线 | 读参数 → 布雷 → 出板检查 → 产出上报;顺序冻结,不调换、不跳步(变异布置段已移出管线) |
| 棋盘生成参数表 | 全项目第一张按进度键(关卡序号 × 节点深度)回填的配置表;表结构归本系统定 |
| 可推理率度量与达标判定 | 生成时刻的质量承诺,含计算口径与定义版本号 |
| 出生区与反退化保证 | 出生 3×3 无雷、最小安全格数、开局白给板拒绝、清图可达性(变异不落出生区与展开域由布置段顺序保障) |
| 加载期参数校验 | 参数域、布雷数下限、可行性与成本闸校验;违例加载期致命 |
| 生成期指标集产出 | 实测可推理率、实际雷数等,供调参与下游对账 |
| 出生区与反退化保证 | 出生 3×3 无雷、开局白给板拒绝(变异不落出生区与展开域由布置段顺序保障) |
| 加载期参数校验 | 参数域与布雷数下限校验;违例加载期致命 |
| 生成期指标集产出 | 实际雷数、安全格数、重摇次数等,供调参与下游对账 |
不负责:
@@ -56,93 +55,51 @@
│ 在"全格 − 出生 3×3"范围均匀布雷
│ 开局免费展开域外扩一圈,圈内的雷移除(只减不增、不重投、无迭代)
▼
③ 生成-验证 ── 实测可推理率;不达标在同一张图的随机数配额内重试,至上限按出口分发
③ 出板检查 ─── 只查两条:出生区无雷、开局不全开;白给板同流重摇,直到不全开
▼
④ 产出上报 ─── 交出棋盘 + 生成期指标集
```
生成期间的每一次随机取数——布雷、重试——都从本图专属的一条"棋盘生成随机流"按固定顺序取:一张图只开一条流、用到底,重试不开新流;流之外零随机,全局随机函数一律禁用。参数行开始时一次快照,配置表中途热重载不影响进行中的生成。管线本身无状态——这些合起来就是"同种子同参数必产同图"的根基。(变异布置不消费本流——其取数走专用 variant_place 流,归战斗结算 布置段。)
生成期间的每一次随机取数——布雷、重摇——都从本图专属的一条"棋盘生成随机流"按固定顺序取:一张图只开一条流、用到底,重摇不开新流;流之外零随机,全局随机函数一律禁用。参数行开始时一次快照,配置表中途热重载不影响进行中的生成。管线本身无状态——这些合起来就是"同种子同参数必产同图"的根基。(变异布置不消费本流——其取数走专用 variant_place 流,归战斗结算 布置段。)
各阶段的失败都有明确语义,全部失败路径都不让玩家卡死(本节为纯流程规则,无计算;数值与校验式见后续各节):
各阶段的失败都有明确语义(本节为纯流程规则,无计算;数值与校验式见后续各节):
| 阶段 | 失败情形 | 语义 |
|---|---|---|
| 参数解析 | 行缺失或域违例 | 加载期校验已拦,运行期不会失败 |
| 布雷 | 雷数为 0 | 不会发生(零雷板加载期已拒) |
| 生成-验证 | 重试耗尽 | 按三分支出图(见"生成重试与成本闸") |
| 出板检查 | 开局白给板 | 同流重摇,直到不全开——这是唯一的重摇理由 |
| 产出 | —— | 无失败路径,交出棋盘与指标 |
### 出生区安全与反退化布雷:脚下无雷、废板不出厂
### 出生区安全与反退化布雷:脚下无雷、白给板不出厂
玩家开局站在棋盘上的 3×3 出生区,开局不花行动点就能看到一片区域——出生 3×3 加上从它出发经连锁展开(翻到八邻无雷的格时整片免费翻开的机制,玩家可见名"坍塌显形")免费带出的格,下文称**开局免费展开域**。本规则保证两件事:其一,脚下永远安全——出生区与开局免费展开域内恒无雷(变异亦然——变异格赋予在初始展开之后执行,天然不落已开区,见[地形变异](地形变异.md)布置段);其二,流出的每张图都可正常游玩——零雷板、安全格寥寥的板、开局白给的板、带孤岛安全格的板,都在生成期被拦下或整张弃用。
玩家开局站在棋盘上的 3×3 出生区,开局不花行动点就能看到一片区域——出生 3×3 加上从它出发经连锁展开(翻到八邻无雷的格时整片免费翻开的机制,玩家可见名"坍塌显形")免费带出的格,下文称**开局免费展开域**。本规则保证两件事:其一,脚下永远安全——出生区与开局免费展开域内恒无雷(变异亦然——变异格赋予在初始展开之后执行,天然不落已开区,见[地形变异](地形变异.md)布置段);其二,开局不全开——开局免费展开域覆盖全部安全格的板等于白给,重摇弃用。
**结论**:雷数先定数、再落位;零雷板与安全格不足的参数组合在加载期就被拒绝。
**结论**:雷数先定数、再落位;零雷板的参数组合在加载期就被拒绝。
```
布雷数 N = round(mine_density × (board_width × board_height − 出生格数)) (出生格数 = 出生区边长²,读表;出生区恒排除)
下限校验:N ≥ 1(零雷板加载期拒绝)
计数可行:board_width × board_height − N ≥ min_safe_count(加载期校验)
产物断言:实际安全格数 ≥ min_safe_count;实际雷数 ≤ N(先布后删只减不增)
产物断言:实际雷数 ≤ N(先布后删只减不增)
```
| 符号 | 含义 |
|---|---|
| mine_density | 雷密度参数,与图尺寸解耦 |
| board_width / board_height | 图尺寸参数 |
| min_safe_count | 最小安全格数下限参数——对冲"图上没几格安全、随便挖挖就清图领奖励"的刷奖励打法 |
| N | 该参数行每张图的目标雷数 |
| 反退化规则 | 内容 |
|---|---|
| 先布后删 | 先把 N 颗雷在"全格 − 出生 3×3"上布完,再把剃雷域内的雷移除——只减不增、不重投、无迭代,必然终止且可复现;实际雷数与 N 的差额随指标观测。**剃雷域**:「出生 3×3 ∪ 外扩 r 环」(切比雪夫距离 ≤1+r,r=shave_ring_radius 现行 1 → 5×5=25 格)——全域剃雷=开局免费展开巨大(10×10 板 R₀ 均值 68.6=板面 68.6%)的根因;现口径下开局免费展开=出生邻域剃雷诱发的自然连锁,均值降至板面约四成(10×10 实测 39.7) |
| 出生区安全 | 出生 3×3 与开局免费展开域内恒无雷;变异不落两域由布置段顺序保障(非本管线义务) |
| 开局白给板拒绝 | 开局免费展开域禁止覆盖全部安全格——等于即退化板,尝试弃用重试;运行期另有同义兜底不变式,归[排雷玩法](排雷玩法.md) |
| 清图可达性 | 每个安全格都必须能从出生区沿安全格八向连通走到;带孤岛安全格的板判非法,不进降级候选 |
| R₀≤cap 重掷闸 | 每次尝试出板后实测自然 R₀(开局免费展开格数),超过该行 r0_max_cap 即整板作废同流重试——合法性先于质量评分(同白给板先例);全部尝试超阈 → 既有三分出口接受最不坏+非法产物标记诚实降级,玩家永不卡死;闸触发次数随指标集 r0_cap_rejected 观测(占比过高=剃雷半径与闸配比失衡信号) |
| 开局白给板拒绝 | 开局免费展开域禁止覆盖全部安全格——等于即退化板,同流重摇弃用;运行期另有同义兜底不变式,归[排雷玩法](排雷玩法.md) |
清图可达性与可推理率是两道独立的闸:合法性先查、质量分后算——一张"分高但通不了"的图没有意义。另一条推理前提也由本系统保证:数字恒真,每个非危险格的数字恒等于它的八邻雷数,整局推理都建立在这句话上。
数字恒真是布雷算法的本分:每个非危险格的数字由八邻雷数直接算出,构造上恒成立,不设运行期检查——算错了是算法缺陷,修算法,不是加检查。
### 可推理率承诺:生成时就担保玩家算得对
### 不做质量承诺:猜局是玩法的一部分
可推理率(inferability)回答一个问题:这张图上有多少安全格,玩家不靠赌、纯凭逻辑就能挖开?它是整张图的"不靠赌占比":把开局免费展开、连锁展开、数字推导三种通道能确定挖开的安全格数,除以安全格总数。生成端承诺每张图实测占比不低于该行及格线——玩家可以输给自己选的赌,但不会拿到一张大面积无解的图。
**结论**:每张图生成时实测可推理率,实测值 ≥ 该行及格线;及格线取值域 [0.85, 1],域下限 0.85 是"不许纯猜局"的绝对锚(结构冻结——调整走文档修订,不是调参)。
```
可推理率(图) = 不靠赌能确定挖开的安全格数 ÷ 安全格总数
不靠赌揭示闭包:从开局免费展开域出发,交替应用两条规则直到不再新增——
① 连锁:翻到 0 格(八邻无雷的数字格)→ 其八邻安全格全部计入
② 推导:与已揭示区八向相邻的安全格,求解器凭可见数字能唯一断定其非雷 → 计入
```
| 口径 | 内容 |
|---|---|
| 与玩家信息同步 | 评分模拟只看玩家能看见的盘面:没开的格看不见,危险格位置不许偷看 |
| 三通道计入 | 免费展开、连锁、推导挖开的格都算"不靠赌";免费展开格同时计入分子与分母 |
| 次序无关 | 先连锁还是先推导,闭包结果相同——分数与玩家的操作顺序无关 |
| 版本防漂移 | 指标输出带定义版本号(当前 1);改推理定义 = 文档修订 + 黄金图向量重制,版本号随之跳变 |
推理规则域 solver_rules 冻结为 single_subset(单点规则加子集消减——经典扫雷式确定性推理:凭单个数字、以及两组数字的差能唯一断定的格)。它是可推理率定义的一部分,不是调参项;放宽或收紧它都等于改"算得对"的定义,须走文档修订。
### 生成重试与成本闸:重试有上限、降级必上报
一张图生成后先实测可推理率,不达标就在同一张图的随机数配额内重试——不开新图、不换种子。重试不是无限的:总取数规模受成本闸约束,且禁止拿真实耗时当逃生阀——否则同一颗种子在快慢机器上会产出不同的图,"同种子同图"就不成立了。
**结论**:重试次数与图尺寸联合受成本闸约束。
```
成本闸:max_gen_attempts × board_width × board_height ≤ 成本闸护栏常数 (结构护栏常数,见棋盘参数表字段定义;provisional 量级,正式值待实现期定)
```
| 出口 | 何时走 | 发生什么 |
|---|---|---|
| 达标即出 | 重试中出现合法且达标的图 | 出最早达标的那张,不追求全场最高分 |
| 接受最优 | 重试耗尽,有合法图但无一达标 | 出合法图中可推理率最高的一张(并列取最早)+ 强告警 + 降级标记 |
| 接受最不坏 | 重试耗尽且一张合法图都没有 | 按确定性劣度排序出最不坏的一张 + 最高级告警 + 非法产物标记 |
最后一条出口是诚实降级:玩家永不卡死——哪怕找不到合法板也照常出图;但绝不静默——非法产物标记随指标集上抛,由[战斗结算](../战斗循环/战斗结算.md)编排、经 [HUD 框架](../表现与支撑/HUD框架.md)诚实告知玩家(提示、补偿还是回退,呈现细节归下游)。运行期安全网兜住体验,质量红线靠调参期批量断言守住:非法产物严格零容忍、低于及格线的板数严格为零——两层不许互相折算。
每次尝试先过合法性关——清图可达、安全格数达标、结构不变式全过——再谈质量分;非法尝试弃用重试。合法性闸在质量评分之前,质量分禁止掩盖功能残废。
生成端不度量"好不好推理"、不筛选"够不够好推理"的板:经典扫雷式随机布雷天然允许猜局,玩家靠数字推理推进,推不动的格子自己权衡赌不赌(挖开危险格不是死亡是事实上报,归[排雷玩法](排雷玩法.md))。推理求解程序(凭可见数字做确定性推导的程序)只保留在离线模拟测量(MC 批量模拟)中作测量工具,不参与生成管线。
### 图类型标签与第三轴预留:主题恒定、Boss 板有座位
@@ -165,8 +122,7 @@
| 上游 | [数据配置](../表现与支撑/数据配置.md) | 参数表承载、类型化读取与加载期校验通道;棋盘生成随机流的种子派生(每图开一次流) |
| 相邻 | [地形变异](地形变异.md) | 相邻事实依赖:布置执行位在战斗初始化第 4 步(战斗结算 编排段),生成器产物恒零变异格;出生区/展开域"无变异"承诺由该顺序结构保障 |
| 下游 | [排雷玩法](排雷玩法.md) | 棋盘产物消费方;开局免费展开由对方执行,展开域口径按双方登记的回验条款对齐 |
| 下游 | [战斗结算](../战斗循环/战斗结算.md) | 换图调用方与指标对账方;零合法板的玩家侧诚实告知由其编排 |
| 下游 | [行动经济](行动经济.md) | 单向事实依赖:P(安全)(挖掘目标格为安全格的概率)是对方挖掘风险不等式的概率锚,锚值由本系统供给——实测可推理率分布的低分位值,不是及格线参数 |
| 下游 | [战斗结算](../战斗循环/战斗结算.md) | 换图调用方与指标对账方 |
| 下游 | [难度曲线与Boss](../冒险循环/难度曲线与Boss.md) | 参数数值所有权方;只按表调参,禁反向调用生成 |
| 下游 | [关卡节点地图](../冒险循环/关卡节点地图.md) | 第三轴 Boss 板落点约定的共同输入 |
| 下游 | [地图战斗资源](../战斗循环/地图战斗资源.md) | board_type 作图类型上下文(行参数静态恒定) |
@@ -174,27 +130,23 @@
| 对外接口 | 形态 |
|---|---|
| 生成入口 | 生成(关卡序号, 节点深度, 种子) → 棋盘 + 生成期指标集;无状态纯函数 |
| 生成期指标集 | 实测可推理率(带定义版本号)、实际雷数与安全格数、重试次数、降级/非法产物标记 |
措辞登记(防口径混写):可推理率是整图级的"不靠赌占比",生成侧口径;P(安全) 是单格认知概率,决策侧口径——免赌集内 P(安全) 恒为 1,风险全部收缩到剩余盲猜集。本系统供给前者,不定义后者。
| 生成期指标集 | 实际雷数与安全格数、目标雷数、重摇次数、剃雷数、开局免费展开格数 |
## P0 最小闭环
1. 战斗结算以(关卡序号,节点深度)调用生成,本系统开一条棋盘生成随机流。
2. 读取并快照参数行(加载期校验已通过)。
3. 先定数布雷、先布后删;出生区安全与反退化不变式全过。
4. 实测可推理率,不达标在流内重试至上限,按三分支出图(变异布置不在本管线——装板后由战斗结算 布置段执行)。
3. 先定数布雷、先布后删;出生区无雷检查过。
4. 开局白给板检查,违例同流重摇直到不全开(变异布置不在本管线——装板后由战斗结算 布置段执行)。
5. 交出棋盘 + 指标集:排雷玩法消费棋盘,战斗结算消费指标对账——循环闭合于下一次换图请求。
## P1 / P2 后置
| 优先级 | 内容 | 后置原因 |
|---|---|---|
| P1 | 调参期批量断言工具全量交付(逐行数百样本;可推理率零违例、及格线下限、非法产物零容忍、难度方向 advisory 与分位报告) | 调参期离线工具域;冒烟只载缩样 |
| P1 | 与战斗结算的接线断言(图内重试不当作新流事件、对账消费实测分布) | 断言登记在对方验收清单 |
| P1 | 调参期批量断言工具全量交付(逐行数百样本;确定性复现、出生区安全、白给板零容忍) | 调参期离线工具域;冒烟只载缩样 |
| P1 | 与战斗结算的接线断言(图内重摇不当作新流事件、对账消费实测分布) | 断言登记在对方验收清单 |
| P1 | 与排雷玩法的展开域回验集成 | 回验两臂登记在对方文档,集成随对方排期 |
| P2 | 推理域扩展(solver_rules 启用其他规则集或新增信息源) | 改可推理率定义 = 文档修订,MVP 冻结 |
| P2 | 生成异步化与成本闸正式值定稿 | 实现期决策,随性能预算批 |
| P2 | ~~变异布置内容接入~~(已完成——布置执行位在战斗初始化第 4 步,管线零布置义务) | — |
## 调参表
@@ -205,31 +157,20 @@
|---|---|---|---|
| board_width / board_height | int [8, 64] | 两档结构,现行面值见 board_gen.tres(provisional 参考行) | 图尺寸 |
| mine_density | float (0, 0.5] | 现行值见 board_gen.tres | 雷密度,与尺寸解耦 |
| inferability_target | float [0.85, 1] | 现行值见 board_gen.tres | 可推理率及格线;域下限 0.85 绝对锚 |
| solver_rules | enum {single, single_subset} | single_subset(冻结,非调参) | 推理规则域 |
| min_safe_count | int [1, 999] | 现行值见 board_gen.tres | 最小安全格数下限 |
| max_gen_attempts | int [1, 32] | 域 [1, 32],现行按行取值见 board_gen.tres | 生成-验证重试上限;受成本闸联合约束 |
| board_type | String,词表 {dungeon, underdark, deep_underdark} | 现行值见 board_gen.tres(词表 v1.1) | 图类型标签(玩家侧「地图类型」);域校验 = 词表成员检查 |
| shave_ring_radius | int [0, 2] | 现行 1(board_gen.tres 全行) | 先布后删剃雷半径:剃雷域=距出生中心切比雪夫距离 ≤1+r 的格(r=1 → 5×5=25 格;r=0 即只剃出生 3×3 本身=无环剃雷)。调参项非结构冻结 |
| r0_max_cap | int [出生格数, 板格数一半](护栏,违例加载期致命;出生格数=出生区边长自乘,读出生区行) | 现行按板形:10×10=45 / 12×12=43 / 13×13=51 / 14×14=59(board_gen.tres) | 自然 R₀(开局免费展开格数)上限闸=合法性门;超阈整板重掷、耗尽走三分出口。板面锚现行值 = 45/43/51/59(10×10 行经用户裁上调——r=1 自然均值 39>30 结构性倒挂;其余行维持 30% 锚) |
| 出生区边长 | int [3, 5],奇数(中心对称,side = 2r+1);现行值读 board_gen.tres 表头 | 表头全局单值(非逐行) | 玩家出生区为以出生中心对称的 side×side 方区,区内恒无雷;布雷域基与 r0_max_cap 护栏下限均由它导出(格数 = side²)。入表后格数零字面量 |
| 出生区边长 | int [3, 5],奇数(中心对称,side = 2r+1);现行值读 board_gen.tres 表头 | 表头全局单值(非逐行) | 玩家出生区为以出生中心对称的 side×side 方区,区内恒无雷;布雷域基由它导出(格数 = side²)。入表后格数零字面量 |
结构冻结(非调参项):键结构与每关深度 0 锚行、四阶段顺序(变异布置段已移出管线)、solver_rules、可推理率的合法信息源枚举、及格线域下限 0.85、成本闸常数(结构护栏,登记在案,调整走文档修订)、先布后删语义。
结构冻结(非调参项):键结构与每关深度 0 锚行、四阶段顺序(变异布置段已移出管线)、先布后删语义、出板检查只两条(出生区无雷、开局不全开)。
## 验收标准
- 确定性复现:同参数行同种子生成两遍,格状态与指标集逐位相同;换种子产物不全同。
- 出生区安全:出生 3×3 与开局免费展开域内零雷(零变异由布置段顺序保障——生成器产物恒零变异格)。
- 数字恒真:每个非危险格的数字恒等于其八邻雷数。
- 布雷纪律:N ≥ 1、实际雷数 ≤ N、实际安全格数 ≥ min_safe_count。
- 无开局白给板:开局免费展开域 ≠ 全部安全格,违例尝试弃用重试。
- 可清图:每个安全格都能从出生区沿安全格八向连通到达;合法性闸先于质量评分。
- 及格线:每张图实测可推理率 ≥ 该行及格线;任何行及格线 ≥ 0.85。
- 重试有界:实际重试次数落在 [1, max_gen_attempts];同一次生成内的重试不开新随机流。
- 成本闸:max_gen_attempts × 宽 × 高超过成本闸护栏常数(结构护栏常数,见棋盘参数表字段定义)的行加载期被拒;同种子同参数在任意机器上出图逐位一致。
- 降级诚实:零合法板照常出图,必带非法产物标记与最高级告警;进程不死锁,玩家界面得到诚实告知。
- 加载期校验:布雷数下限、计数可行性、标签非空等违例组合加载期致命。
- 黄金图回归:手工核验小板集的可推理率输出与登记整数对逐位相等(整数对比对,禁浮点容差);换生成参数(推理定义、信息源、定义版本号)必须重制向量并入版本库。
- R₀≤cap 闸:每张出图自然 R₀ ≤ 该行 r0_max_cap(合法板),或带非法产物标记(接受最不坏·诚实降级);闸触发次数入指标集 r0_cap_rejected。
- 布雷纪律:N ≥ 1、实际雷数 ≤ N。
- 无开局白给板:开局免费展开域 ≠ 全部安全格,违例同流重摇。
- 重摇同流:同一次生成内的重摇不开新随机流;重摇次数入指标集。
- 加载期校验:布雷数下限、尺寸与密度域、标签词表等违例组合加载期致命。
- 黄金图回归:手工核验小板集的整板格状态与登记向量逐位相等;换生成参数必须重制向量并入版本库。
- 剃雷域参数化:剃雷域=出生中心切比雪夫 ≤1+shave_ring_radius 的方域,出图 ring_removed ≤ 域内候选危险格数 (3+2r)²−9。
- 表实一致:配置表字段与棋盘参数表字段定义一致。
- 表实一致:配置表字段与棋盘参数表字段定义一致。
@@ -1,7 +1,7 @@
# 行动经济
> 一句话:每轮行动点怎么花、停手与刷新的代价
> 状态:已定稿;现行为 v1.7
> 状态:已定稿;现行为 v1.8
## 设计目的
@@ -180,7 +180,7 @@ action 型格面资源:正向行 ap_up = 下轮行动点 +1,负向行 ap_dra
<text x="340" y="348" text-anchor="middle" dominant-baseline="central" font-family="sans-serif" font-size="12" fill="#B5D4F4">弃图刷新=推理死路的退路,不是更划算的打法</text>
</svg>
**结论**:前四条契约由战斗结算作为唯一对账责任方闭合验收;第五条是行为说明,不设对账读数。概率侧由棋盘生成的可推理率参数锚定;条款3 数值层由 β 比值带 [1.2, 2.5] 判读看护(清图支配性审计为常设重跑项),封印边际结构层由条件二封印溢价接替(机制载体 settlement.flag_hit_premium)。
**结论**:前四条契约由战斗结算作为唯一对账责任方闭合验收;第五条是行为说明,不设对账读数。条款3 数值层由 β 比值带 [1.2, 2.5] 判读看护(清图支配性审计为常设重跑项),封印边际结构层由条件二封印溢价接替(机制载体 settlement.flag_hit_premium)。
推导:
@@ -1,7 +1,7 @@
# 数据配置
> 一句话:数值表与单一事实源管线
> 状态:已定稿;现行为 v1.4
> 状态:已定稿;现行为 v1.5
## 设计目的
@@ -57,7 +57,7 @@
| 表 | 载什么 | 回填责任方 |
|---|---|---|
| 行动经济表 | 每轮行动点、动作价目、停手与刷新门槛 | [行动经济](../排雷循环/行动经济.md) |
| 棋盘生成参数表 | 板尺寸、雷密度、可推理率目标等(进度键表) | [棋盘生成](../排雷循环/棋盘生成.md) |
| 棋盘生成参数表 | 板尺寸、雷密度、图类型等(进度键表) | [棋盘生成](../排雷循环/棋盘生成.md) |
| 变异表 | 变异类型清单(现行六行:region 六行两轴×三关;global 整图型贫矿脉行已删,global 型机制代码保留) | [地形变异](../排雷循环/地形变异.md) |
| 敌人表 | 敌种基线数值、遭遇数量区间、护甲类型、技能池模板(进度键表) | [敌人系统](../战斗循环/敌人系统.md) |
| 技能表 | 技能行定义(类型/倍率/冷却/增益引用/触发条件)与保底阈值 | [敌人系统](../战斗循环/敌人系统.md) |
+2 -13
View File
@@ -1,7 +1,7 @@
# 秘宝
> 一句话:营地装配、整局冒险生效的角色机能件——操作包络加强(视野/行动点/刷新/挖掘距离等),不出角色战斗属性值、不改战斗结算机制(经济与操作参数——视野/距离/行动点/刷新/转存率——属操作包络;分界规则归[核心循环](../../01-核心循环.md)「道具三层职责与分界」节)
> 状态:已定稿(现行形态=局外同调件);现行为 v1.3
> 状态:已定稿(现行形态=局外同调件);现行为 v1.4
> 定位与形态:见下节
> 术语:本文件的项目术语(同调位/RAP/GP/真视/危险格/整图等)定义见[术语表](../../术语表.md)
@@ -145,18 +145,7 @@
凡是"直接告诉你危险格在哪"的效果(下文称真视),一次最多照亮 3×3 的窗口,任何道具都不允许全图看雷。全图级范围只留给恢复推理原料类的效果——显影、预读这类把已有事实交还玩家的信息,允许大范围(原则上被允许,见不做清单的边界锚)。这条限制写进数据校验:任何真视类道具的目标域字段超过 3×3,加载数据时直接返回错误并拒绝——护栏由加载期强制,不靠运行时拦截。
**道具的收益在"少赌",不在"单赌更安全"**:信息类道具不改变棋盘,只减少玩家必须盲赌的次数。真视把 k 格移出盲挖候选域——这 k 格从"要赌"变成"必避或必封印"的确定决策;情报类道具抬高棋盘可推理率,收缩"只能赌"的格子池。单次盲赌的命中率会随格子池收缩而上升,这是正常读数——收益按"赌的次数变少、期望踩雷下降"计,不按单次命中率计。
```
残余盲赌安全格数 n_s = (1 − ι) × |S|
单次盲赌踩雷概率 P(雷) = |M| ÷ (|M| + n_s)
```
| 变量 | 含义 | 来源 |
|---|---|---|
| ι | 棋盘可推理率(不必赌、可直接推理开挖的格子占比) | [棋盘生成](../排雷循环/棋盘生成.md)的整图实际值 |
| \|M\| / \|S\| | 板上危险格数 / 安全格数 | 棋盘事实 |
| n_s | 推理覆盖之外、只能盲赌的安全格数 | 上式派生 |
**道具的收益在"少赌",不在"单赌更安全"**:信息类道具不改变棋盘,只减少玩家必须盲赌的次数。真视把 k 格移出盲挖候选域——这 k 格从"要赌"变成"必避或必封印"的确定决策;情报类道具收缩"只能赌"的格子池。收益按"赌的次数变少、期望踩雷下降"计,不按单次命中率计。
设计意图一句话:恢复推理的效果可以大,代替推理的效果必须小而贵——花钱全图看雷,等于把扫雷换成走格子。定量当量换算归[战斗结算](../战斗循环/战斗结算.md)的效果对照表,MVP 不入表。
@@ -18,7 +18,7 @@ var _rng
func _init() -> void:
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:219 棋盘生成宿主(装载组)
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:166 棋盘生成宿主(装载组)
_db = ConfigDBScript.new()
# 表加载失败不中止(承 G2 同款:表损坏的红落在具体断言上——
# 诊断在此展开,后续断言按坏表实况逐条验红;collect_only=true 下成员照常赋值可评)
@@ -144,7 +144,7 @@ class _BoardRowStub:
func _smoke_board_generator() -> void:
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:221 (确定性复现+布雷纪律组)
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:168 (确定性复现+布雷纪律组)
print("--- 棋盘生成 ---")
var board_generator = load("res://core/board_generator.gd").new()
for L in [1, 2]:
+6 -6
View File
@@ -13,7 +13,7 @@ var _db: ConfigDb
func _init() -> void:
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:219 棋盘生成(装载组)
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:166 棋盘生成(装载组)
_db = load("res://core/config_db.gd").new() as ConfigDb
if not _db.load_tables("res://data/tables", false):
Kit.check("数值表加载", false)
@@ -40,7 +40,7 @@ func _generate(L: int, D: int, seed0: int) -> BoardData:
func _test_generate_shape_and_mines() -> void:
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:224 (布雷纪律组)
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:170 (布雷纪律组)
var b := _generate(1, 0, 71000)
if b == null:
Kit.check("生成返回棋盘", false)
@@ -61,7 +61,7 @@ func _test_generate_shape_and_mines() -> void:
# 目标雷数公式单点(d14):同参同值对拍原式 + 真实产图指标读数同源
func _test_target_mine_count_single_source() -> void:
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:224 (雷数单源组)
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:170 (雷数单源组)
var bad := 0
var checked := 0
for L in [1, 2, 3]:
@@ -92,7 +92,7 @@ func _test_target_mine_count_single_source() -> void:
func _test_digits_equal_neighbor_mine_count() -> void:
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:223 (数字恒真组)
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:98 (数字恒真组)
var b := _generate(1, 1, 72000)
if b == null:
Kit.check("生成返回棋盘(数字段)", false)
@@ -113,7 +113,7 @@ func _test_digits_equal_neighbor_mine_count() -> void:
func _test_same_seed_bit_identical() -> void:
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:221 (同种子逐位复现组)
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:168 (同种子逐位复现组)
var a := _generate(2, 0, 73000)
var b := _generate(2, 0, 73000)
if a == null or b == null:
@@ -124,7 +124,7 @@ func _test_same_seed_bit_identical() -> void:
func _test_clearable_and_inferability_selfconsistent() -> void:
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:226 (可清图与及格线自洽组)
# 判据出处: design/gdd/systems/排雷循环/棋盘生成.md:100 (可清图与及格线自洽组)
var b := _generate(1, 0, 74000)
if b == null:
Kit.check("生成返回棋盘(可推理段)", false)
+3 -3
View File
@@ -98,13 +98,13 @@
### ⑬ 初始展开收窄体感
- **机制一句**:开局免费展开(R₀)= 剃雷域出生 5×5(shave_ring_radius=1),另加生成期 R₀≤cap 重掷闸封顶(10×10≤45 / 12×12≤43 / 13×13≤51 / 14×14≤59)。
- **机制一句**:开局免费展开(R₀)= 剃雷域出生 5×5(shave_ring_radius=1)诱发的自然连锁。
- **对症信号(「开一大片」体感)**:开局第一挖还会不会「唰一下开掉大半张图」?预期=开场仍是出生区连锁、但明显比以前克制;「开了片面积」的失控感是否消退。
- **节奏信号(单板停留时长)**:单块雷图的挖掘轮数/停留时长变化(免费信息变少 → 每板要多挖几格才有全图视野)——是变紧凑了还是变拖沓。
- **策略信号(连锁与微光预读)**:玩家是否更依赖读数字推雷/类型微光预读(免费视野少了,推理工具的使用率应上升)。
- **迷雾联动信号(记忆态使用率)**:视野外扩道具(魔法提灯 +2 已退役,本信号面失效)与记忆态(暗淡已见格)的使用频率变化。
- **红灯信号**:开局连续多板几乎无免费展开(R₀ 常年 ≈9-15,体感「开局一片黑」);或可推理率体感骤降(数字不够推)。前者=剃雷半径 r 回调面(P1 旋钮 [0,2]),后者归 S1 相变警戒复测。
- **结论回流**:体感 → 本条目记录;参数终值(r 0/1/2、cap 收紧路径 45→40 等)归 P1-P3 拍板面(读数后置,MC 四带复算挂体验验证清单现行义务),不在试玩现场改数。
- **红灯信号**:开局连续多板几乎无免费展开(R₀ 常年 ≈9-15,体感「开局一片黑」)=剃雷半径 r 回调面(P1 旋钮 [0,2])。
- **结论回流**:体感 → 本条目记录;参数终值(r 0/1/2)归 P1-P3 拍板面(读数后置,MC 四带复算挂体验验证清单现行义务),不在试玩现场改数。
### ⑭ Boss 半血解锁呈现目检(D8 呈现面)
+4 -5
View File
@@ -35,12 +35,11 @@
**改动面**:文档+游戏代码
**状态**:待文档设计
#### 未决问题迁移——A1 生成性能姿态 F2c 常数定稿(2026-11-07 登记,来源=批次移交)
#### 可推理率承诺与生成-验证-重试管线退役(2026-11-09 登记,来源=会话提及)
**实况**:原 architecture.md「未决问题」QQ-11(git 历史可考,架构收窄批迁出)。切片实证 10×10/12×12 同步生成可接受,WorkerThread 留扩展。
**缺口**:还差 [棋盘生成](design/gdd/systems/排雷循环/棋盘生成.md) GDD 修订批定稿 F2c 常数。
**改动面**:文档
**状态**:待文档设计
**实况**:设计定稿已落文——design/gdd/systems/排雷循环/棋盘生成.md v1.4(生成不做质量承诺,出板检查只留出生区无雷与开局不全开两条,白给板同流重摇;求解器只留离线 MC 测量)、design/gdd/systems/排雷循环/行动经济.md v1.8(概率锚句删除)、design/gdd/systems/跨局循环/秘宝.md v1.4(ι 公式删除留定性条款)、design/gdd/systems/冒险循环/难度曲线与Boss.md v1.7+design/gdd/03-内容规模.md+design/gdd/systems/表现与支撑/数据配置.md v1.5+体验验证清单.md ⑬ 同步改写。原 QQ-11(F2c 常数定稿)随成本闸退役注销。代码侧待退役=求解器/质量重试/成本闸/ min_safe 与 R₀ 上限闸,求解器迁 sim;game/tests/README.md 能力清单归写卡段同步。
**改动面**:文档+游戏代码
**状态**:文档设计已闭合
#### 未决问题迁移——零伤害死局跨字段跨表护栏落点(2026-11-07 登记,来源=批次移交)