287 lines
10 KiB
Java
287 lines
10 KiB
Java
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<Character> 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);
|
|
|
|
}
|
|
|
|
}
|