C#试图找出如何将负值合并到我的代码中
我目前正在编写一个小游戏机的任务。有两个战士,他们有影响战斗的属性。下面是一个游戏示例: 勇士: Angrif——力量12,敏捷12,生命值10,护甲2C#试图找出如何将负值合并到我的代码中,c#,C#,我目前正在编写一个小游戏机的任务。有两个战士,他们有影响战斗的属性。下面是一个游戏示例: 勇士: Angrif——力量12,敏捷12,生命值10,护甲2 赫克托-力量10,敏捷18,生命值12,护甲1 第一轮: 赫克托攻击愤怒者并击中他们。赫克托造成5点伤害减去安格里夫2点护甲。Angrif还有7点生命值。 安格里夫袭击了赫克托,但没有击中 第二轮: 安格里夫攻击赫克托并击中他。安格里夫造成2点伤害减去赫克托尔斯的1点护甲。赫克托还有11点生命值。 赫克托攻击安格里夫并击中他。赫克托完成了6点d
赫克托-力量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)。请尝试将你的问题缩短到具体问题。大多数人都不想阅读一个与手边问题不相关的游戏的完整描述,而只是将其忽略。代码也是如此。大部分代码只是控制台输出,与问题无关。