2015-06-19 82 views
2

我想做一个非常简单的游戏(即使没有界面)。你应该输入你想要做什么动作(攻击或阻止)。但为什么我的(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!"); 
     } 
    } 
} 

回答

8

你想让一个玩家死的时候停止吗?那么你应该把一个& &。因为||除非两名玩家的HP值低于0,否则不会是假的。

2

如果你想在或者敌人或者玩家的生命值降至零或者低于零时停止,那么你希望你的循环条件为使用逻辑运算符,而不是OR:

while (enemy_hp > 0 && hp > 0) { 

继续虽然两者都是大于零。因此,当(或两者)都为零或低于0时,停止

2

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

相关问题