引言:游戏数值的"万有引力"
如果让一位资深游戏数值策划只用一个词概括他每天都在思考的事情,答案大概率是战斗力。无论你做的是 ARPG、回合制、卡牌、SLG 还是 MOBA,最终都要回答同一个问题:这个单位、这套配装、这副卡组——到底有多强?
看似简单的问题,本质却复杂得吓人。它要求把一切表现为可比较的标量:把 HP、攻击、防御、暴击、技能、随机性、时间……这些维度全部"压扁"到一个数轴上。一旦压不平,平衡就会失控;一旦压得太死,玩法就失去了维度。
本文以战斗力 (Combat Power, CP) 模型作为主轴,从最原始的 CP = HP × ATK 开始,一步步引入防御、随机性、技能与时间,再延伸到卡牌经济与 RPG 成长曲线。每一步我们要回答两个问题:
新维度如何嵌入战斗力公式?
(数学)
它如何改变玩家的决策与体验?
(设计)
一、最原始模型:CP = HP × ATK
1.1 为什么是相乘,而不是相加?
设想最简化的对战:双方只有 HP 和 ATK,没有防御、没有暴击、没有技能。每秒互砍一刀,谁先死谁输。
玩家 A:HP_A、ATK_A;玩家 B:HP_B、ATK_B。A 击杀 B 需要回合数:
T_A = \lceil HP_B / ATK_A \rceil
同理 T_B = \lceil HP_A / ATK_B \rceil。A 获胜的条件是 T_A \leq T_B,即:
HP_B / ATK_A \leq HP_A / ATK_B \quad\Longleftrightarrow\quad HP_A \cdot ATK_A \geq HP_B \cdot ATK_B
也就是说,胜负完全由 HP 与 ATK 的乘积决定。这个乘积就是最原始的战斗力:
CP₀ = HP × ATK
它是为什么"乘"而不是"加"的根源——HP 决定能挨多少刀,ATK 决定每刀打多疼,两者在击杀对方所需时间上是相乘关系。这就是数值平衡的"万有引力公式"——你怎么改这个游戏,它都站在背后。
图 1:等战斗力曲线 HP × ATK = const。同一条曲线上的两点战力相同,但
体验完全不同
——这就是职业差异的数学基础。
1.2 等战力曲线:职业差异从此诞生
同一战斗力下 (HP, ATK) 可有无穷多组合:(HP=100, ATK=100)、(HP=200, ATK=50)、(HP=1000, ATK=10) 战力都是 10,000。这就是职业差异的最原始数学源头:
坦克
:高 HP、低 ATK,缓慢但耐打
刺客
:低 HP、高 ATK,瞬秒但脆皮
战士
:HP 与 ATK 平衡,万金油
战斗力相同 ≠ 体验相同。这是数值设计反复出现的母题:同一标量值下的不同分布产生不同的玩法。等战力曲线是设计空间,曲线上的每一点都是一种"选择"。
二、引入防御:EHP 与战斗力的等价变换
2.1 防御的本质是"放大 HP"
当我们引入第三个维度——防御 (DEF)——之后,公式变成:
\text{Damage} = \text{ATK} \times \frac{K}{K + \text{DEF}}(比例公式,《魔兽世界》《暗黑 III》范式)
定义减伤率 r = \text{DEF}/(K+\text{DEF}),则有效血量 EHP = HP / (1-r)。把它代回原始公式:
CP₁ = EHP × ATK = HP × ATK / (1 - r) = HP × ATK × (K + DEF) / K
关键洞察:防御不是新的维度,而是 HP 维度上的乘子。从战斗力的视角看,"加 1 点防御"和"加 X 点 HP"是等价的,只要让 (1+x/HP) = (1+DEF/K)。这个等价关系决定了"换算系数"——也就是装备评分系统的数学起点。
2.2 EHP 的边际递增陷阱
EHP 公式 HP/(1-r) 在 r 接近 1 时急剧爆炸。看一组数:
减伤 r | EHP 倍率 | 每多 10% 减伤的边际收益 |
|---|---|---|
0% | 1.00× | — |
50% | 2.00× | +1.00× |
70% | 3.33× | +1.33× |
80% | 5.00× | +1.67× |
90% | 10.00× | +5.00× |
95% | 20.00× | +10.00× |
这就是为什么"减伤"在游戏后期总会被设硬帽(如 75% 上限)——一旦突破 90%,每多 1% 减伤都相当于翻倍战斗力,平衡瞬间崩溃。战斗力公式的爆炸性,决定了设计师必须在哪里立壁。
2.3 攻防对偶:穿透与破甲
有了 EHP 视角,攻击侧也有对偶概念。"穿透"(penetration)让 ATK 直接绕开一部分 DEF,等价于在战斗力公式里乘一个 (1 + 穿透/(K+DEF-穿透)) 因子。这种"防御乘子"和"穿透乘子"在 CP 公式中是对称的——它揭示了为什么 PVE 里堆穿透、PVP 里堆减伤是经典思路:你在乘法链的同一根管道上互相博弈。
三、引入随机:从期望战斗力到方差战斗力
3.1 期望 CP:把骰子折叠回标量
命中率 P_hit、闪避率 P_dodge、暴击率 P_crit、暴击倍率 k_crit。期望伤害:
E[D] = P_{hit}(1-P_{dodge}) \cdot D_0 \cdot [1 + P_{crit}(k_{crit}-1)]
把它代入战斗力公式(防御方视角同理对称):
CP₂ = EHP × E[D] = HP × ATK × M_def × M_rand
其中 M_{def} = (K+DEF)/K(防御乘子),M_{rand} = P_{hit}(1-P_{dodge})[1 + P_{crit}(k_{crit}-1)]。
这里有一个微妙的事实:所有这些维度都以"乘子"的方式作用在原始 CP₀ = HP × ATK 上。这就是为什么属性堆叠在 RPG 后期会"乘法爆炸"——它们结构上就是相乘的(详见第六节)。
3.2 方差战斗力:被忽视的"体验维度"
期望 CP 只解决了平均问题。但玩家真实感受还包括方差。考虑两个 build:
稳定流
:100% 命中、0% 暴击、ATK=100,每刀打 100
极端流
:50% 命中、100% 暴击、暴击 ×4、ATK=100,每刀期望也是 100,但实际是 0/0/400/0/400 …
期望 CP 完全相同,但方差差了几十倍。在长 BOSS 战里,方差小的更稳;在短 PVP 里,方差大的有偷塔机会。"方差是体验维度,期望是平衡维度"——这是一句被无数顶级策划反复印证的话。
方差的数学表达(暴击维度):
\text{Var}(D) = P_{crit}(1-P_{crit})(k_{crit}-1)^2 \cdot D_0^2
在 P_crit=50% 时方差最大;P_crit→0% 或 →100% 时方差归零。这就是为什么《魔兽世界》《最终幻想》后期会引入"暴击溢出转化"——把超过 100% 的暴击折算为线性伤害提升,本质就是把方差砍下去,避免顶级 build 的"非洲人地狱"体验。
图 2:期望-方差平面让"风险偏好"成为一种 build 选择。等期望线上每一点的
玩起来的感觉
差异巨大。
四、时间维度:DPS、CD 与战斗节奏
4.1 从单刀战力到秒伤战力
真实战斗以"秒"为单位发生。引入攻击间隔 T_{atk},则每秒伤害 DPS = E[D] / T_atk。战斗力升级:
CP₃ = EHP × DPS = HP × ATK × M_def × M_rand / T_atk
注意 1/T_{atk}(攻速)也是一个乘子。所以"加 10% 攻速"与"加 10% 暴击伤害"在战斗力公式里结构等价——这就是为什么不同游戏的属性配比能算得清楚。
4.2 技能与冷却:把战斗力分摊到时间窗
RPG 里普攻只是底色,真正决胜的是技能。一个技能的战斗力贡献:
\text{CP}_{skill} = \frac{E[\text{Skill Damage}]}{\text{CD} + T_{cast}}
把所有技能、普攻按时间分摊后求和,得到持续 DPS。但还有一个被叫做 "爆发窗" 的概念——某些技能(如《魔兽世界》武器战的"狂乱")在短时间内极度提升 DPS。爆发战力 ≠ 持续战力,这两者必须分别评估,否则你会得到"DPS 测试木桩第一、副本里垃圾"的尴尬职业。
4.3 战斗节奏的 TTK 校准
把所有战斗力公式倒过来用,可以求击杀时间 TTK = HP_target / DPS_self。设计师真正调的不是 DPS,而是 TTK:
FPS 里期望 TTK ≈ 0.3–1 秒(《Apex》《CSGO》)
MOBA 里期望 TTK ≈ 3–8 秒(《英雄联盟》对线期)
MMORPG 里期望 TTK ≈ 30 秒–10 分钟(团本 BOSS)
TTK 是体验目标,CP 是实现手段。"先定 TTK 再倒推 CP"是顶级数值策划的标准流程。这一点比公式本身更值钱。
五、卡牌对战:把战斗力切片成"费用"
5.1 vanilla test:暴雪的 CP 定价
卡牌游戏没有"等级",但仍然有战斗力——只是被切成了一片片费用 (Cost)。《炉石传说》里随从的白板基线:
V = \text{ATK} + \text{HP} \approx 2 \cdot \text{Cost} + 1
注意它用了 ATK + HP 而不是 ATK × HP——这是为什么?因为卡牌存在的时间本身就充满不确定(被解 / 拍下即死),不能假设它能持续战斗。"加法基线"是一种悲观估计:玩家拍下后只打 1 刀就死,CP 退化为 ATK;玩家持续 N 回合打,CP 退化为 N·ATK。两端取折中,加法是一种线性近似。
但是!"嘲讽"(Taunt)随从能强制吸引攻击,把存活轮数拉长,于是它的等效 CP 重新趋向乘法 ATK × HP。这就是为什么炉石内部把"嘲讽"的特效价值评估为 ≈ +0.5 点统计——这是从乘法→加法的折扣率。
5.2 卡组 CP:超几何分布下的期望
单卡 CP 之上是卡组 CP。每张卡按抽到概率加权:
\text{CP}_{deck} = \sum_i p_i \cdot \text{CP}_i \cdot w_i(t)
其中 p_i 是抽到第 i 张牌的概率(受卡组深度、抽卡数、过牌效果影响),w_i(t) 是该卡在时间 t 时的"曲线适配权重"——3 费的牌在第 3 回合才发挥最大价值。
这就解释了 CCG 的两大永恒话题:
"过牌"为什么贵
:过牌提升 p_i,相当于把卡组 CP 平方放大
"曲线"为什么重要
:w_i(t) 与回合曲线匹配,CP 才能在正确的时间释放
5.3 卡牌的"战斗力守恒"违反
真正强力的卡牌往往打破 vanilla 基线。《炉石》的"奥术导弹"3 费、3 点随机伤害——按基线只值 3 点统计。但它的方差是巨大的(可以打脸、可以分散)——这是用方差换 CP 折价。卡牌设计的高级技巧就是在公式漏洞处下注。
六、RPG 成长:CP 曲线的指数膨胀
6.1 多属性乘法堆叠
把战斗力完整公式展开:
\text{CP} = HP \cdot ATK \cdot \frac{K+DEF}{K} \cdot \frac{1}{T_{atk}} \cdot M_{rand}
每一项都是独立"乘子"。如果每升一级各属性都涨 5%,n 级后总 CP:
\text{CP}(n) = \text{CP}(0) \cdot 1.05^{5n} \approx \text{CP}(0) \cdot e^{0.244 n}
(指数 0.244 来自 5 个独立 5% 乘子的对数和)。60 级时 CP 是 1 级的 ≈ 2,200,000 倍。这就是RPG 后期数值爆炸的根因——并不是策划"算错了",而是结构上每个属性都在乘。
6.2 软帽:用渐近线驯服指数
解决方案是给每个乘子套软帽:
M_i(x) = 1 + (M_{cap} - 1) \cdot (1 - e^{-x/x_{ref}})
软帽的几何意义:起始线性,逐渐渐近至 M_cap,永不超越。它把"乘法堆叠"转化成"乘法极限",在数值上把指数膨胀压回多项式量级。
图 3:无软帽时 CP 曲线指数发散;带软帽时 CP 缓慢趋近 cap,体验保持线性可读。
6.3 怪物 CP 同步膨胀:诅咒等阶
另一种思路(《暗黑破坏神 III》的 Difficulty Tier,《原神》的世界等级)是让怪物 CP 同步指数膨胀。设玩家 CP 增长率 g_p,怪物 CP 增长率 g_m,相对体验由 g_p - g_m 决定。让 g_m ≈ g_p,体验就维持稳态。这是"以指数对冲指数"——治标不治本,但在已经数值膨胀的项目里几乎是唯一可行的修补。
6.4 经验曲线的反向设计
经验值曲线 EXP(L) 看似是"升级要打多少经验",但它的真正职责是把战斗力增长摊平到时间。如果 CP 是指数的、击杀同级怪获得的经验占下一级所需的固定比例 α,则升一级所需时间:
T(L) \propto EXP(L) / \text{kill rate} \cdot 1/\alpha
设计师想要的是 T(L) 曲线(前期短、后期长但有限),由此倒推 EXP(L) 公式。所以经验曲线本质是战斗力增速的时间积分——又一次"从体验目标反推数值"的标准案例。
七、战斗力的工程化评估
把上面这些公式落到工程实践,主要有三种方法:
7.1 解析法:白盒推导
用一组闭式公式直接算 CP,例如《炉石》早期内部用的就是 vanilla test + 特效折算的加法基线。优点是快、可批量;缺点是只对"线性可加"的特效准确,遇到联动效应(combo / synergy)就失真。
7.2 蒙特卡洛:模拟对战
对每对单位 (A, B) 跑 10,000 局对打,得到胜率矩阵 W[i][j]。然后用主特征向量(PageRank 思路)把胜率矩阵压成单一战力分数。这是 MOBA / SLG 平衡的标配。
7.3 玩家数据回归:黑盒拟合
上线后从天梯数据里反求 CP——胜率高的 build/卡组 CP 自然高。这种"用市场代替策划"的方法在大型在线游戏几乎是唯一可靠手段。《炉石》《英雄联盟》《王者荣耀》的 patch note 调整,本质都基于这种回归。
7.4 三种方法的耦合
实战中三者循环:解析法做初版定价(上线前几乎没数据) → 蒙特卡洛做预上线 QA(覆盖解析盲区) → 玩家数据做持续校准(每个赛季 hotfix)。整个数值系统就是一个负反馈控制器,CP 只是它的状态变量。
八、战斗力陷阱:四种典型的"虚假平衡"
8.1 等期望但不等方差
两个英雄期望 CP 一致,但一个稳一个脸——天梯上"脸黑流"会被骂得更惨,即使数学上完全公平。修复:把方差作为独立平衡维度,必要时用伪随机(pseudo-RNG)把暴击触发拉平。
8.2 静态 CP 高,动态 CP 低
属性面板写着 100,000 战力,但没有位移、没有打断、没有控制——遇到机动 boss 完全打不出来。这是"战力 ≠ 战斗效率":CP 公式假设双方能稳定输入,现实却充满交互性损耗。修复:引入"有效输出占比" e ∈ [0,1],把它作为新的乘子。
8.3 个体 CP 高,团队 CP 低
5 个超高 CP 的纯输出英雄打不过 1 坦 1 奶 3 输出的均衡阵容——因为团队 CP 不是个体 CP 的加和,而是受木桶短板控制的非线性聚合。修复:用 min(role_cp) 而不是 sum(cp) 作为团队 CP 估计。
8.4 短期 CP 高,长期 CP 低
爆发流前 10 秒 CP 极高,爆发期一过完全瘫痪。如果 boss 战是 10 分钟,平均 CP 反而被持续流碾压。修复:分别计算"爆发 CP"与"持续 CP",按战斗时长加权。
九、跨循环战斗力:四个时间尺度的耦合
本文最后回到一个工程现实:战斗力不是一个尺度,而是四层嵌套的尺度,每层都有自己的 CP 守恒律:
尺度 | 典型时长 | CP 表现 | 主导因素 |
|---|---|---|---|
单击 / 单技能 | 1 秒以内 | 瞬时伤害方差 | 暴击 / 命中 |
单次战斗 | 10 秒–10 分钟 | EHP × DPS | 属性 + 技能循环 |
单局对战 / 单本副本 | 10–60 分钟 | 资源曲线 + 阶段适配 | 装备 / 卡组构筑 |
整体成长 | 数十–数百小时 | CP 增长曲线 + 软帽 | 等级 / 大世界 / 赛季 |
每一层都需要单独的战斗力模型,且上一层是下一层的输入分布。这种嵌套耦合是数值设计真正的难点——单层模型容易,跨层平衡难。一款上线 5 年还能持续运营的游戏,背后一定有一套完整的、跨层的战斗力管理体系。
结语:战斗力是数值设计的"标量化语言"
从最原始的 CP = HP × ATK,到引入防御 (EHP)、引入随机 (期望与方差)、引入时间 (DPS, TTK)、再到卡牌的费用切片与 RPG 的乘法堆叠——战斗力公式像一棵不断生长的树,每一根枝丫对应一种新的玩法维度。
但所有这些复杂度,最终都要被压回一个标量:让玩家、设计师、QA、运营都能用同一个数轴去判断"这个东西到底强不强"。战斗力是数值设计的母语,是把多维体验翻译成一维标量的"语义压缩算法"。压缩永远有损——所以需要方差维度、有效输出占比、爆发/持续分别评估、跨循环的嵌套校准。压缩也永远必要——没有它就没有平衡,没有平衡就没有可玩性。
下一次你打开任何一款游戏的属性面板,看到那个被称作"战力"或"战斗力"的总数字,记得:它背后藏着一棵从 HP × ATK 出发、长成参天巨木的数学结构。设计师和玩家在这棵树下博弈,谁理解得更深,谁就赢。