forked from IF-LK-2020/wordle
201 lines
4.4 KiB
Java
201 lines
4.4 KiB
Java
public class Game {
|
|
private String word;
|
|
private String[] guesses;
|
|
private int guessCount;
|
|
private int isWOTD;
|
|
// 0 wenn es keinen Wert gibt, 1 wenn das letzte Spiel gewonnen wurde und 2 wenn
|
|
// es verloren wurde
|
|
private int won;
|
|
|
|
Game() {
|
|
isWOTD = 0;
|
|
word = "";
|
|
won = 0;
|
|
guesses = new String[5];
|
|
}
|
|
|
|
/**
|
|
* Vergleicht den übergebenen Guess mit dem im Spiel gespeicherten Wort und
|
|
* überprüft die Korrektheit des Parameter-Strings und gibt eine Zeichenfolge
|
|
* aus der Korrektheit der Buchstaben zurück (z.B. 10020). Speichert außerdem
|
|
* den Guess in dem Array guesses[].Gibt keine Information darüber ob das Wort
|
|
* in der Datenbank existiert oder ob es die korrekte Länge hat.
|
|
*
|
|
* @param guess ,der String mit dem Wort
|
|
* @return Eine Zahlenfolge mit der Korrektheit des Worts
|
|
*/
|
|
public String giveGuess(String g) {
|
|
String[] guess = transformToArray(g);
|
|
String[] word = transformToArray(this.word);
|
|
String s = "";
|
|
if (word.length == 5 && guess.length == 5) {
|
|
for (int i = 0; i < this.word.length(); i++) {
|
|
if (guess[i].equalsIgnoreCase(word[i])) {
|
|
word[i] = null;
|
|
s += "2";
|
|
} else {
|
|
boolean found = false;
|
|
for (int r = 0; r < word.length; r++) {
|
|
if (guess[i].equalsIgnoreCase(word[r]) && (guess[r] == null || !guess[r].equals(word[r]))) {
|
|
s += "1";
|
|
found = true;
|
|
word[r] = null;
|
|
break;
|
|
}
|
|
}
|
|
if (!found) {
|
|
s += "0";
|
|
}
|
|
}
|
|
guess[i] = null;
|
|
}
|
|
guessCount++;
|
|
storeInArray(g);
|
|
if (s.contains("22222")) {
|
|
won = 1;
|
|
stopGame();
|
|
} else if (guessCount >= 6) {
|
|
won = 2;
|
|
stopGame();
|
|
}
|
|
}
|
|
return s;
|
|
}
|
|
|
|
private String[] transformToArray(String s) {
|
|
String[] temp = new String[s.length()];
|
|
for (int i = 0; i < s.length(); i++) {
|
|
temp[i] = "" + s.charAt(i);
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
public String checkGuess(String g) {
|
|
String[] guess = transformToArray(g);
|
|
String[] word = transformToArray(this.word);
|
|
String s = "";
|
|
if (word.length == 5 && guess.length == 5) {
|
|
for (int i = 0; i < this.word.length(); i++) {
|
|
if (guess[i].equalsIgnoreCase(word[i])) {
|
|
word[i] = null;
|
|
s += "2";
|
|
} else {
|
|
boolean found = false;
|
|
for (int r = 0; r < word.length; r++) {
|
|
if (guess[i].equalsIgnoreCase(word[r]) && (guess[r] == null || !guess[r].equals(word[r]))) {
|
|
s += "1";
|
|
found = true;
|
|
word[r] = null;
|
|
break;
|
|
}
|
|
}
|
|
if (!found) {
|
|
s += "0";
|
|
}
|
|
}
|
|
guess[i] = null;
|
|
}
|
|
}
|
|
return s;
|
|
}
|
|
|
|
/**
|
|
* Speichert das Wort in der nächsten freien Stelle im Array und gibt danach
|
|
* zurück, ob das Array voll ist, d.h. das Spiel beendet werden muss
|
|
*
|
|
* @param word
|
|
* @return Boolean
|
|
*/
|
|
private void storeInArray(String word) {
|
|
for (int i = 0; i < guesses.length; i++) {
|
|
if (guesses[i] == null) {
|
|
guesses[i] = word;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void startGame(String word, int isWOTD) {
|
|
this.isWOTD = isWOTD;
|
|
System.out.println(word);
|
|
guessCount = 0;
|
|
this.word = word;
|
|
}
|
|
|
|
public void stopGame() {
|
|
word = "";
|
|
guesses = new String[guesses.length];
|
|
}
|
|
|
|
public String[] getGuesses() {
|
|
return guesses;
|
|
}
|
|
|
|
public String getGuessIndex(int index) {
|
|
if (guesses[index] != null) {
|
|
return "'" + guesses[index] + "'";
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public int getIsWOTD() {
|
|
return isWOTD;
|
|
}
|
|
|
|
public void setGuessesIndex(String guess, int index) {
|
|
guesses[index] = guess;
|
|
}
|
|
|
|
public void updateGuessCount() {
|
|
int r = 0;
|
|
for (int i = 0; i < guesses.length; i++) {
|
|
if (guesses[i] != null) {
|
|
r++;
|
|
} else {
|
|
guessCount = r;
|
|
}
|
|
}
|
|
guessCount = r;
|
|
}
|
|
|
|
public void setWord(String word) {
|
|
if (word != null) {
|
|
this.word = word;
|
|
}
|
|
}
|
|
|
|
public void setIsWOTD(int isWOTD) {
|
|
this.isWOTD = isWOTD;
|
|
}
|
|
|
|
public String getWord() {
|
|
if (word.equals("")) {
|
|
return null;
|
|
}
|
|
return "'" + word + "'";
|
|
}
|
|
|
|
public int getGuessesCount() {
|
|
return guessCount;
|
|
}
|
|
|
|
/**
|
|
* Gibt 0 zurück wenn das Spiel nicht läuft und noch kein Spiel gespielt wurde
|
|
* seitdem das Objekt existiert. Gibt 1 zurück wenn das Spiel läuft. Gibt 2
|
|
* zurück wenn das letzte beendete Spiel gewonnen wurde und kein Spiel läuft.
|
|
* Gibt 3 zurück wenn das letzte beendete Spiel verloren wurde und kein Spiel
|
|
* läuft.
|
|
*
|
|
* @return Eine Zahl von 0 bis 3
|
|
*/
|
|
public int getGameStatus() {
|
|
if (word.equals("") && won == 0) {
|
|
return 0;
|
|
}
|
|
if (!word.equals("")) {
|
|
return 1;
|
|
}
|
|
return won + 1;
|
|
}
|
|
}
|