Advertisement
Guest User

Hangman Java

a guest
Jul 16th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.98 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class helloWorld {
  4.  
  5.     private static final Character EMPTY_CHAR = 0;
  6.  
  7.     public static void main(String[] args) {
  8.  
  9.         Scanner input = new Scanner(System.in);
  10.  
  11.         // get the secret word
  12.         System.out.println("Input Secret Word:");
  13.         String secretWord = input.nextLine();
  14.  
  15.         int lives = 10;
  16.         // list of guessed characters
  17.         ArrayList<Character> lettersGuessed = new ArrayList<Character>();
  18.  
  19.         // play the game until no remaining lives
  20.         while (lives > 0) {
  21.             System.out.println("you have " + lives + "left.");
  22.             System.out.println("Available letters: " + getRemainingPossibleLetters(lettersGuessed));
  23.             System.out.print("please guess a letter: ");
  24.  
  25.             // get a guess character
  26.             Character guessedLetter = input.nextLine().charAt(0);
  27.  
  28.             // check is already guessed, continue loop if yes
  29.             if (lettersGuessed.contains(guessedLetter)) {
  30.                 System.out.println("Oops! You've already guessed that letter");
  31.                 continue;
  32.             }
  33.  
  34.             // add to list of guessed characters
  35.             lettersGuessed.add(guessedLetter);
  36.  
  37.             // get word progress
  38.             String wordProgress = getWordProgress(secretWord, lettersGuessed);
  39.  
  40.             // check if char is in secret word
  41.             if (isCharInWord(secretWord, guessedLetter)) {
  42.                 System.out.println("Good Guess: " + wordProgress);
  43.                 if (checkGameWon(secretWord, lettersGuessed)) {
  44.                     // if game won, break from loop
  45.                     break;
  46.                 } else {
  47.                     // contine loog if not won
  48.                     continue;
  49.                 }
  50.             } else {
  51.                 // loose life if not in secret word
  52.                 lives--;
  53.                 System.out.println("Oops! wrong guess: " + wordProgress);
  54.             }
  55.         }
  56.  
  57.         if (lives > 0) {
  58.             // won the game with remaining lives > 0
  59.             System.out.println("Congrats!!");
  60.         } else {
  61.             // game lost
  62.             System.out.println("Game Over!");
  63.         }
  64.  
  65.     }
  66.  
  67.     /**
  68.      * returns a boolean True if all the letters in secretWord are in lettersGuessed
  69.      * loop through the letters of secretWord.
  70.      *
  71.      * @param secretWord
  72.      * @param lettersGuessed
  73.      * @return
  74.      */
  75.     static boolean checkGameWon(String secretWord, ArrayList<Character> lettersGuessed) {
  76.         // replace guessed chars in secret word by space
  77.         for (Character c : lettersGuessed) {
  78.             secretWord = secretWord.replace(c, EMPTY_CHAR);
  79.         }
  80.         // remove spaces
  81.         secretWord = secretWord.trim();
  82.  
  83.         // if secret word is "", the game is won
  84.         return secretWord.length() == 0;
  85.     }
  86.  
  87.     /**
  88.      * how much of the word returns String comprised of letters and underscores
  89.      * which represent letters not yet guessed in secretWord
  90.      *
  91.      * @param secretWord
  92.      * @param lettersGuessed
  93.      * @return
  94.      */
  95.     static String getWordProgress(String secretWord, ArrayList<Character> lettersGuessed) {
  96.         String result = "";
  97.  
  98.         for (int i = 0; i < secretWord.length(); i++) {
  99.             if (lettersGuessed.contains(secretWord.charAt(i))) {
  100.                 result += secretWord.charAt(i);
  101.             } else {
  102.                 result += "_";
  103.             }
  104.             result += " ";
  105.         }
  106.         return result;
  107.     }
  108.  
  109.     /**
  110.      * letters left returns String comprised of letters that have not yet been
  111.      * guessed the letters should appear in alphabetical order
  112.      *
  113.      * @param lettersGuessed
  114.      * @return
  115.      */
  116.     static String getRemainingPossibleLetters(ArrayList<Character> lettersGuessed) {
  117.         String remaining = "abcdefghijklmnopqrstuvwxyz";
  118.  
  119.         for (Character c : lettersGuessed) {
  120.             remaining = remaining.replace(c, EMPTY_CHAR);
  121.         }
  122.  
  123.         return remaining;
  124.     }
  125.  
  126.     /**
  127.      * return true is secretWord contains guessed letter
  128.      *
  129.      * @param secretWord
  130.      * @param guessedLetter
  131.      * @return
  132.      */
  133.     static boolean isCharInWord(String secretWord, Character guessedLetter) {
  134.  
  135.         // here we replace (if available) guessed letter in secret word
  136.         // by an empty char, resulting word would not be equal to secret word
  137.         // example: secretWord = test -- --
  138.         // guessedLetter = 't' -->
  139.         // result= true (resulting word :"es" not equal "test")
  140.         // guessedLetter = 'a' -->
  141.         // result= false (resulting word: "test" equal "test")
  142.         return !secretWord.equals(secretWord.replace(guessedLetter, EMPTY_CHAR));
  143.     }
  144.  
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement