
最终伤害计算需按“闪避优先→暴击判断→暴伤倍增”的顺序,通过属性冲突优先级和乘法加权,并利用缓存与预计算优化性能。
游戏伤害计算的核心是属性冲突优先级+乘法加权,各属性作用及数学关系如下:
1 - 目标闪避率(类比:投中篮筐的概率,若对方跳起躲球则投中无效)。1 - 角色命中率(类比:对方跳起躲球的概率,若角色投中则躲球无效)。角色暴击率 * (1 - 目标暴击抗性)(类比:投中篮筐后加时三分的概率,需先投中篮筐)。1 + 暴伤百分比(类比:三分球投中后加10分的倍数,暴击后伤害乘以该倍数)。计算逻辑:先判断闪避(若闪避则伤害为0),再判断暴击(若暴击则伤害乘以暴伤),否则按基础伤害计算。
| 属性 | 定义 | 计算逻辑 | 冲突处理 | 适用场景 |
|---|---|---|---|---|
| 命中 | 角色攻击命中目标的概率 | 1 - 目标闪避率 | 闪避优先(若闪避则命中无效) | 防止攻击被躲 |
| 闪避 | 目标躲过攻击的概率 | 1 - 角色命中率 | 命中优先(若命中则闪避无效) | 目标躲避能力 |
| 暴击 | 角色触发额外伤害的概率 | 角色暴击率 * (1 - 目标暴击抗性) | 无直接冲突(命中后判断) | 提升伤害上限 |
| 暴伤 | 暴击时伤害倍数 | 1 + 暴伤百分比 | 乘法关系(暴击后乘以倍数) | 提升暴击伤害 |
伪代码(Python风格,含缓存逻辑):
import random
def calculate_damage(base_damage, role_attr, target_attr):
# 角色属性:hit_rate(命中率), dodge_rate(闪避率), crit_rate(暴击率), crit_dmg(暴伤)
# 目标属性:dodge_rate(闪避率), crit_resist(暴击抗性)
hit_rate = role_attr['hit_rate']
dodge_rate = target_attr['dodge_rate']
crit_rate = role_attr['crit_rate']
crit_dmg = role_attr['crit_dmg']
# 1. 判断是否闪避(目标闪避)
if random.random() > dodge_rate: # 随机数 > 目标闪避率,则命中
# 2. 判断是否暴击(角色暴击)
if random.random() > (1 - crit_rate): # 随机数 > (1-暴击率),则暴击
final_damage = base_damage * crit_dmg
else:
final_damage = base_damage
else:
final_damage = 0 # 闪避成功,伤害为0
return final_damage
性能优化说明:命中/闪避的概率计算结果可缓存(如 1 - 闪避率),属性提升后(如角色闪避率提升),缓存结果失效需重新计算,避免重复计算。
“面试官您好,游戏技能伤害计算的核心是通过命中、闪避、暴击、暴伤等属性,按顺序处理冲突并加权。具体来说,先判断目标是否闪避(若闪避则伤害为0),再判断角色是否暴击(暴击则伤害乘以暴伤),否则按基础伤害。性能优化上,缓存命中/闪避的概率结果,避免重复计算随机数,暴击率等属性可预计算。举个例子,角色基础伤害100,命中率80%,目标闪避率30%,暴击率20%,暴伤150%。计算时,先算目标闪避概率30%,随机数小于70%则命中,再算暴击概率20%,随机数小于80%则暴击,最终伤害100*1.5=150。”