2016-10-03 125 views
0

所以我创建了一个简单的基于文本的游戏,但遇到了我的循环麻烦。所以我的角色与同一个敌人有3次战斗,但是直到一个角色死亡,战斗才会结束。使用我现在的代码,它只会在第一场战斗中循环,但会将战斗2和战斗3留空。 HP从战斗转移到战斗,但敌人HP在每次随后的战斗中重置为25。 当角色死亡时,我该如何让我的环路立即停止? 我在做什么错?简单的基于Java文本的游戏循环

Scanner keyboard = new Scanner(System.in); 
    Random rand = new Random(); 
    int characterHP = 0, characterStrength = 0, weaponMin = 0, weaponMax = 0; 
    int enemyHP = 0, enemyStrength = 0, enemyWeaponMin = 0, enemyWeaponMax = 0; 
    boolean running = true, characterHasntDied = true, enemyHasntDied = true; 
    int choice; 
    String characterChoice = null; 
    String enemyChoice = null; 
    int ATK = 0, enemyATK = 0; 



    for (int i = 1; i <= 3; i++) { 
      ATK = rand.nextInt((weaponMax - weaponMin) + 1) + weaponMin; 
      enemyATK = rand.nextInt((enemyWeaponMax - enemyWeaponMin) + 1) + enemyWeaponMin; 

      int valueOfAttack = (ATK + characterStrength); 
      int enemyValueOfAttack = (enemyATK + enemyStrength); 



       enemyHP -= valueOfAttack; 
       characterHP -= enemyValueOfAttack; 

       if (enemyHP < 1) { 
        characterHasntDied = false; 
        System.out.println(characterChoice + " has defeated Goblin " + i); 
        break; 

       } else if (characterHP < 1) { 
        characterHasntDied = false; 
        System.out.println(characterChoice + " is defeated in battle!"); 
        break; 
       } 
      } 
     } 
+0

似乎有些码不显示,如。 'characterHasntDied'定义在哪里?你可以在运行代码时包含这个和实际的输出。 – dave

+0

你在战斗后重置了值(hp,characterHasntDied等)?请提供所有重要代码,请参阅http://stackoverflow.com/help/mcve。例如,删除代码中不会更改值的部分(如System.out.printlns),以便您的代码更易于理解。 –

回答

0

不要使用break,因为它会摆脱其loop

if (enemyHP < 1) { 
    /*... */ 

    } else if (characterHP < 1) { 
    /*... */ 
    } 

模拟两个玩家之间的三大战役会是这样

Scanner keyboard = new Scanner(System.in); 
Random rand = new Random(); 
int PowerPlayer1 =200; 
int PowerPlayer2 = 200; 
boolean winner=false; 
int ATKPlaayer1 = 0, ATKPlaayer2 = 0; 
String Player1 = "Rogue"; 
String Player2 = "Goblin";  

for (int i = 1; i <= 3; i++) { // i many battles 

     while(!winner) /*while there is no winner*/ 
     { 
      /* The Random method can improve it*/ 
      ATKPlaayer1 = rand.nextInt(200); 
      System.out.println(Player1+ " Attack : " + ATKPlaayer1); 
      PowerPlayer2-= ATKPlaayer1; 
      System.out.println(Player2 + " Power Diminished by the Attack "+ Player1 + " of "+ PowerPlayer2); 
      ATKPlaayer2 = rand.nextInt(200); 
      System.out.println(Player2+ " Attack : " + ATKPlaayer2); 
      PowerPlayer1-=ATKPlaayer2; 
      System.out.println(Player1 + " Power Diminished by the Attack "+ Player2 + " of "+ PowerPlayer1); 
      if(PowerPlayer1<=0) 
      { 
       System.out.println(Player2 + " has Winner"); 
       winner=true; 
      } 
      else if(PowerPlayer2<=0) 
      { 
       System.out.println(Player1 + " has Winner"); 
       winner=true; 
      } 

     } 
     /* Reset Variables */ 
     winner = false; 
     PowerPlayer1 =200; 
     PowerPlayer2 =200; 
     } 
+0

一旦条件满足,我该如何结束循环?例如,在我的输出: 与ATK = 6 + 4 = 10 盗贼HP地精攻击现在是34 - 10 = 24次 盗贼用ATK = 3 + 8 = 11 地精HP攻击现在14 - 11 = 3次 与ATK = 6 + 4 = 10 盗贼HP地精攻击现在是24 - 10现在= 14次 盗贼用ATK = 3 + 8 = 11 地精HP攻击是3 - 11 = -8 **端此处** \ n **而不是在这里允许额外的敌人攻击** 地精攻击与ATK = 6 + 4 = 10 盗贼HP现在是14 - 10 = 4 盗贼击败了Goblin 2 ***流氓与地精战役3 *** –

+0

休息退出论坛,让第一次迭代你这样做:) –

+0

希望我的回答帮助更新。 –