1

我一直在为我的高级 RAP 项目开发一款游戏,直到最近我才开始使用这个循环。当玩家或敌人的生命值等于 0 时,我需要一种方法来迭代它。我希望它们都等于 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

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

4

5 回答 5

5

条件可以简化为,负健康水平!= 0会造成逻辑故障,我们还需要保持循环处于活动状态,直到enemy和的健康状况player> 0

while ((enemyHealth > 0 && playerHealth > 0))

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

throw new Exception();似乎是一个糟糕的逻辑,我的建议是丢弃忽略错误的输入。

可以像这样实现

while ((enemyHealth > 0 || playerHealth > 0))
{ 
    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)
    {

        enemyHealth = enemyHealth - attackNumber;
        playerHealth = playerHealth - enemyAttackNumber;
        Console.WriteLine();
        Console.WriteLine("[System:] Enemy Health: " + enemyHealth + "\nYour Health: " + playerHealth);
    } 
    else
    {
        Console.WriteLine("Invalid Input : press enter to input again");
        Console.ReadKey();
    }

}
于 2013-02-22T18:42:04.500 回答
3

问题是你这样做

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

enemyHealth = enemyHealth - attackNumber;

playerHealth = playerHealth - enemyAttackNumber;

如果敌人的生命值是……假设是 20,攻击次数是 21,那么你得到 -1。它永远不会达到 0。您需要检查他们的健康状况是否大于 0。

while (enemyHealth > 0 && playerHealth > 0)

使用 && 因为如果任何一个人死了,你希望战斗结束。

于 2013-02-22T18:48:59.513 回答
1

为什么不做

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

或使用break关键字

于 2013-02-22T18:45:26.400 回答
1

我会将条件更改为:

while (enemyHealth > 0 && playerHealth > 0)

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

于 2013-02-22T18:46:57.167 回答
1

你的语言有点混乱。当你说

当玩家或敌人的生命值为 0 时,我需要一种方法来重申这一点。

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

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

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

while (enemyHealth > 0 && playerHealth > 0)
于 2013-02-22T18:47:55.980 回答