행맨 게임

행맨 게임

자바로 만드는 행맨 게임

 

이것도 지금와서 보니 코드가 구리다…

일단 네이밍 컨벤션부터 개판이다.

그리고 DB가 뭔지 모르던 때라 words.txt 파일에 영단어 천개정도를 저장하고,

readLine() 으로 한줄씩 긁어와 문제를 만들었다.

 

public class HangmanMain {
    public static void main(String[] args) {
        Hangman hang = new Hangman();
        try {
            hang.run();
        }
        catch(InterruptedException e) {
        }
    }
}

 

public class Hangman {
    static private void clearScreen() {
        try {
            if(System.getProperty("os.name").contains("Windows")) {
                new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
            }
            else {
                Runtime.getRuntime().exec("clear");
            }
        }
        catch(IOException | InterruptedException ex) {
        }
    }

    public void run() throws InterruptedException {
        clearScreen();
        Scanner sc = new Scanner(System.in);
        Random random = new Random();
        ArrayList<String> read_words = new ArrayList<>();
        ArrayList<String> hidden_word = new ArrayList<>();
        ArrayList<String> answer_word = new ArrayList<>();
        ArrayList<String> answer_result_word = new ArrayList<>();
        String[] words;
        String[] hidden_word_array;
        String[] answer_word_array;
        String[] answer_result_word_array;

        int select, cnt;
        String read_word, input_letter, result;

        try {
            File file = new File("D:\\java\\ws\\studyjava\\src\\game_src\\words.txt");
            FileReader file_reader = new FileReader(file);
            BufferedReader br = new BufferedReader(file_reader);
            while(true) {
                read_word = br.readLine();
                if(read_word.equals(null)) {
                    break;
                }
                else {
                    read_words.add(read_word);
                }
            }
            br.close();
        }
        catch(Exception e) {
        }
        words = read_words.toArray(new String[read_words.size()]);
        select = random.nextInt(words.length);

        System.out.println("행맨 게임을 시작합니다!\n");
        for(int i = 0; i < words[select].length(); i++) {
            hidden_word.add(words[select].substring(i, i + 1));
            answer_word.add("_");
            System.out.print("_");
        }

        hidden_word_array = hidden_word.toArray(new String[hidden_word.size()]);
        answer_word_array = answer_word.toArray(new String[answer_word.size()]);
        answer_result_word_array = answer_result_word.toArray(new String[answer_result_word.size()]);

        int chance = 15;
        for(cnt = 1; cnt <= 15; cnt++) {
            System.out.print("\ninput letter > ");
            input_letter = sc.nextLine();

            if(input_letter.equals("cls")) {
                System.out.println("프로그램을 종료합니다.");
                System.exit(0);
            }

            while(input_letter.length() > 1) {
                System.out.println("다시 입력하시오");
                input_letter = sc.nextLine();
                if(input_letter.equals("cls")) {
                    System.out.println("프로그램을 종료합니다.");
                    System.exit(0);
                }
            }

            clearScreen();

            for(int i = 0; i < hidden_word_array.length; i++) {
                if(hidden_word_array[i].equals(input_letter)) {
                    answer_word_array[i] = input_letter;
                }

                System.out.print(answer_word_array[i]);
            }

            chance -= 1;
            System.out.print("\n\n남은 기회 : " + chance + "\n");

            if(Arrays.equals(hidden_word_array, answer_word_array)) {
                System.out.println("\n정답입니다!");
                Thread.sleep(10000);
                run();
            }

        }

        System.out.print("\n단어를 입력하세요 > ");
        result = sc.nextLine();

        for(int i = 0; i < result.length(); i++) {
            answer_result_word.add(result.substring(i, i + 1));
        }

        answer_result_word_array = answer_result_word.toArray(new String[answer_result_word.size()]);

        if(Arrays.equals(hidden_word_array, answer_result_word_array)) {
            System.out.println("\n정답입니다!");
            Thread.sleep(10000);
            run();
        }
        else if(!(Arrays.equals(hidden_word_array, answer_word_array)) || Arrays.equals(hidden_word_array, answer_result_word_array)) {
            System.out.println("\n틀렸습니다!");
            System.out.print("정답은 : ");
            for(String foryou : hidden_word_array) {
                System.out.print(foryou);
            }
            System.out.println("10초후 게임이 시작됩니다.");
            Thread.sleep(10000);
            run();
        }
    }
}

© 2022. All rights reserved.