Overkill判定
关于游戏中Overkill判定的问题
关于游戏中 Overkill 判定的问题
数据与显示不同步
在计算时,hit 伤害优先于 overkill 判定。这意味着,如果该 hit 完成后,敌人没有血了,则该 hit 就算作是 overkill 的。
在显示时,overkill 判定优先于 hit 伤害。这表现为,当敌人已经没有血之后,再继续 hit 才会弹出 overkill 字样。
伤害重复累加计算的问题
根据逻辑来说,overkill 的判定应该是这样:该hit伤害值 ≧ 目标的hp,
但是实际代码中,判定逻辑是这样的:本回合该目标已受到的伤害值 + 该hit伤害值 ≧ 目标的hp。
所以实际上的表现是:在本轮回合内(即攻击的连续3张或4张指令卡),如果目标丢失的血量比尚存的血量要高,则 hit 判定为 overkill。
实测数据:
执行步骤 | 累计伤害 | hit伤害 | hit前的hp | 该hit判定结果 |
---|---|---|---|---|
Card1 | ||||
hit1: | 累计伤害0 | 本hit伤害484 | 当前hp1372 | |
Card2 | ||||
hit1: | 累计伤害484 | 本hit伤害174 | 当前hp888 | |
Card3 | ||||
hit1: | 累计伤害658 | 本hit伤害164 | 当前hp714 | overkill |
hit2: | 累计伤害822 | 本hit伤害335 | 当前hp714 | overkill |
回合结束 | 累计伤害1157 | 当前hp215 |
相关代码示意
// 一个目标的血量数据
ServantData {
int reducehp; // 该次操作会减少hp
int hp; // 目标的当前 hp}// 遍历3张指令卡、EX卡
for(card in cardList)
{ // 遍历该卡的每个 hit
for(hit in card.hits)
{ // 伤害累积
target.reducehp += hit.damage; // overkill 判定
bool isOverkill = target.hp - target.reducehp <= 0;
} // 扣除血量
target.hp = target.hp - card.damage;
}