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

あなたの言語は少し混乱しています。あなたが言う時

プレイヤーまたは敵のヘルスが 0 になったときに、これを繰り返す方法が必要です。

プレイヤーまたは敵のヘルスが 0 になったときに、「反復を停止する」(つまり、ループを終了する)ことを意味していると思います。これを達成するには、&&代わりに||次のものが必要です。

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

これは、敵とプレイヤーの両方のヘルスがゼロでない限り、ループを実行し続けることを意味します。ただし、ヘルスがマイナスになる (およびスキップする0) 可能性がある場合、これでは十分ではありません。使用したい:

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