2014-09-14 2 views
-3
String option = (String) JOptionPane.showInputDialog(frame, 
    "A wooden crate appears! It looks ready to kick your butt!", 
    "Battle!", 
    JOptionPane.QUESTION_MESSAGE, 
    null, 
    attacks, 
    attacks[0]); 
    if (option.equals("slash")) 
    { 
     damage = (int)(Math.random()*(stick.getMax()-stick.getMin()) + stick.getMin()); 
    }    
    else if (option.equals("magic")) 
    { 
     if (playerMana >= 25) 
     { 
      damage = (int) intellect*((stick.getMax()-stick.getMin())/2) + (int)Math.round(Math.pow(playerLevel, 1.20)); 
      playerMana -= 25; 
     } 
     else 
     { 
      damage = 0; 
     } 
    } 
    else if (option.equals("run")) 
    { 
     out.println("fail! you run from the fight!"); 
    } 
    else if (option.equals("healing") && healPots >= 1) 
    { 
     playerHp+= (playerHp*0.15); 
    } 
    else 
    { 
     out.println("you have no potions! Get some in town to heal your hp!"); 
    } 

스틱은 최소 최대 피해 값으로 만들었습니다. 플레이어 HP와 마나는 모두 100입니다. 힐 포인트는 0입니다.자바 게임에 대한 else if 문을 수정하는 경우

플레이어가 옵션을 선택하고 순서를 변경하는 RPG 스타일의 전투 시스템을 만들려고합니다. 그러나 루프는 자동으로 선택 항목에 관계없이 마지막 else로 건너 뜁니다.

+5

if와 else 블록은 실제로 루프 또는 while 루프처럼 루프를 제어하지 않기 때문에 "루프"가 아닙니다. 컨트롤 블록이나 다른 것을 호출 할 수는 있지만 루프를 호출하고 싶지는 않습니다. 저기, 끝났어. –

+1

두 개의 객체를 비교할 때 그 중 하나가 상수이면 ** 항상 ** 상수를 먼저두고 비교해보십시오 (예 : "slash".equals (option)). Bye bye 객체 비교에서 NPE;) – m4rtin

+1

코드에 관해서는 순환 복잡성이 매우 복잡하게 보입니다. 스틱이 상속 할 수있는 Weapon 클래스와 같이 더 많은 OOP를 사용하여 다시 작성하는 것이 좋습니다. 플레이어가 할 수있는 피해의 종류를 알아 내기 위해 Player 클래스에는 플레이어 유형의 각기 다른 유형의 하위 클래스가있을 수 있으며 무기를 사용하여 피해를 입히고받을 수 있습니다. 이렇게하면 코드가 단순 해지고 복잡성이 줄어들며 커플 링이 줄어들 수 있습니다. –

답변

1

SO에 관한 질문을 할 때, 최소한의 실행 예제를 제공하는 것이 좋습니다.

나는 당신의 코드에서 실제 게임 로직을 제거하고 nullframe 대체 :이 완벽하게 작동

public class ShubhankarsQuestion 
{ 
    public static void main(String[] args) 
    { 
     String[] attacks = {"slash", "magic", "run", "healing"}; 

     String option = (String) JOptionPane.showInputDialog(null, 
       "A wooden crate appears! It looks ready to kick your butt!", 
       "Battle!", JOptionPane.QUESTION_MESSAGE, 
       null, attacks, attacks[0]); 

     if (option.equals("slash")) 
     { 
      System.out.println("You chose slash..."); 
     } 
     else if (option.equals("magic")) 
     { 
      System.out.println("You chose magic..."); 
     } 
     else if (option.equals("run")) 
     { 
      System.out.println("You chose run..."); 
     } 
     else if (option.equals("healing")) 
     { 
      System.out.println("You chose healing..."); 
     } 
     else 
     { 
      System.out.println("you have no potions! Get some in town to heal your hp!"); 
     } 
    } 
} 

합니다. 당신이 우리에게 실제 코드를 보여주지 않았거나 당신의 문제가 다른 곳에있다.

가변 공격의 정의를 보여줄 수 있습니까?

String[] attacks = {"slash!", "magic!", "healing!", "run!"}; 

음, 거기 당신은 그것이있다. "slash!""slash"을 비교해보십시오. 확실히 같지 않습니다.

느낌표를 배열에서 제거하거나 비교 문자열에 추가하십시오.

+0

감사합니다. 그건 그렇고 초보자는 이것과 나는 사전 계획없이 시작했다. 나는 나 자신이 모든 것을 편집하는 하나의 작은 변화를 일으키는 것을 발견한다! 더 효율적인 설정이 있습니까? 이 문제를 방지하기 위해 몇 개의 수업을 사용해야합니까? –

+0

' "음, 거기 있네."슬래시! "와"슬래시 "를 비교해보십시오. 1 + –

+0

@ShubhankarDas :이 오류를 방지하는 한 가지 방법은 문자열 상수를 사용하는 것입니다. 문자열을 전혀 사용하지 않는 것이 좋습니다. –

관련 문제