尝试修复循环

时间:2013-02-22 18:39:50

标签: c# loops while-loop project

我一直在为我的高级RAP项目开发一款游戏,直到最近我一直在努力。当玩家或敌人的生命值等于0时,我需要一种迭代方法.I 希望他们两个都等于0,这两个例子都有。我试过改写这几种方法,但它没有用。感谢所有为此提供帮助的人。

while (!(enemyHealth == 0 || playerHealth == 0)
{ //START WHILE
    Console.WriteLine("[System:] Here are the list of moves that you can do:\n1)Punch\n2)Kick\n3)Round House Kick");
    Console.WriteLine();
    decision = Console.ReadLine();
    Console.WriteLine();
    decisionNumber = int.Parse(decision);
    if (decisionNumber < 1 || decisionNumber > 3)
    { //STARTS IF
        throw new Exception();
    } //ENDS IF
    else
    { //STARTS ELSE
        enemyHealth = enemyHealth - attackNumber;
        playerHealth = playerHealth - enemyAttackNumber;
        Console.WriteLine();
        Console.WriteLine("[System:] Enemy Health: " + enemyHealth + "\nYour Health: " + playerHealth);
     } //ENDS ELSE
} //ENDS WHILE



while (enemyHealth > 0 || playerHealth > 0)
                    { //START WHILE
                        Console.WriteLine("[System:] Here are the list of moves that you can do:\n1)Punch\n2)Kick\n3)Round House Kick");
                        Console.WriteLine();
                        decision = Console.ReadLine();
                        Console.WriteLine();
                        decisionNumber = int.Parse(decision);
                        if (decisionNumber < 1 || decisionNumber > 3)
                        { //STARTS IF
                            throw new Exception();
                        } //ENDS IF
                        else
                        { //STARTS ELSE
                            enemyHealth = enemyHealth - attackNumber;
                            playerHealth = playerHealth - enemyAttackNumber;
                            Console.WriteLine();
                            Console.WriteLine("[System:] Enemy Health: " + enemyHealth + "\nYour Health: " + playerHealth);
                        } //ENDS ELSE
                    } //ENDS WHILE

任何人都可以解决这个问题,因为我遇到了很多问题。

5 个答案:

答案 0 :(得分:5)

条件可以简化为,负健康级别为!= 0会导致逻辑错误,我们也需要保持循环活动,直到enemyplayer的健康状态为{{ 1}}

> 0

似乎,问题是你的循环编码,

while ((enemyHealth > 0 && playerHealth > 0)) 似乎是一个错误的逻辑,我的建议是丢弃忽略错误的输入。

可以像

一样实现
throw new Exception();

答案 1 :(得分:3)

问题在于你这样做

while (!(enemyHealth == 0) || !(playerHealth == 0))

enemyHealth = enemyHealth - attackNumber;

playerHealth = playerHealth - enemyAttackNumber;

如果敌人的生命值是......让我们说20,攻击数是21,你得到-1。永远不会达到0.您需要检查他们的健康状况是否大于0。

while (enemyHealth > 0 && playerHealth > 0)

使用&amp;&amp;因为如果其中任何一个死亡,你希望战斗结束。

答案 2 :(得分:1)

为什么不做呢

bool loop = true;
while(loop)
{
//change loop to false when it loop should stop
}

或使用break关键字

答案 3 :(得分:1)

我会将条件更改为:

while (enemyHealth > 0 && playerHealth > 0)

如果敌人或玩家的生命值降至零或更低,这将停止循环。使用大于或小于比较而不是精确的零比较更安全,以防止健康降至零(负)以下的无限循环。

答案 4 :(得分:1)

你的语言有点令人困惑。当你说

  

当玩家或敌人的健康时,我需要一种方法来重申这一点   等于0。

我认为你的意思是当玩家或敌人的生命值等于0时,你想要“停止重复”(即离开循环)。要实现这一点,你需要&&代替||

while (!(enemyHealth == 0) && !(playerHealth == 0))

这意味着只要敌人玩家的生命值都为非零,就会继续运行循环。但是,如果健康状况可能为负(并且跳过0),那么这还不够好。你想使用:

while (enemyHealth > 0 && playerHealth > 0)