Files
public-project/Game.java
T
2026-04-14 20:07:23 +03:30

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);
}
}