附录 C:全书公式、参数与数据集索引
《SLG 游戏产品设计》卷二附录 C:把第 1–15 章的核心公式、config 参数与 out 数据集做成可检索索引——公式名、所在节、形式与整数约束,参数名、所在配置文件、键路径、取值与单位,产物路径、产出脚本与对应节,并附一个直接解析本页、断言表里每条路径都真实存在的 S 层校验脚本。
tag
《SLG 游戏产品设计》卷二附录 C:把第 1–15 章的核心公式、config 参数与 out 数据集做成可检索索引——公式名、所在节、形式与整数约束,参数名、所在配置文件、键路径、取值与单位,产物路径、产出脚本与对应节,并附一个直接解析本页、断言表里每条路径都真实存在的 S 层校验脚本。
8.2 让赛季起点收敛了,但赛季内新玩家怎么追?本节跑一个赛季 60 天:老玩家带 2 倍永久领先,新玩家拿 150% 追赶产出、前 72 小时有护盾。结果差距收窄 83% 却填不平,追赶窗口一关只剩固定日产出在慢慢磨,护盾值约 5% 的赛季末指数。
把玩家进度拆成资源、城建、英雄、科技、荣誉五个维度,每季各自成长、赛季边界按 season.json 的重置/继承/压缩处理,跑 10 个赛季看综合指数能否收敛。四种方案对照:无重置发散到 411 万、全额清零塌到 2 万、赛季默认档收敛进健康带、激进压缩偏低。
把「赛季越打越膨胀」从口头抱怨变成可核算的量:无重置、无压缩时,老玩家进度指数跨赛季复利膨胀,跑 10 个赛季量化绝对差距、相对倍数与追赶天数,再用 B 层闭式解与「纯复利」简化模型对照,量出把膨胀当纯复利估会低估多少、代价信号何时亮红灯。
把评分和段位都用上,最后量一件事:按匹配分把玩家配到一起,对局公不公平。扫描 50 到 800 分的配对窗口,band50 平均实力差 66.8、公平率 92.4%,random 对照公平率仅 44.1%;再用 30 个种子的 B 基准证明强者胜率标准差仅 0.77 个百分点。
匹配分是给系统看的,段位是给玩家看的。用百分位把 2000 名玩家切成青铜到钻石五段,实测占比 20/24.85/25.15/20/10 贴合目标,段位边界落在 666/1045/1179/1293/1437 分,并量化「评分分段」与「真实实力分段」29.65% 的错位率。
匹配分是「跟谁打」的度量。用 ELO 与 Glicko 两种模型对同一批 2000 名玩家跑 100 局,看评分离真实实力的 RMSE 从 167 收敛到 55.7(ELO)与 47.8(Glicko),并解释为什么 Glicko 多带一个「不确定度」反而收敛更低。
礼包值不值,不能靠「感觉超值」。本节用 config/pricing.json 里的价值锚点(1 玉璧换 100 资源、60 加速)把每个礼包的内容折算成玉璧等价价值,算出性价比千分比(1000‰ = 与直购玉璧 1:1),再用 S 层脚本跑出一张可排序的性价比表,并给出 d30 / d50 折扣后排序如何翻转。
用 mulberry32 确定性 PRNG 模拟 5 万名玩家「抽到首个 SSR 需要多少抽」,把软保底与硬保底一起跑进分布,得到均值、中位数与 p90/p99,再折算成玉璧与人民币期望成本。用 B 层脚本把模拟均值与闭式期望做对照,用 P 层测试证明 TS 侧与 Python 侧逐位一致。
把《王朝纪元》的抽卡拆成一张可公示的概率表:稀有度分档、单卡概率、限时池与常驻池的差异,以及保底参数如何在池之间继承。用一段 S 层脚本从 config/n06_gacha.json 重算公示概率并校验三档之和恰为 1000‰,再用一段 P 层原型在 TypeScript 侧复刻同一份 mulberry32,验证公示表与随机序列跨语言逐位一致。
把出货抽数当成随机变量:几何分布的解析期望 33.33 抽、方差 1077.78 与仿真的 33.25 / 1071.86 对照。再按体验区间目标判定纯基础与保底两种设计,并用 30 个种子的蒙特卡洛均值偏差做 B 基准,证明仿真无系统性偏。
纯随机没有记忆,长尾会把少数玩家拖到 150 抽以上。用确定性 PRNG 跑 20000 名玩家对比纯基础与软/硬保底:均值从 33.25 抽降到 24.54,p90 从 76 抽压到 44 抽,硬保底命中人数从 3292 人降到 0 人。
掉落表是一张权重表:千分权重让每一项的数字直接就是千分概率。用确定性 PRNG 跑 60000 次抽条对照理论分布,传说项实测 0.4933% 对理论 0.5%,并用 TypeScript 原型验证 Python 与 TS 两侧逐位一致,权重表即唯一真源。
账面组合强度能不能代表真实强弱?本节把六个阵容放进多栈循环赛,用 4.1 的克制矩阵跑模拟,再用 Spearman 排序一致性做 B 基准:解析分与模拟分的一致性只有 -9%,说明加权战力分排不出强弱。另一半基准是平衡迭代——对最强阵容削弱、对最弱增强,胜率极差从 49% 收敛到 15%。
单兵种克制解决不了「几个兵种怎么搭」。本节把阵容加成写成条件规则:三军齐备、单一兵种、骑兵主力、均衡编队,命中即叠加;再用 TypeScript 原型把「命中加成 → 攻击分/防御分 → 组合强度」算成整数,用 node --test 断言三军齐备拿到 5187 分、枪兵方阵拿到 2878 分。
150% 的单一克制环在骑兵/弓兵这一对直接饱和到 100%/0%,另两对也偏到 86/14、88/15。本节把《王朝纪元》的兵种三角写成 3x3 整数百分比矩阵,用 S 层脚本对每个有序对跑带抖动的确定性战斗,得出胜率矩阵,并校验克制对、被克对与镜像对是否都落在目标带内。
把 3.1 的确定伤害与 3.2 的分布装进回合循环:每回合双方按「存活数 × 单位伤害」同时结算,谁的血量池先见底谁输。复用 core.ts 的 resolveBattle 跑枪兵 300 对骑兵 300,3 回合收敛;再给回放日志算 FNV-1a 指纹,Python 与 TypeScript 哈希同为 0x71e54817。
命中与暴击让伤害从确定值变成分布:85% 命中、25% 暴击、180% 暴击倍率,解析期望恰为 204。用自实现确定性 PRNG(mulberry32,Python 与 TypeScript 同算法同种子)跑 20 万次,实测均值 203.961、偏差仅 0.01%,并说明暴击真正的代价是方差而不是均值。
把 SLG 的伤害从「按比例扣血」还原成一行可判定的整数公式:攻击乘倍率、减去防御、再取保底。用配置驱动的《王朝纪元》护甲扫描(5 档攻击 × 6 档防御 × 3 档地形)复现线性减法模型,演示低攻高防撞上 1 点伤害地板、以及减伤上限为什么必要。
2.2 是从参数推结果,本节反过来:先写下想要的目标体验(累计成本锚点、第几天到几级),再用最小二乘反推曲线参数。我们用 numpy 手写最小二乘比较指数与幂律两个模型,跑出拟合优度与锚点残差,最后反推出达标所需的成本增长率。整个过程只需一份整数配置,全程可复现。