我是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;
}
}
答案 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.的内联方法来解决可读性,文件大小和范围污染问题。