C#试图弄清楚如何将负值合并到我的代码中

时间:2019-02-22 05:31:55

标签: c#

我目前正在为任务编写小型控制台游戏。有两个战士,他们拥有影响战斗的属性。这是一个游戏示例:

战士:

Angrif-力量12,敏捷12,生命值10,护甲2
赫克托-力量10,敏捷18,生命值12,护甲1

第一轮:

赫克托攻击安格里夫并击中敌人。赫克托(Hector)造成5点伤害,减去安里夫(Angrif)的2点护甲。 Angrif还剩下7个HitPoints。 安格里夫袭击赫克托并错过了。

第二轮:

Angrif攻击赫克托并命中。 Angrif造成2点伤害,减去Hectors的1点护甲。赫克托剩余11点生命值。 赫克托攻击安格里夫并击中。赫克托(Hector)的伤害为6点,而安格里夫(Angrif)的护甲为2点。 Angrif还剩下3个生命点。

第三轮:

赫克托攻击安格里夫并击中。赫克托(Hector)造成3点伤害,减去安里夫(Angrif)的2点护甲。 Angrif还剩下2点生命值。 Angrif攻击赫克托并命中。 Angrif造成5点伤害,减去Hector的1点护甲。赫克托(Hector)剩下7点生命值。

第4回合:

赫克托攻击安格里夫并击中。赫克托(Hector)造成6点伤害,减去安里夫(Angrif)的2点护甲。安格里夫被杀了。

战斗结束了,赫克托尔击败了安格里夫。

现在,入侵者发出的警告之一是

  

”请确保您的损失不会是实际的负值   增加被击中的战士的生命值。”

我很困惑,当我尝试将其合并到我的代码中时,我的想法只是一片空白。我得到了规则(或无穷循环)的概念,但是我不知道如何在代码中使用它。我将附上我的战斗方法摘要。在代码中,要看的主要两件事是第一行和第三行,因为这是发生减法的地方。如果你们需要更多我的代码,我会提供。

if (warriorOne.HitPoints > (currentDamage - warriorOne.Armor))
{
   warriorOne.HitPoints = warriorOne.HitPoints - 
       (currentDamage - warriorOne.Armor);

   if (currentDamage == 1 & warriorOne.Armor == 1)
   {
       Console.WriteLine(warriorTwo.Name + " does 1 point of damage minus " + 
           warriorOne.Name + "'s 1 point of Armor. " + 
           warriorOne.Name + " has " + warriorOne.HitPoints + 
           " HitPoints remaining.");
   }
   else if (currentDamage == 1)
   {
       Console.WriteLine(warriorTwo.Name + " does 1 point of damage minus " + 
           warriorOne.Name + "'s " + warriorOne.Armor + " points of Armor. " + 
           warriorOne.Name + " has " + warriorOne.HitPoints + 
           " HitPoints remaining.");
   }
   else if (warriorOne.Armor == 1)
   {
        Console.WriteLine(warriorTwo.Name + " does " + currentDamage + 
            " points of damage minus " + warriorOne.Name + 
            "'s 1 point of Armor. " + warriorOne.Name + " has " + 
            warriorOne.HitPoints + " HitPoints remaining.");
   }
   else
   {
        Console.WriteLine(warriorTwo.Name + " does " + currentDamage + 
            " points of damage minus " + warriorOne.Name + "'s " + 
            warriorOne.Armor + " points of Armor. " + 
            warriorOne.Name + " has " + warriorOne.HitPoints + 
            " HitPoints remaining.");
    }
}

1 个答案:

答案 0 :(得分:0)

此提示指向的问题在于以下代码行

warriorOne.HitPoints = warriorOne.HitPoints - (currentDamage - warriorOne.Armor);

warriorOne.Armor大于currentDamage的情况下,结果是warriorOne被治愈了。这就是@John的Math.Max提示出现的地方。

计算得出的损害必须限制为最小为零

warriorOne.HitPoints = warriorOne.HitPoints - Math.Max(0, currentDamage - warriorOne.Armor);