2016-11-17 3 views
0

최근에 고등 및 저급 게임에 대한 질문을 올렸습니다. 모든 곳에서 작동하지 않았고,이 게임에서 또 다른 접근 방식을 취했습니다. 그것은 단지 사소한 문제로,이 시간을 일하고, 그렇게 설명보다 보여주기 위해 쉽게, 여기 내 코드입니다 :내 루프를 고정하고 입력 검사기에 대한 도움이 필요합니다. Java

String noReplay = "\nThank you for playing."; 
     String highLow = "(H)igher or (L)ower: "; 
     String loseHigh = "Card is higher, you lose. Would you like to play again? Y/N: "; 
     String loseLow = "Card is lower, you lose. Would you like to play again? Y/N: "; 

     String playAgain; 

     boolean replay = false; 

     Random rand = new Random(); 
     Scanner scan = new Scanner(System.in); 

     do { 

      int card1 = rand.nextInt(13) + 1; 
      int card2 = rand.nextInt(13) + 1; 

      System.out.println("Card is: " + card1); 
      System.out.printf(highLow); 
      String guess = scan.nextLine().toUpperCase(); 

      if(card2 > card1 && guess.equalsIgnoreCase("H")) { 
       System.out.println("Card is: " + card2); 
       System.out.printf(highLow); 
       replay = true; 
       guess = scan.nextLine().toUpperCase(); 

      } 
      else if(card2 > card1 && guess.equalsIgnoreCase("L")) { 
       System.out.println("Card is: " + card2); 
       System.out.printf(loseHigh); 
       playAgain = scan.nextLine().toUpperCase(); 
       if(playAgain.equalsIgnoreCase("Y")) { 
        replay = true; 
       } 
       else if(playAgain.equalsIgnoreCase("N")) { 
        replay = false; 
        System.out.println(noReplay); 
       } 
      } 
      else if(card2 < card1 && guess.equalsIgnoreCase("H")) { 
       System.out.println("Card is: " + card2); 
       System.out.printf(loseLow); 
       playAgain = scan.nextLine().toUpperCase(); 
       if(playAgain.equalsIgnoreCase("Y")) { 
        replay = true; 
       } 
       if(playAgain.equalsIgnoreCase("N")) { 
        replay = false; 
        System.out.println(noReplay); 
       } 
      } 
      else if(card2 < card1 && guess.equalsIgnoreCase("L")) { 
       System.out.println("Card is: " + card2); 
       System.out.printf(highLow); 
       replay = true; 
       guess = scan.nextLine().toUpperCase(); 
      } 

     } while(replay != false); 
여기 내 프로젝트의 목적은, 간단한 게임을 만드는 것입니다

사용자가 때 위의 카드 번호보다 높거나 낮게 입력하면 프로그램은 해당 단계에서 게임을 재생하거나 실패로 다시 게임하기를 원하는지 묻는 정답으로 응답합니다.

이 그러나 내 출력에서 ​​잘 작동 :

Card is: 9 
(H)igher or (L)ower: h 
Card is: 11 
(H)igher or (L)ower: l 
*Card is: 6* 
*(H)igher or (L)ower: l* 
*Card is: 7* 
Card is higher, you lose. Would you like to play again? Y/N: y 
*Card is: 13* 
*(H)igher or (L)ower: h* 
*Card is: 10* 
(H)igher or (L)ower: 

우리는 별표 라인에 볼 수 있습니다, 일을해야 일을하지 않습니다. 내가 더 높게 말할 때, 숫자가 낮 으면 내가 잘못했기 때문에 다시 놀고 싶은지 물어봐야한다. 이 경우에는 그렇지 않습니까?

가 그래서^

그것에 메신저 동안 다른 일을 내 문제입니다, 내가 입력 검사기에 도움을 요청하고 싶습니다, 난 단지 사용자가 입력 Y, N, H, L 할 수 있도록하려면 (필자는 대문자 또는 대문자 문제를 분류했다.)

읽어 주셔서 감사합니다.

+0

do/while의 각 반복에 대해 사용자로부터 입력을 요청해야하며 게임의 현재 상태와 현재 카드에 따라 수행해야합니다. 당신은 현재 do/do에서 당신이 필요로하지 않는 많은 복잡성을 추가하는 동안 많은 돈을 벌고 있습니다. –

+0

어떻게하면 갈 수 있을까요? @RAZ_Muh_Taz – SeanHub

답변

1

게임의 복잡성을 줄이려면이 방법이 바람직합니다. card1 대 card2에 대한 내 비교를 살펴보면, card2가 card1과 비교되는 것과 다른 방법이 아닌 것에 기반하여 추측을하고 싶습니다. 그 말이 맞는다면. 희망이 도움이!

 String highLow = "(H)igher or (L)ower: "; 
    String loseHigh = "Card is higher, you lose."; 
    String loseLow = "Card is lower, you lose."; 
    String loseMessageDetails = ""; 
    boolean gameLost = false; 
    boolean askAgain = true; 
    Scanner scan = new Scanner(System.in); 
    String guess = ""; 
    Random rand = new Random(); 

    int card1; 
    int card2; 

    while(askAgain) 
    { 
     if(gameLost) 
     { 
      System.out.println(loseMessageDetails + "\nWould you like to play again? Y/N"); 
      guess = ""; 
      while(!guess.equals("Y") && !guess.equals("N")) 
      { 
       guess = scan.nextLine().toUpperCase(); 
      } 

      if(guess.equals("Y")) 
      { 
       gameLost = false; 
       askAgain = true; 
      } 
      else 
      { 
       askAgain = false; 
      } 
     } 

     if(!gameLost) 
     { 
      card1 = rand.nextInt(13) + 1; 
      card2 = rand.nextInt(13) + 1; 
      System.out.println("Card is: " + card1); 
      guess = ""; 
      //loop until correct type of input 
      while(!guess.equals("H") && !guess.equals("L")) 
      { 
       System.out.printf(highLow); 
       guess = scan.nextLine().toUpperCase(); 
      } 
      //now we either correctly guessed or incorrectly guessed 
      //here is a correct guess 
      if((card1 < card2 && guess.equalsIgnoreCase("H")) || 
       (card1 > card2 && guess.equalsIgnoreCase("L"))) 
      { 
       askAgain = true; 
      } 
      else 
      { 
       loseMessageDetails = guess.equalsIgnoreCase("L") ? loseHigh : loseLow; 
       gameLost = true; 
      } 
     } 
    } 

이렇게하면 유효한 입력 만 보장되고 사용자가 올바른 문자를 입력 할 때까지 입력을 계속 요청합니다.

+0

이것에서 약간의 비트를 변경하고, 내가 원하는 방식으로 그들을 넣어, 그것은 절대적으로 완벽하게 작동, 난 당신에게 충분히 감사 할 수 없다! 필자는이 일을해야했던 것보다 더 많은 시간을 보냈습니다! – SeanHub

+0

대단히 환영합니다! 나는 당신이 그것을 바꿀 수 있고 당신의 현재 프로젝트로 수정할 수있어서 다행이다! –

+0

고통이 되려면 입력기를 어떻게 구현합니까? H, L, Y 및 N 만 사용되도록하려면? – SeanHub