2016-12-09 7 views
-3

Я создал этот код, который представляет собой простую игру в обморок, код проверяет, является ли пользовательский ввод символом или строкой, и он меняет символы подчеркивания в тире массива с помощью ввода пользователем.как добавить больше функциональности к моему java-коду палатина?

Мой вопрос: как добавить функциональность, чтобы сообщить пользователю, что их вход не в слове, и как поменять, если пользователь вводит, например, 2 или более последовательных буквы, которые находятся в слове?

public class question6 { 

    public static void main(String[] args) { 
     Scanner input = new Scanner (System.in); 
     String secretword = "testing"; 

     // now we need to create an array that stores characters so that we can swap them 
     // this is an array of characters that has the same length as the secret word 

     char[] dashes =new char[secretword.length()]; 
     // now we need to add dashes to the array 

     for (int i=0; i<secretword.length(); i++){ 
      dashes[i]= '_' ; 
     } 
     // now we need to start a loop that asks the user for input until all the dashes are swapped 


     // declaring variables for loop counter and steps 

     int counter = 0; 
     int steps =0; 

     // condition remains true until the counter is the same length as the secret word to make sure we swap everything 

     while (counter<secretword.length()){ 

      // asking for input 

      System.out.print("Key in one character or your guess word: "); 
       String userinput = input.nextLine(); 

       // if it is a character 

       if (userinput.length() == 1){ 

        for (int i = 0; i<secretword.length(); i++){ 
         // swapping 

         if (userinput.charAt(0) == secretword.charAt(i)){ 

          dashes[i] = userinput.charAt(0); 
          counter ++; 
         } 
        }  
       } 

        // swapping the whole word 

       else if (userinput.equals(secretword)){ 

        for (int j=0; j<secretword.length(); j++){ 
         dashes[j]= userinput.charAt(j); 
         counter = secretword.length(); 
        } 
       } 
       steps ++; 
       System.out.println(dashes); 
     } 
    } 

} 
+0

Я думаю, что вы переоцениваете пустые строки. – xenteros

+0

В [help] есть интересные статьи [так], как [ask] и [mcve]. Я настоятельно рекомендую их, поскольку они помогают научиться задавать хорошие вопросы. – xenteros

ответ

0

Вот пересмотренный вариант кода, который делает то, что вы хотите:

public class HangManGame { 

    private static final int MAX_GUESSES = 10; 
    private String secretword; 
    private char[] dashes; 
    int guessedPositions; 
    int guesses; 

    public static void main(String[] args) { 
     HangManGame game = new HangManGame("testing"); 
     game.start(); 
    } 

    private HangManGame(String secretword) { 
     this.secretword = secretword; 
     initDashes(); 
    } 

    private void initDashes() { 
     dashes = new char[secretword.length()]; 
     for (int i=0; i < secretword.length(); i++){ 
      dashes[i]= '_' ; 
     } 
    } 

    private void start() { 
     Scanner input = new Scanner (System.in);    
     while (guessedPositions < secretword.length() && guesses < MAX_GUESSES) { 
      System.out.println("Guess the word: " + Arrays.toString(dashes)); 
      guessedPositions += guess(input.nextLine());     
      guesses++; 
     } 
     reportEndOfGame(); 
    } 

    private int guess(String userInput) { 
     int guessedPositionsThisTurn = 0; 
     for (int i = 0; i < userinput .length(); i++) { 
      guessedPositionsThisTurn += guessLetter(userinput.charAt(0)); 
     }     
     reportIfAllWrong(guessedPositionsThisTurn); 
     return guessedPositionsThisTurn; 
    } 

    private void guessLetter(char userChar) { 
     int guessedPositionsThisLetter = 0; 
     for (int i = 0; i < secretword.length(); i++) { 
      if (secretword.charAt(i) == userChar){ 
       dashes[i] = userChar;; 
       guessedPositionsThisLetter++; 
      } 
     } 
     return guessedPositionsThisLetter; 
    } 

    private void reportIfAllWrong(int guessedPositionsThisTurn) { 
     if (guessedPositionsThisTurn == 0) { 
      System.out.println("All letters were wrong!"); 
     } 
    } 

    private void reportEndOfGame() { 
     if (guessedPositions == secretword.length()) { 
      System.out.println("Yay! You guessed the word"); 
     } 
     else { 
      System.out.println("You failed! Any last words?"); 
     } 
    } 
} 

Обратите внимание, что основной метод создает экземпляр палача и вызывает метод запуска, чтобы играть в игру. У экземпляра HangMan есть поля, в которых хранится состояние игры, что позволяет ссылаться на эти значения из разных методов, которые я создал. Разделение кода на методы делает его более читаемым, потому что полный процесс делится на логические подзадачи.

Смежные вопросы