无法理解为什么我的||不管用

时间:2015-06-19 21:55:55

标签: java

我正在尝试制作一个非常简单的游戏(即使没有界面)。您应该键入要执行的操作(攻击或阻止)。但为什么我的(enemy_hp > 0 || hp > 0)陈述不起作用?循环永远。

public class Game {
    public static void main(String[] args){ 
        int hp = 10, enemy_hp = 10;
        String attack = "attack";
        String block = "block";
        Scanner userInput = new Scanner (System.in);
        while (enemy_hp > 0 || hp > 0) { 
            System.out.println("It is your turn, attack or try to block");
            int your_block_chance1 = (int) (Math.random() * 4); //Chance to block an attack
            int enemy_block_chance1 = (int) (Math.random() * 4);
            String action = userInput.next(); 
            if (action.equals(attack)){
                System.out.print("You attacked your enemy and ");
                if (enemy_block_chance1 == 0) {
                    System.out.println("he blocked it");
                }
                else if (enemy_block_chance1 != 0){
                    enemy_hp = enemy_hp - 2;
                    System.out.println("managed to hit, now his hp is " +enemy_hp);
                }
            }       
            else if (action.equals(block)){
                System.out.println("You dicided to block");
                your_block_chance1 = 0; 
            }
            System.out.print("It is your enemy turn, he decided to ");
            int enemy_action = (int) (Math.random() * 2);
            if (enemy_action == 1){
                System.out.print("attack you,");
                if (your_block_chance1 == 0){
                    System.out.println(" but you blocked it");
                }
                else if (your_block_chance1 != 0){
                    hp = hp - 2;
                    System.out.println(" and you didn't block it, now your hp is " +hp);

                }
            }
            else if (enemy_action != 1){
                System.out.print("do a heavy attack");
                int heavy_attack_chance = (int) (Math.random() * 2);
                if (heavy_attack_chance == 1){
                    System.out.println(" but failed");
                }
                else if (heavy_attack_chance != 1){
                    if (your_block_chance1 == 0){
                        System.out.println(" but you blocked it");
                    }
                    else if (your_block_chance1 != 0){
                        hp = hp - 4;
                        System.out.println(" and he managed to hit you really hard, now your hp is " +hp);

                    }
                }
            }
        }
        if (hp <= 0){
            System.out.println("You failed");
        }
        else if (enemy_hp <= 0){
            System.out.println("You won!");
        }
    }
}

3 个答案:

答案 0 :(得分:8)

当其中一名玩家死亡时你想停止吗?那么你应该放一个&amp;&amp ;.因为||除非两名球员的马力低于0,否则永远不会是假的。

答案 1 :(得分:2)

如果你想在 敌人或玩家的生命值下降到零或以下时停止,那么你希望你的循环条件使用逻辑AND运算符而不是OR:< / p>

ReportForm

继续,而两者均高于零。因此,当其中任何一个(或两个)为零或以下时,停止

答案 2 :(得分:2)

您的情况使用||或OR。这意味着你的循环将继续,而敌人的HP是积极的,或者玩家HP是积极的(意味着它会在敌人的HP达到0后继续)。将其更改为&&