import java.io.*; import java.util.*; class UserInput { char input; // Get user input public char getInput() { BufferedReader inp = new BufferedReader(new InputStreamReader(System.in)); try { do { System.out.print("Please enter your guess: "); input = (char) inp.read(); } while (input < 'a' && input > 'Z'); } catch (IOException exc) { System.out.println("Failed to read input");} return input; } } // set the word for the user to enter class Word { String word; public String getWord() { try { BufferedReader in = new BufferedReader(new FileReader(new File("words.txt"))); ArrayList list = new ArrayList(); while (true){ String line = in.readLine(); if (line == null) break; list.add(line); } int size = list.size(); int random = (int)(Math.random() * size); word = list.get(random); } catch (IOException exc) { System.out.println("Error Reading File"); } return word; } } // Check if the letters entered by the user are contained in the word. class WordCheck { public void WrdChk() { UserInput ui = new UserInput(); Word wrd = new Word(); PlayAgain pa = new PlayAgain(); // set amount of user tries int tries = 8; // create hidden word stringbuffer StringBuffer hidden_word = new StringBuffer(); StringBuffer used_letters = new StringBuffer(); String word = wrd.getWord(); // hide word for(int i = 0 ; i < word.length(); i++) { hidden_word.append("-"); } boolean has_tries = true; System.out.println("Hello Welcome to Hangman!"); System.out.println("You have " + tries + " tries to guess all the letters in the word."); System.out.println("If you fail, you get hanged!! "); System.out.println("The word is: " + hidden_word); System.out.println(); // if user still has tries for(;has_tries;) { // if the user has guessed to word execute the code below if(hidden_word.toString().equals(word.toString())) { System.out.println("Congratulations! You guessed the word '" + word + "' correctly"); pa.PlayAgain(); return; } // Get users guess char input = ui.getInput(); // Check if the letter is found in the used_letters String bufffer, if it isn't add it to the string, if it is do nothing. //new Char(input).toString(); if(used_letters.toString().contains("" + input)) { System.out.println("You have entered this letter before!"); } else { used_letters.append(input + ""); } // if the word is true add the letter to the hidden_letter string buffer boolean is_found = false; for(int i = 0; i < word.length(); i++) { if(input == word.charAt(i)) { is_found = true; hidden_word.setCharAt(i, input); } } // if the letter is not found remove a try and inform the user how many tries they have left. // if the user is right let the user know and print the hidden word. if(!is_found) { tries--; if(tries == 0) { has_tries = false; System.out.println("\nGame Over!!! You got hung!\n"); System.out.println("The word was: '" + word + "' better luck next time."); pa.PlayAgain(); return; } System.out.println("You guessed wrong, you have " + tries + " remaining"); System.out.println("Word so far: " + hidden_word); System.out.println("\t\t\t\tCurrently used letters: " + used_letters); } else { System.out.println("Letter found!"); System.out.println("Word so far: " + hidden_word); System.out.println("\t\t\t\tCurrently used letters: " + used_letters); } } } } class PlayAgain { char input; void PlayAgain() { WordCheck wcc = new WordCheck(); BufferedReader inp2 = new BufferedReader(new InputStreamReader(System.in)); System.out.print("\nWould you like to play again? 'y' for yes, 'n' for no: "); try { input = (char) inp2.read(); } catch (IOException exc) { System.out.println("Failed to read input"); } if(input == 'y') { System.out.println(); wcc.WrdChk(); } else return; } } class HangMan2 { public static void main(String[] args) { WordCheck wc = new WordCheck(); wc.WrdChk(); } }