如何避免:负面伤害正在治愈敌人?

时间:2016-05-23 19:21:57

标签: c#

我是c#的新手,想要编写一个简单的模拟,其中两个怪物将在控制台中互相争斗。

我有一个我无法弄清楚的问题,如何避免它。 问题是,如果AttackPower低于DefensivePower,则该值将为负值并开始治疗敌人,因为负面&消极=积极。

do
{
    if (currentFighter == 0)
    {
        s_monsters[1].m_Health -= 
            s_monsters[0].m_AttackPower - s_monsters[1].m_DefensivePower;
    }
    else
    {
        s_monsters[0].m_Health -= 
            s_monsters[1].m_AttackPower - s_monsters[0].m_DefensivePower;
    }
}

2 个答案:

答案 0 :(得分:6)

您可以使用Math.Max(返回两个数字中的较高者),例如:

s_monsters[1].m_Health -= Math.Max(s_monsters[0].m_AttackPower - s_monsters[1].m_DefensivePower, 0);

在这种情况下,如果攻击强度小于防御力,则攻击无效。

答案 1 :(得分:1)

最简单的解决方案是将s_monsters[1].m_AttackPower - s_monsters[0].m_DefensivePower分配给自己的变量并运行检查以检测它是否小于零,如果语句返回true,则将变量设置为0。 p>

然后您可以在s_monsters[1].m_AttackPower - s_monsters[0].m_DefensivePower现在注入新变量,并且您的问题应该不复存在。

do
{
 double attackDamage;
 if (currentFighter == 0)
 {
    attackDamage = s_monsters[0].m_AttackPower - s_monsters[1].m_DefensivePower
    s_monsters[1].m_Health -= ((attackDamage < 0) ? 0 : attackDamage);
 }
 else
 {
    attackDamage = s_monsters[1].m_AttackPower - s_monsters[0].m_DefensivePower
    s_monsters[0].m_Health -= ((attackDamage < 0) ? 0 : attackDamage);
 }
}

虽然我绝对建议使用Mike C.的内联方法来解决可读性,文件大小和范围污染问题。