2016-05-23 54 views
-2

我是c#的新手,想要编写一个简单的模拟程序,其中两个怪物将在控制台中相互对战。如何避免:负面伤害正在治愈敌人?

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

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; 
    } 
} 
+0

添加一条if语句,如果该语句的值小于0,则将该值设置为0. – Jhecht

+0

那么您想要做什么?请明确点。让我们看看一些例子以及迄今为止您尝试过的方法。 –

回答

6

你可以使用Math.Max(返回高两个数字),如:

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

在这种情况下,如果攻击力小于防御力,攻击将不起作用。

+0

不错,也是内联。我挖掘它比我要发布的解决方案更多。 – Jhecht

1

最简单的解决办法是分配s_monsters[1].m_AttackPower - s_monsters[0].m_DefensivePower其自身的变量和运行检查,以检测它是否小于零,如果语句返回true,该变量设置为0。

你然后可以注入新变量,其中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.的内联方法来提高可读性,文件大小和范围污染的关注度。