import java.util.Arrays; import java.util.HashSet; import java.util.Random; import java.util.Scanner; import java.util.Set; class Game { private String secretWord; private double remainingAttempts; private User currentUser; private Set guess = new HashSet<>(); private Scanner input = new Scanner(System.in); private char[] secretwordarray; public Game() { setSecretWord(); setRemainingAttempts(); setCurrentUser(); } public void setSecretWord() { WordBank a = WordBank.getObject(); secretWord = a.getRandomWord(); } public void getSecretWord() { System.out.println(secretWord); } public void setRemainingAttempts() { if (secretWord.equals("there is no word in Word Bank ")) { return; } remainingAttempts = 5.0; return; } public void getRemainingAttempts() { System.out.println(remainingAttempts); } public void setCurrentUser() { if (secretWord.equals("there is no word in Word Bank ")) { return; } AuthService a = AuthService.getObject(); currentUser = a.getlastlogin(); } public User getCurrentUser() { return (currentUser); } public void startGame(User user) { if (secretWord.equals("there is no word in Word Bank ")) { return; } secretwordarray = secretWord.toCharArray(); char[] word = secretWord.toCharArray(); int j = 0; for (int i = 0; i < secretWord.length(); i++) { j += 1; secretwordarray[i] = '_'; } displayWordState(); System.out.println("\n This word has " + j + " letters."); int z = 0; while (true) { System.out.println("\nGuess a letter: "); if (z < 1) { System.out.println("\nPRESS 0 AND GET A HINT (-3 POINTS)"); } String letter = input.nextLine(); if (letter.equals("0") && z < 1) { z += 1; if (currentUser.useHint()) { Leaderboard.getObject().updateScore(currentUser, -3); int t = 0; for (int i = 0; i < word.length; i++) { if (secretwordarray[i] != word[i]) { t += 1; } } char[] hint = new char[t]; for (int i = 0; i < word.length; i++) { if (secretwordarray[i] != word[i]) { hint[i] = word[i]; } } Random r = new Random(); int random = r.nextInt(hint.length); for (int k = 0; k < word.length; k++) { if (word[k] == hint[random]) { secretwordarray[k] = hint[random]; continue; } } displayWordState(); int h = 0; for (char w : secretwordarray) { if (w == '_') { h += 1; } } if (h == 0) { System.out.println("game over"); return; } continue; } continue; } String a = guessLetter(letter); if (a.equals("Correct guess!")) { displayWordState(); if (Arrays.equals(secretwordarray, word)) { System.out.println("You Won"); Leaderboard.getObject().updateScore(currentUser, secretWord.length()); return; } continue; } else if (a.equals("wrong choice!")) { if (secretWord.length() <= 8.0) { remainingAttempts -= 1.0; if (remainingAttempts == 4.0) { System.out.println(" __ _ "); System.out.println(" \\ \\ | | "); System.out.println(" ______\\ \\ | | "); System.out.println("|______/ / | |__"); System.out.println(" /_/ |_____"); } else if (remainingAttempts == 3.0) { System.out.println(" __ _ "); System.out.println(" \\ \\ | | ___"); System.out.println(" ______\\ \\ | | / _ \\"); System.out.println("|______/ / | |__| (_) \\ "); System.out.println(" /_/ |_____\\___/"); } else if (remainingAttempts == 2.0) { System.out.println(" __ _ "); System.out.println(" \\ \\ | | ___ ____ "); System.out.println(" ______\\ \\ | | / _ \\/ __|"); System.out.println("|______/ / | |__| (_) \\__ \\ "); System.out.println(" /_/ |_____\\___/|____/"); } else if (remainingAttempts == 1.0) { System.out.println(" __ _ "); System.out.println(" \\ \\ | | ___ ____ ___ "); System.out.println(" ______\\ \\ | | / _ \\/ __|/ _ \\"); System.out.println("|______/ / | |__| (_) \\__ \\ __/"); System.out.println(" /_/ |_____\\___/|____/\\___|"); } else if (remainingAttempts == 0.0) { System.out.println(" __ _ "); System.out.println(" \\ \\ | | ___ ____ ___ _ __ "); System.out.println(" ______\\ \\ | | / _ \\/ __|/ _ \\ |__|"); System.out.println("|______/ / | |__| (_) \\__ \\ __/ | "); System.out.println(" /_/ |_____" + "\\___/|____/" + "\\___|_| "); return; } } else if (secretWord.length() > 8.0) { remainingAttempts -= 0.5; if (remainingAttempts == 4.0 || remainingAttempts == 4.5) { System.out.println(" __ _ "); System.out.println(" \\ \\ | | "); System.out.println(" ______\\ \\ | | "); System.out.println("|______/ / | |__"); System.out.println(" /_/ |_____"); } else if (remainingAttempts == 3.0 || remainingAttempts == 3.5) { System.out.println(" __ _ "); System.out.println(" \\ \\ | | ___"); System.out.println(" ______\\ \\ | | / _ \\"); System.out.println("|______/ / | |__| (_) \\ "); System.out.println(" /_/ |_____\\___/"); } else if (remainingAttempts == 2.0 || remainingAttempts == 2.5) { System.out.println(" __ _ "); System.out.println(" \\ \\ | | ___ ____ "); System.out.println(" ______\\ \\ | | / _ \\/ __|"); System.out.println("|______/ / | |__| (_) \\__ \\ "); System.out.println(" /_/ |_____\\___/|____/"); } else if (remainingAttempts == 1.0 || remainingAttempts == 1.5) { System.out.println(" __ _ "); System.out.println(" \\ \\ | | ___ ____ ___ "); System.out.println(" ______\\ \\ | | / _ \\/ __|/ _ \\"); System.out.println("|______/ / | |__| (_) \\__ \\ __/"); System.out.println(" /_/ |_____\\___/|____/\\___|"); } else if (remainingAttempts == 0.0 || remainingAttempts == 0.5) { System.out.println(" __ _ "); System.out.println(" \\ \\ | | ___ ____ ___ _ __ "); System.out.println(" ______\\ \\ | | / _ \\/ __|/ _ \\ |__|"); System.out.println("|______/ / | |__| (_) \\__ \\ __/ | "); System.out.println(" /_/ |_____\\___/|____/\\___|_| "); return; } else { continue; } } } } } public String guessLetter(String letter) { char[] word = secretWord.toCharArray(); char lett = letter.charAt(0); if (guess.contains(lett)) { System.out.println("You have already chosen this letter. "); System.out.println("\n " + guess); return (""); } guess.add(lett); int o = 0; for (int k = 0; k < word.length; k++) { if (word[k] == lett) { secretwordarray[k] = lett; o += 1; continue; } } if (o > 0) { System.out.println("Correct guess!"); return ("Correct guess!"); } else { System.out.println("wrong choice!"); return ("wrong choice!"); } } public void displayWordState() { String wordState = ""; for (int i = 0; i < secretwordarray.length; i++) { wordState += secretwordarray[i] + " "; } System.out.println(wordState); } }