From 02d6252537407f6953754d640af9f83b07ab36c3 Mon Sep 17 00:00:00 2001 From: maxlm128 Date: Fri, 18 Mar 2022 19:09:19 +0100 Subject: [PATCH] TODOs und Game MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ein paar TODOs für die Organisation eingefügt und an der Klasse Game gearbeitet, hauptsächlich an der Methode giveGuess() --- Game.java | 86 ++++++++++++++++++++++++++++++++++++++--------- Query.java | 43 +++++++++++++++++++++--- User.java | 5 +-- WordleServer.java | 6 ++-- 4 files changed, 114 insertions(+), 26 deletions(-) diff --git a/Game.java b/Game.java index 14b898b..0eed6ba 100644 --- a/Game.java +++ b/Game.java @@ -1,25 +1,81 @@ public class Game { - String randomWord; - String[] guesses; - //TODO: - Game() { + private String word; + private String[] guesses; - } + // TODO: + Game() { + word = ""; + } - public void startGame() { + public void startGame() { - } + } - public void startWOTD() { + /** + * 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 guess) { + String g = guess; + StringBuilder word = new StringBuilder(this.word); + String s = ""; + for (int i = 0; i < word.length(); i++) { + if (guess.charAt(0) == word.charAt(0)) { + word.deleteCharAt(0); + s += "2"; + } else { + boolean found = false; + for (int r = 0; r < word.length(); r++) { + if (r != i && guess.charAt(0) == word.charAt(r)) { + s += "1"; + found = true; + word.deleteCharAt(r); + break; + } + } + if (!found) { + s += "0"; + } + } + guess.replaceFirst(guess, ""); + } + if(storeInArray(g)) { + stopGame(); + } + return s; + } - } + /** + * Speichert das Wort in der nächsten freien Stelle im Array und gibt danach zurück, ob das Array voll ist + * + * @param word + * @return Boolean + */ + private boolean storeInArray(String word) { + for (int i = 0; i < guesses.length; i++) { + if (guesses[i] == null) { + guesses[i] = word; + return i == guesses.length - 1; + } + } + return true; + } - public boolean isGameRunning() { - return randomWord.equals("")||randomWord.equals(null); - } + public void startWOTD(String wotd) { + word = wotd; + } - private void stopGame() { + public boolean isGameRunning() { + return word.equals("") || word.equals(null); + } - } + private void stopGame() { + word = ""; + } } - diff --git a/Query.java b/Query.java index 46a2ac3..6a89a52 100644 --- a/Query.java +++ b/Query.java @@ -4,7 +4,10 @@ public class Query { Query() { db = new DatabaseConnector("", 0, "wordle.db", "", ""); } - +/** + * Speichert die Daten des Users aus der Datenbank auf dem User-Objekt + * @param user + */ public void pullStats(User user) { String[][] r; db.executeStatement("SELECT * FROM user WHERE user LIKE" + user.getUsername()); @@ -26,9 +29,12 @@ public class Query { user.setLastDayWOTDFinished(Integer.parseInt(r[11][0])); } - +/** + * Pusht die Daten des Users im Parameter auf die Datenbank + * @param user + */ public void pushStats(User user) { - +// TODO: Methode korrigieren (Update ist nicht auf den User beschränkt) db.executeStatement("UPDATE INTO Stats (current_streak," + " max_streak, " + "wins, " + "times_played, " + "won_on_1, " + "won_on_2, " + "won_on_3, " + "won_on_4, " + "won_on_5, " + "won_on_6, " + "last_day_WOTD_finished) " + "VALUES (" @@ -45,12 +51,39 @@ public class Query { + Integer.toString(user.getLastDayWOTDFinished()) + ")"); } - +/** + * Überprüft ob es den Username und das Passwort in der Datenbank gibt und gibt den Erfolg als Boolean zurück + * @param username + * @param password + * @return Ein Boolean + */ public boolean checkLogin(String username, String password) { +// TODO: Methode fertigstellen return false; } - +/** + * Gibt ein Zufälliges Wort aus der Datenbank zurück + * @return Ein Word als String + */ public String getWord() { +// TODO: Methode fertigstellen return ""; } + /** + * Gibt das Wordle des Tages, welches aus der Datenbank stammt, zurück. Ergibt pro Tag immer das gleiche Wordle. + * @return Das Wort als String + */ + public String getWOTD() { +// TODO: Methode fertigstellen + return ""; + } + /** + * Prüft ob das Wort in der Datenbank vorhanden ist + * @param word ,ein String mit dem Wort + * @return Boolean + */ + public boolean checkWord(String word) { +// TODO: Methode fertigstellen + return true; + } } diff --git a/User.java b/User.java index 9ac024f..fe51d9b 100644 --- a/User.java +++ b/User.java @@ -13,7 +13,7 @@ public class User { private Game game; public User (String pConnectionID){ - connectionID =pConnectionID; + connectionID = pConnectionID; game = new Game(); } @@ -45,9 +45,6 @@ public class User { return state; } - - - public void setWins(int wins) { this.wins = wins; } diff --git a/WordleServer.java b/WordleServer.java index b4b12c2..4921bdb 100644 --- a/WordleServer.java +++ b/WordleServer.java @@ -33,7 +33,7 @@ public class WordleServer extends Server { String connectionID = pClientIP + ":" + Integer.toString(pClientPort); User u = new User(connectionID); users.put(connectionID, u); - send(pClientIP, pClientPort, "+OK Verbindung zum Wordle Server erfolgreich aufgebaut"); + send(pClientIP, pClientPort, "+OK Connection to Wordle-Server successful"); u.setState(1); } @@ -74,7 +74,9 @@ public class WordleServer extends Server { } } } else if(m.equalsIgnoreCase("WOTD")) { - + //TODO: Prüfen, wie weit der Spieler schon mit dem Spiel ist + u.setState(2); + send(pClientIP, pClientPort, "+OK Game ready"); } else if(m.equalsIgnoreCase("PLAY")) { } else {