From 37736dbfad98c04bd2628b5c4854ea6f5854ffb8 Mon Sep 17 00:00:00 2001 From: Asecave <39377667+Asecave@users.noreply.github.com> Date: Fri, 25 Mar 2022 16:27:54 +0100 Subject: [PATCH] wotd finished requirement to play --- src/Game.java | 92 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 66 insertions(+), 26 deletions(-) diff --git a/src/Game.java b/src/Game.java index 4b8e91d..28425d9 100644 --- a/src/Game.java +++ b/src/Game.java @@ -48,6 +48,9 @@ public class Game { msg = msg.toLowerCase().trim(); if (msg.equals("quit")) { + if (user != null) { + saveGame(); + } send("+OK bye"); wordleServer.closeConnection(ip, port); System.exit(0); // TODO remove: Einfacher zum testen @@ -110,7 +113,11 @@ public class Game { if (result != null && result.getData().length > 0) { wordle = result.getData()[0][0].toLowerCase(); phase = GAME_PHASE; - send("+OK game ready"); + if (user != null) { + loadGame(); + } else { + send("+OK game ready"); + } } else { send("-ERR fatal error: WOTD could not be generated."); } @@ -120,7 +127,16 @@ public class Game { if (user == null) { send("-ERR not logged in."); } else { - playRandomWordle(); + databaseConnector + .executeStatement("SELECT lastFinishedWotdDay FROM User WHERE name = '" + user.getName() + "'"); + QueryResult result = databaseConnector.getCurrentQueryResult(); + if (result != null && result.getData().length > 0) { + if (result.getData()[0][0] != null && Integer.parseInt(result.getData()[0][0]) == currentDay()) { + playRandomWordle(); + } else { + send("-ERR WOTD not finished."); + } + } } } else { sendUniversalError(); @@ -144,12 +160,12 @@ public class Game { String input = result.getData()[0][0].toLowerCase(); String code = generateCode(input); - send(code); + send("+OK " + code); if (code.equals("22222")) { // und ein wordle ist 5 Buchstaben lang :D send("game won"); - wordle = null; if (user != null) { + setLastPlayedTimestamp(); user.increaseCurrentStreak(); if (user.getMaxStreak() < user.getCurrentStreak()) { user.setMaxStreak(user.getCurrentStreak()); @@ -166,6 +182,7 @@ public class Game { send("game lost"); wordle = null; if (user != null) { + setLastPlayedTimestamp(); user.setCurrentStreak(0); updateStats(); phase = END_PHASE; @@ -193,15 +210,7 @@ public class Game { } else if (msg.startsWith("exit")) { if (user != null) { - databaseConnector.executeStatement("SELECT * FROM Spielstand WHERE Username LIKE '" + user.getName() + "'"); - QueryResult result = databaseConnector.getCurrentQueryResult(); - if (result == null || result.getData().length == 0) { - databaseConnector.executeStatement("INSERT INTO Spielstand (Username) VALUES('" + user.getName() + "')"); - } - for (int i = 0; i < words.length; i++) { - databaseConnector.executeStatement("UPDATE Spielstand SET word" + (i + 1) + " = '" + words[i] - + "' WHERE Username LIKE '" + user.getName() + "'"); - } + saveGame(); phase = END_PHASE; send("+OK"); } else { @@ -216,6 +225,7 @@ public class Game { private void endPhase(String msg) { if (msg.startsWith("stat")) { + send("+OK"); send("times Played: " + user.getTimesPlayed()); @@ -228,30 +238,55 @@ public class Game { for (int i = 1; i <= 6; i++) { send("won in Turn" + i + ": " + user.getWonInTurn(i)); } + + send("."); } else if (msg.startsWith("play")) { if (wordle == null) { playRandomWordle(); } else { - databaseConnector - .executeStatement("SELECT * FROM Spielstand WHERE Username = '" + user.getName() + "'"); - QueryResult result = databaseConnector.getCurrentQueryResult(); - if (result != null && result.getData().length > 0) { - for (int i = 0; i < result.getData().length; i++) { - words[i] = result.getData()[0][i]; - if (result.getData()[0][i] == null) { - count = i - 1; - } - } - } + loadGame(); phase = GAME_PHASE; - send("+OK game ready"); } } else { sendUniversalError(); } } + private void saveGame() { + databaseConnector.executeStatement("SELECT * FROM Spielstand WHERE Username LIKE '" + user.getName() + "'"); + QueryResult result = databaseConnector.getCurrentQueryResult(); + if (result == null || result.getData().length == 0) { + databaseConnector.executeStatement("INSERT INTO Spielstand (Username) VALUES('" + user.getName() + "')"); + } + for (int i = 0; i < words.length; i++) { + databaseConnector.executeStatement("UPDATE Spielstand SET word" + (i + 1) + " = '" + words[i] + + "' WHERE Username LIKE '" + user.getName() + "'"); + } + } + + private void loadGame() { + + databaseConnector.executeStatement("SELECT * FROM Spielstand WHERE Username = '" + user.getName() + "'"); + QueryResult result = databaseConnector.getCurrentQueryResult(); + if (result != null && result.getData().length > 0) { + for (int i = 0; i < result.getData().length; i++) { + words[i] = result.getData()[0][i]; + if (result.getData()[0][i] == null) { + count = i - 1; + } + } + send("+OK game running"); + } else { + send("+OK game ready"); + } + } + + private void setLastPlayedTimestamp() { + databaseConnector.executeStatement( + "UPDATE User SET lastFinishedWotdDay = " + currentDay() + " WHERE name LIKE '" + user.getName() + "'"); + } + private void clearWords() { for (int i = 0; i < words.length; i++) { @@ -317,11 +352,16 @@ public class Game { private int getWOTDIndex() { - long days = ChronoUnit.DAYS.between(LocalDate.ofEpochDay(0), LocalDate.now()); + int days = currentDay(); int hash = ("" + days).hashCode(); return hash % 949 + 1; } + private int currentDay() { + + return (int) ChronoUnit.DAYS.between(LocalDate.ofEpochDay(0), LocalDate.now()); + } + public String getIp() { return ip;