← 返回作品集 叶明轩 · ShelfMatch(柜子三消)设计文档

《ShelfMatch》柜子三消 · 数值设计文档 v1.0

作者:叶明轩 | 日期:2026-09 | 状态:v1.0(以可玩 Demo 7 关实际实现为准) 配套材料:《ShelfMatch 柜子三消 · 系统设计案 v1.1》、《GoodsMatch 产品拆解案》、可玩 Demo(Godot)

数值来源约定(全文统一) - [代码:常量名] = 直接取自 Demo 源码(scripts/game_manager.gd 等),与实物一致 - [设计案:R-XX / 章节] = 取自系统设计案 v1.1 原文 - [反推] = 由已实装配置计算得出,非独立设定 - [待定] = 尚未定稿 / 未实测的建议值,明确不冒充已定数值

更新记录 - v1.0(2026-09):初版,以 7 关实现为准重写数值模型,补全「星级评定 / 结算分」(标注待实装)


1. 数值设计目标

1.1 验证命题

本 Demo 的核心循环是「空间管理 + 时间压力」:在多柜之间挪动物品、凑三同消除、倒计时内清空。数值系统的唯一使命,是让这条循环既撑得起策略深度,又守得住休闲节奏——具体拆成三条可量化目标:

目标 量化检验标准
策略可成立 每关布局算法保证必有解,玩家失败只能归因"规划慢/错",不归因"运气差" [反推]
压力可承受 单件时间预算随关卡递减,但始终留出"消除续命"的容错空间 [反推]
难度有梯度 7 关呈现可感知的递进,且第 1 关可作教学、第 7 关可作满星挑战 [反推]

1.2 作品集定位

数值文档与系统设计案(第 4 章数值模型)互为补充:本文是落地后、可玩实物对齐的完整数值说明;设计案第 4 章是设计初期的模型推演。两者差异处已逐项注明,作为"设计 → 实现 → 调优"完整证据链的一部分。


2. 五特性分析

按数值模块的五个通用特性,对本作全部数值对象做归类,明确每个数值"从哪来、怎么长、何时亡、如何变、跟谁连"。

特性 本作对应 说明
生成 反向生成法产出关卡布局 完成态 + K 次合法移动 → 初始布局,保证必可解(见 §8)[代码:reverse_generator.gd]
成长 关卡难度递进 种类 K、柜子 C、时间 T、打乱步数 K 四变量随关卡单调变化(见 §10)[代码:LEVELS]
消亡 三同消除 物品生命周期终点:凑齐 3 同 → 消失 + 返还时间 [代码:SCORE_MATCH]
变化 倒计时压力 + 道具改局 时间单向递减;「打乱」重分配、「加时」回血,不单向成长 [代码:use_prop]
联系 数值间的耦合约束 分数↔消除、时间↔返还、K↔分散度↔时间预算、道具↔时间上限(见下)

关键联系(耦合约束): - 消除次数 = 物品总数 ÷ 3(每类恒 3 件)→ 单关消除次数被物品数锁定 [反推] - 消除返还受「初始时间 T」封顶 → 返还不会让时间无限膨胀 [代码:TIME_BONUS + add_time] - 加时道具与消除返还共用同一上限 → 维持"T = 本关资源总量"的唯一认知 [代码:use_prop] - 打乱步数 K 决定分散度 → 分散度反哺时间预算的设定 [代码:GENERATOR_K]


3. 核心数值变量定义

变量 符号 取值范围(v1.0) 对难度的作用方向
柜子数量 C 4 ~ 10 [代码:LEVELS] C↑ → 物品更分散、查找更难(难度↑),但周转空间也↑(难度↓),净效应看配比
物品种类数 K 3 ~ 8 [代码:LEVELS] K↑ → 凑对路径变长,难度↑
每类物品数 p 恒 3 [代码:ITEMS_PER_TYPE] 固定值,保证消除组数 = N/3 为整数
每柜槽位数 s 恒 3 [代码:NUM_SLOTS] 固定值,决定表层/中层/深层三层结构
堆叠层数 L 恒 3 [反推:槽位数] 层数固定,规划链深度由"种类 + 柜数"间接决定
分散度 D 由打乱步数 K 控制 [代码:GENERATOR_K] D↑ → 同类物品越分散、所需挪动越多,难度↑
初始时间 T 60 ~ 100 秒 [代码:LEVELS] T↓ → 压力↑
打乱步数 K_shuffle 10 ~ 100 [代码:GENERATOR_K] K_shuffle↑ → 分散度↑,难度↑

注意区分「物品种类数 K」与「打乱步数 K_shuffle」两个符号,下文明示避免混淆。


4. 关卡数值总表(7 关)

以下为文档主体,全部数值取自 Demo 实际配置,派生列均 [反推] 计算。

关卡 柜 C 种类 K 每类数 物品总数 N 槽位总数 空槽数 空柜数 初始时间 T(s) 打乱步数 K_shuffle 单件时间预算 T/N
L1 4 3 3 9 12 3 1 90 10 10.0
L2 5 4 3 12 15 3 1 100 20 8.3
L3 6 5 3 15 18 3 1 100 35 6.7
L4 7 6 3 18 21 3 1 95 50 5.3
L5 8 7 3 21 24 3 1 85 65 4.0
L6 9 8 3 24 27 3 1 70 85 2.9
L7 10 8 3 24 30 6 2 60 100 2.5

派生列说明 [反推]: - 物品总数 N = 种类 K × 3 - 槽位总数 = 柜 C × 3;空槽数 = 槽位 − N;空柜数 = 空槽 ÷ 3 - 空柜数 = 柜 C − 种类 K(每种物品在完成态独占 1 柜,见 §8):L1~L6 恒为 1,L7 为 2 - 单件时间预算 = T ÷ N,保留 1 位小数


5. 时间预算模型

5.1 设计案原公式 [设计案:4.2]

初始时间 T = 基础操作时间 + 物品总数 N × 单件决策时间 s − 分散度修正
(v1.1 初估 s = 3 秒/件)

5.2 实际配置呈现的规律 [反推]

落地后的 7 关时间并非该线性公式的直接取值,而是调优后的一条"单件预算递减"曲线

关卡 T N T/N(单件预算) 定性
L1 90 9 10.0s 教学关,预算宽松
L2 100 12 8.3s 引入堆叠后仍给足余量
L3 100 15 6.7s 时间持平、物品增多 → 实际更紧
L4 95 18 5.3s 时间反降,压力抬升
L5 85 21 4.0s 接近 v1.1 的 3s/件 估算
L6 70 24 2.9s 触及 s=3s 的下沿
L7 60 24 2.5s 极限挑战,低于估算线

结论(如实说明):v1.1 的 T = 基础 + N×s设计初期的线性估算模型;实际 7 关呈现"单件预算从 10s 递减到 2.5s"的非线性调优结果。两者是"设计模型 vs 调优结果"的关系,不是一一对应,故本文不强行把 7 关数值套回该公式。

5.3 时间规则(已实装)[代码]

项目 数值 来源
初始时间 T 见 §4 表 [代码:LEVELS]
消除返还 +5 秒/次 [代码:TIME_BONUS]
返还上限 封顶 = 本关初始时间 T [代码:add_time]
警戒阈值 剩余 ≤ 10 秒 → 变红提示 [代码:main.gd:_on_time_updated]

5.4 消除返还的理论上限 [反推]

单关消除组数 = N ÷ 3,返还理论上限 = (N ÷ 3) × 5s(实际受封顶 T 约束): L1=15s → L6/L7=40s。返还的价值是"操作好就续命",而非无限回血。


6. 计分系统

6.1 已实装 [代码]

项目 数值 来源
单次消除得分 +100 分 [代码:SCORE_MATCH]

6.2 已设计 · 待实装 [设计案:4.4 / R-16]

以下两项在设计案中已定义,但当前 Demo 代码尚未实现,故标注「待实装」,不冒充现状。

项目 定义 来源
通关结算分 消除分 + 剩余时间 × 10 [设计案:4.4]
星级评定 剩余时间 ≥ 初始时间 40% → ★★★;≥ 15% → ★★;> 0 → ★ [设计案:R-16]

6.3 分数定位

v1.0 无外围经济(无货币、无解锁),分数仅用于自我挑战与展示 [设计案:4.4]


7. 可解性保证(反向生成法)

7.1 原理 [代码:reverse_generator.gd]

从"完成态"(同种类物品归入同一柜)出发,执行 K_shuffle 次遵守游戏规则的合法移动,打乱成开局布局。因每次移动可逆,玩家逆序操作即可还原完成态 → 任意布局必然可解,从算法上消灭死局。

7.2 生成五步流程 [代码:reverse_generator.gd]

  1. 构造完成态:每种物品独占 1 柜,组内顺序随机
  2. K_shuffle 次合法移动(禁止即时逆操作,防震荡)
  3. 定向拆三同:消除开局已成组的柜子
  4. 随机填充 × 3 轮 + 每轮拆三同,让布局更"乱"
  5. 反两同:拆掉"同柜 2+ 相同"的柜子(保证前 6 关无两同开局)

7.3 打乱步数 K_shuffle 与分散度

关卡 K_shuffle 分散度 D(定性)
L1 10 低(同类近,易规划)
L2 20
L3 35
L4 50
L5 65 中高
L6 85
L7 100 极高

[代码:GENERATOR_K]。K_shuffle 越大 → 同类越分散 → 所需挪动步数越多 → 难度越高。

7.4 随机性保证 [代码:reverse_generator.gd:generate]

每次重开同一关均调用 randomize() 重新走完整流程,布局不重复(满足"连续重开 10 局布局不同"的验收要求)。


8. 道具数值(已实装)[代码]

道具 效果 每关次数 上限 来源
加时 倒计时 +10 秒 2 次,过关重置 封顶 = 初始时间 T [代码:use_prop]
打乱 剩余物品重新随机分配 2 次,过关重置 —(无) [代码:use_prop + _execute_shuffle]

设计定位 [设计案:3.8]:反向生成法已保证必可解,「打乱」的定位不是防死局兜底,而是给"思路绕晕"的玩家一次重整理机会;「加时」是限时模式下的压力调节阀。两者共同构成"挫败感保险",靠次数限制防止依赖。

调参观察点 [设计案:4.6]: - 打乱使用率显著高于加时 → 关卡布局过绕 - 加时使用率显著高于打乱 → 时间预算偏紧 - 道具使用率 < 20% → 数值感知弱或引导不足


9. 难度曲线分析

9.1 三管齐下的难度递进 [代码:LEVELS]

维度 L1 → L7 方向
种类 K 3 → 8 递增(凑对路径变长)
柜数 C 4 → 10 递增(物品更分散)
时间 T 90 → 60 递减(压力增大)
打乱步数 K_shuffle 10 → 100 递增(分散度升高)

9.2 单件时间预算递减 [反推]

T/N 从 10.0s(L1)一路压到 2.5s(L7),是本作最核心的难度梯度:同样的挪动/消除操作,可用的思考时间逐关收缩,压力从"充裕"过渡到"极限"。

9.3 第 7 关封顶设计 [反推]

物品种类到 8 封顶(物品标签仅 A~H,8 种 [代码:ITEM_LABELS]),第 7 关不再加种类,转而加柜到 10、压时间到 60s、K_shuffle 提到 100继续抬难度,同时空柜数升到 2(周转空间增加作为缓冲),是"硬上限处的综合压力测试"。

9.4 难度锚点(目标通过率)

关卡 目标通过率 来源
L1 ≥ 90% [设计案:4.3]
L2 ≥ 80% [设计案:4.3]
L3 ≥ 65% [设计案:4.3]
L4 ≥ 50% [设计案:4.3]
L5 40 ~ 60% [设计案:4.3]
L6 建议 30 ~ 50% [待定](设计案未覆盖,需实测)
L7 建议 15 ~ 35%(满星挑战) [待定](设计案未覆盖,需实测)

L6、L7 通过率为建议值,未经过实测,明确标注待定,不冒充既有设计。


10. 调参方法与验证指标

10.1 调参杠杆 [反推]

想达到 调什么
某关偏难 降 K_shuffle(降分散度)/ 加 T / 减种类 K
某关偏易 加 K_shuffle / 减 T / 加种类 K
时间明显不足 加 T,或降低种类数(缩短凑对路径)
玩家卡同一点 检查该关 K_shuffle 是否过大导致过度分散

10.2 埋点事件 [设计案:8.1]

事件 关键字段 用途
关卡开始 level_id、时间戳 尝试次数
每次移动 level_id、步序号、耗时 决策速度分布
消除触发 level_id、剩余时间 消除节奏
胜利 level_id、剩余时间、总步数 通过率、星级分布
失败 level_id、剩余物品数、已用步数 定位卡点
道具使用 level_id、道具类型、剩余时间 道具使用率、使用时机

10.3 验证指标 [设计案:8.2]

指标 目标 不达标动作
L1 首通率 ≥ 90% 降 K_shuffle / 加 T
L7 通过率 待定(建议 15~35%) 偏离则调 K_shuffle / T
失败时平均剩余物品 ≤ 30% > 30% 说明时间预算不足
平均每步耗时 1.5 ~ 3s > 3s 说明剪影信息不清或布局过绕

11. 附录:配置表结构

11.1 关卡配置 level_config [设计案:7.1 + 代码:LEVELS]

字段 类型 示例(L3)
level_id int 3
cabinet_count int 6
item_types int(种类数) 5
init_time float 100
shuffle_steps int(K_shuffle) 35

11.2 物品配置 item_config [设计案:7.2 + 代码:ITEM_LABELS/ITEM_COLORS]

字段 说明
item_id 物品索引 0~7
label 字母标签 A~H
color 8 色(红/绿/蓝/黄/紫/橙/青/粉)

设计要点:新增/调整一关 = 改 level_config 一行 + 同步 GENERATOR_K 一项,零代码改动——"配置驱动"思想的落地证明。


本文档数值严格以可玩 Demo 7 关实现为基准,每个数字均标注来源;「待实装」「待定」项已明确区分,不冒充已定/已实现状态。