2017-06-06 67 views
1
int i = 1; 
int answer; 
int d; 
int e; 
boolean alive = true; 

System.out.println("\n"); 

System.out.println(enemies[i].getName() + " has appeared!"); 

System.out.print("\n"); 

while (alive == true) { 

    System.out.println("Hitpoints[HP]: " + enemies[i].getHP()); 
    System.out.println("Attack[ATK] : " + enemies[i].getATK()); 
    System.out.println("Mana[MANA] : " + enemies[i].getMANA()); 

    System.out.println("\n"); 

    System.out.println("[1 - Attack]"); 
    System.out.println("[2 - Flee]"); 

    answer = In.getInt(); 

    System.out.println("\n"); 

    if (answer == 1) { 

     if (user.getP_HP() > 0) { 
      d = enemies[i].getHP() - user.getP_ATK(); 
      enemies[i].setHP(d); 

      System.out.println(user.getP_Name() + " strikes the " + enemies[i].getName() + " for " + user.getP_ATK() + " damage."); 
      System.out.println(enemies[i].getName() + " has " + enemies[i].getHP() + " HP remaining."); 
      System.out.println("\n"); 
     } else if (user.getP_HP() <= 0) { 
      System.out.println(user.getP_Name() + " has been slain by the " + enemies[i].getName() + "!"); 
      alive = false; 
     } 

     if (enemies[i].getHP() > 0) { 
      e = user.getP_HP() - enemies[i].getATK(); 
      user.setP_HP(e); 

      System.out.println("The " + enemies[i].getName() + " attacked you for " + enemies[i].getATK() + " damage."); 
      System.out.println(user.getP_Name() + " has " + user.getP_HP() + " HP remaining."); 
      System.out.println("\n"); 
     } else if (enemies[1].getHP() <= 0) { 
      System.out.println(user.getP_Name() + " has slain the " + enemies[i].getName() + "!"); 
      alive = false; 
     } 

    } else if (answer == 2) { 
     System.out.println("You try to run, but fall into a pit of spikes and die!"); 
     alive = false; 
    } 
} 

你好,我現在解決這個問題約2小時有問題。我想要做的是讓敵人在HP達到0或以下時立即死亡,對於玩家也是如此。關於如何安排「if」語句的Java困惑

只有當玩家先殺死地精時纔有效,反之亦然不是

每當敵人首先殺死玩家時,它不會輸出已被殺死的玩家。相反,它可以讓您選擇是否要再次攻擊或逃離。選擇攻擊選項後,它只會表明你已經被殺死。儘管如此,在那之前,地精在程序停止之前再次攻擊你。

下面是示例輸出如果敵人先殺死你:

stackoverflow strikes the Goblin for 1 damage. 
Goblin has 12 HP remaining. 


The Goblin attacked you for 3 damage. 
stackoverflow has 1 HP remaining. 


Hitpoints[HP]: 12 
Attack[ATK] : 3 
Mana[MANA] : 1 


[1 - Attack] 
[2 - Flee] 
1 


stackoverflow strikes the Goblin for 1 damage. 
Goblin has 11 HP remaining. 


The Goblin attacked you for 3 damage. 
stackoverflow has -2 HP remaining. 


Hitpoints[HP]: 11 
Attack[ATK] : 3 
Mana[MANA] : 1 


[1 - Attack] 
[2 - Flee] 
1 


stackoverflow has been slain by the Goblin! 
The Goblin attacked you for 3 damage. 
stackoverflow has -5 HP remaining. 
+0

'enemies [1] .getHP()<= 0' - 你的意思是做'敵人[i]。 getHP()<= 0'而不是? – EJoshuaS

+0

'alive == true'文體點:不需要明確地比較'true'和'false'。 – EJoshuaS

+0

@EJoshuaS對,謝謝你的銳利眼 –

回答

1

試試這個:

int i = 1; 
int answer; 
int d; 
int e; 
boolean alive = true; 

System.out.println("\n"); 

System.out.println(enemies[i].getName() + " has appeared!"); 

System.out.print("\n"); 

while (alive == true) { 

    System.out.println("Hitpoints[HP]: " + enemies[i].getHP()); 
    System.out.println("Attack[ATK] : " + enemies[i].getATK()); 
    System.out.println("Mana[MANA] : " + enemies[i].getMANA()); 

    System.out.println("\n"); 
    if (user.getP_HP() > 0) { 
     System.out.println("[1 - Attack]"); 
     System.out.println("[2 - Flee]"); 

     answer = In.getInt(); 

     System.out.println("\n"); 
    } else if (user.getP_HP() <= 0) { 
      System.out.println(user.getP_Name() + " has been slain by the " + enemies[i].getName() + "!"); 
      alive = false; 
      answer = 0; //so it won't execute the rest of the code 
      } 

    if (answer == 1) { 

     d = enemies[i].getHP() - user.getP_ATK(); 
     enemies[i].setHP(d); 

     System.out.println(user.getP_Name() + " strikes the " + enemies[i].getName() + " for " + user.getP_ATK() + " damage."); 
     System.out.println(enemies[i].getName() + " has " + enemies[i].getHP() + " HP remaining."); 
     System.out.println("\n"); 

     if (enemies[i].getHP() > 0) { 
      e = user.getP_HP() - enemies[i].getATK(); 
      user.setP_HP(e); 

      System.out.println("The " + enemies[i].getName() + " attacked you for " + enemies[i].getATK() + " damage."); 
      System.out.println(user.getP_Name() + " has " + user.getP_HP() + " HP remaining."); 
      System.out.println("\n"); 
     } else if (enemies[1].getHP() <= 0) { 
      System.out.println(user.getP_Name() + " has slain the " + enemies[i].getName() + "!"); 
      alive = false; 
     } 

    } else if (answer == 2) { 
     System.out.println("You try to run, but fall into a pit of spikes and die!"); 
     alive = false; 
    } 
} 

你需要在詢問輸入之前檢查您是否還活着。可能不是最好的解決方案,但它是一個快速的解決方案,我希望它指向正確的方向

+0

啊,我明白了。從某種意義上說,你會優先考慮用戶。謝謝你的幫助。 –

+0

我很高興能幫上忙! – KeOt777

1

你真正想要做的事情按以下順序(假設你攻擊):

  1. 詢問玩家是否他們想攻擊或逃跑
  2. 你攻擊
  3. 看看你是否殺死了怪物;如果是這樣,遊戲結束
  4. 怪物攻擊
  5. 看看怪物是否殺了你;如果是的話,遊戲就結束了
  6. 重複,直到3#或#5時

你扭轉#3,#5。

此外,以下行:

else if (enemies[1].getHP() <= 0) 

有什麼,我認爲是一個錯字。我假設你真正的意思做

else if (enemies[i].getHP() <= 0) 
0

好像而不是使用else if,你要的是這樣的:

// Process both attacks first. 
if (user.getP_HP() > 0) { 
    d = enemies[i].getHP() - user.getP_ATK(); 
    enemies[i].setHP(d); 

    // ... 
} 
if (enemies[i].getHP() > 0) { 
    e = user.getP_HP() - enemies[i].getATK(); 
    user.setP_HP(e); 

    // ... 
} 
// Then resolve the deaths immediately after. 
if (user.getP_HP() <= 0) { 
    // ... 
    alive = false; 
} 
if (enemies[1].getHP() <= 0) { 
    // ... 
    alive = false; 
}