如何为我的hangman java代码添加更多功能?

时间:2016-12-09 09:42:41

标签: 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);
        }
    }

}

1 个答案:

答案 0 :(得分: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?");
        } 
    }
}

请注意,main方法创建一个HangMan实例并调用其start方法来玩游戏。 HangMan实例具有存储游戏状态的字段,从而可以从我创建的不同方法中引用这些值。将代码拆分为方法使其更具可读性,因为整个过程分为逻辑子任务。