我目前正在为任务编写小型控制台游戏。有两个战士,他们拥有影响战斗的属性。这是一个游戏示例:
战士:
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.");
}
}
答案 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);