C#试图找出如何将负值合并到我的代码中

C#试图找出如何将负值合并到我的代码中,c#,C#,我目前正在编写一个小游戏机的任务。有两个战士,他们有影响战斗的属性。下面是一个游戏示例: 勇士: Angrif——力量12,敏捷12,生命值10,护甲2 赫克托-力量10,敏捷18,生命值12,护甲1 第一轮: 赫克托攻击愤怒者并击中他们。赫克托造成5点伤害减去安格里夫2点护甲。Angrif还有7点生命值。 安格里夫袭击了赫克托,但没有击中 第二轮: 安格里夫攻击赫克托并击中他。安格里夫造成2点伤害减去赫克托尔斯的1点护甲。赫克托还有11点生命值。 赫克托攻击安格里夫并击中他。赫克托完成了6点d

我目前正在编写一个小游戏机的任务。有两个战士,他们有影响战斗的属性。下面是一个游戏示例:

勇士:

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

第一轮:

赫克托攻击愤怒者并击中他们。赫克托造成5点伤害减去安格里夫2点护甲。Angrif还有7点生命值。 安格里夫袭击了赫克托,但没有击中

第二轮:

安格里夫攻击赫克托并击中他。安格里夫造成2点伤害减去赫克托尔斯的1点护甲。赫克托还有11点生命值。 赫克托攻击安格里夫并击中他。赫克托完成了6点damange减去Angrif 2点护甲。Angrif还有3点生命值

第三轮:

赫克托攻击安格里夫并击中他。赫克托造成3点伤害减去安格里夫2点护甲。Angrif还有2点生命值。 安格里夫攻击赫克托并击中他。安格里夫造成5点伤害减去赫克托1点护甲。赫克托还有7点生命值

第四轮:

赫克托攻击安格里夫并击中他。赫克托造成6点伤害减去安格里夫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.");
    }
}

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

warriorOne.HitPoints = warriorOne.HitPoints - (currentDamage - warriorOne.Armor);
如果
warriorOne.Armor
大于
currentDamage
,结果将是warriorOne被治愈。这就是@John对
Math.Max的提示

通过执行以下操作,计算出的损坏必须至少为零

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

Math.Max
可能会有帮助(你传递2个数字,它会给你这个最大值。如果你传递0和-5,你会得到0)。请尝试将你的问题缩短到具体问题。大多数人都不想阅读一个与手边问题不相关的游戏的完整描述,而只是将其忽略。代码也是如此。大部分代码只是控制台输出,与问题无关。