这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
7.2 分段与段位设计
匹配分是给系统看的,段位是给玩家看的。用百分位把 2000 名玩家切成青铜到钻石五段,实测占比 20/24.85/25.15/20/10 贴合目标,段位边界落在 666/1045/1179/1293/1437 分,并量化「评分分段」与「真实实力分段」29.65% 的错位率。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
匹配分是给系统看的,段位是给玩家看的。用百分位把 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 手写最小二乘比较指数与幂律两个模型,跑出拟合优度与锚点残差,最后反推出达标所需的成本增长率。整个过程只需一份整数配置,全程可复现。
2.1 讲的是「升级变强多少」,本节讲「升级要花多少」。升级成本按整数比复利增长,与每小时有效产出一比,就得到真正的门槛:攒够一级要几小时、满级要几天。我们复用 bastion_core 与伐木场口径逐级对账,并做一组成本增长率的敏感性扫描,看门槛怎么从 8 天翻到 105 天。
成长曲线只有四种基本家族:线性、指数、对数(饱和型)与分段。本节把四族放进同一份整数配置,在 1–30 级上逐级求值,用「末首倍率、加速比、中点占比」三个标量给曲线做体检,并跑出一张四族对比 SVG。指数与分段末值几乎相同,形状却完全相反——这正是选型的关键。
验收在 Python 侧跑完了,交付前还差最后一步:亲手证明同一份配置在 S 与 P 两侧算出同一串数。本篇给出一段配置驱动的原型回放,把结算、战斗、赛季推进串成一条确定性转录,用 node --test 钉成断言,再在原型层复核跨章不变量,最后收束整部设计案的交付。
装配只保证了产物齐全,验收才回答「数对不对」。本篇把前面各章留下的产物汇总进一次全链路验收,逐项断言关键不变量:经济守恒、战力排序、概率归一、匹配收敛、赛季压缩在带内、实验第一类错误率覆盖。检查分声明式与派生两类,覆盖 S 仿真、P 原型、B 基准三层,再补一层余量基准看结论过得稳不稳。
前 15 章各产出一批 config、sim、proto 与 out 产物,收尾这一章要做的不是再写一套结论,而是把它们装配成一份可交付的设计案。本篇给出一份装配清单,把两卷 30 章的代表性交付物登记成可追溯索引,跑一个脚本逐条核对「配置源 + 产物」是否真的在磁盘上,并报告覆盖度。