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

Posted

技术标签:

【中文标题】C# 试图弄清楚如何将负值合并到我的代码中【英文标题】:C# Trying to figure out how to incorporate negative values into my code 【发布时间】:2019-02-22 05:31:55 【问题描述】:

我目前正在为一项任务编写一个小型主机游戏。有两个战士,他们使用的属性会影响他们的战斗。这是一个游戏的例子:

勇士:

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

第一轮:

赫克托攻击安格利夫并命中。 Hector 造成 5 点伤害减去 Angrif 的 2 点护甲。 Angrif 剩余 7 个生命值。 Angrif 攻击 Hector,但未命中。

第 2 轮:

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

第三轮:

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

第 4 轮:

Hector 攻击 Angrif 并命中。 Hector 造成 6 点伤害减去 Angrif 的 2 点护甲。 Angrif 被杀死。

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

现在,我的导师给出的警告之一是

“确保你的伤害不能是负值 增加被击中的战士的生命值。”

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

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.");
    

【问题讨论】:

Math.Max 可能会有所帮助(您传递 2 个数字,它会给您这个最大的数字。如果您传递 0 和 -5,您将得到 0)。 请尽量将您的问题简化为具体问题。大多数人不会想阅读与手头问题无关的游戏的完整描述,而只是忽略它。 与代码相同。很多代码只是控制台输出,与问题无关。 【参考方案1】:

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

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

如果warriorOne.Armor 大于currentDamage,结果将是 WarriorsOne 被治愈。这就是@John 对Math.Max 的暗示。

必须通过以下方式将计算出的伤害限制在最低为零

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

【讨论】:

以上是关于C# 试图弄清楚如何将负值合并到我的代码中的主要内容,如果未能解决你的问题,请参考以下文章

向指标添加示例

试图弄清楚如何将总分恢复到主要打印出来。它正在显示但未存储在变量中

我需要弄清楚如何将我的类库中的枚举绑定到我的应用程序中的单选按钮

如何调试到 AutoMapper 代码?

试图弄清楚如何从 jquery datepicker 中删除假期

如何将 $stmt 合并到我的搜索中?