【问题标题】:C# Trying to figure out how to incorporate negative values into my codeC# 试图弄清楚如何将负值合并到我的代码中
【发布时间】: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)。
  • 请尽量将您的问题简化为具体问题。大多数人不会想阅读与手头问题无关的游戏的完整描述,而只是忽略它。
  • 与代码相同。很多代码只是控制台输出,与问题无关。

标签: c#


【解决方案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);

【讨论】:

    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 2015-01-19
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    相关资源
    最近更新 更多