forked from IF-LK-2020/wordle
Viel hinzugefügt
-Datenbank-Tabellen hinzugefügt (zum letzten Wordle-game und won_on_turn_n Tabelle) -Ifception fortgesetzt, das geben eines guesses funktioniert nun -give guess gefixt
This commit is contained in:
69
Game.java
69
Game.java
@@ -1,13 +1,15 @@
|
||||
public class Game {
|
||||
private String word;
|
||||
private String[] guesses;
|
||||
private boolean won;
|
||||
// 0 wenn es keinen Wert gibt, 1 wenn das letzte Spiel gewonnen wurde und 2 wenn
|
||||
// es verloren wurde
|
||||
private int won;
|
||||
|
||||
// TODO:
|
||||
Game() {
|
||||
word = "";
|
||||
won = false;
|
||||
guesses = new String[5];
|
||||
won = 0;
|
||||
guesses = new String[4];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -20,18 +22,18 @@ public class Game {
|
||||
* @param guess ,der String mit dem Wort
|
||||
* @return Eine Zahlenfolge mit der Korrektheit des Worts
|
||||
*/
|
||||
public String giveGuess(String guess) {
|
||||
StringBuilder g = new StringBuilder(guess);
|
||||
public String giveGuess(String g) {
|
||||
StringBuilder guess = new StringBuilder(g);
|
||||
StringBuilder word = new StringBuilder(this.word);
|
||||
String s = "";
|
||||
for (int i = 0; i < word.length(); i++) {
|
||||
if (g.charAt(0) == word.charAt(0)) {
|
||||
for (int i = 0; i < this.word.length(); i++) {
|
||||
if (guess.charAt(0) == word.charAt(0)) {
|
||||
word.deleteCharAt(0);
|
||||
s += "2";
|
||||
} else {
|
||||
boolean found = false;
|
||||
for (int r = 1; r < word.length(); r++) {
|
||||
if (g.charAt(0) == word.charAt(r)) {
|
||||
if (guess.charAt(0) == word.charAt(r)) {
|
||||
s += "1";
|
||||
found = true;
|
||||
word.deleteCharAt(r);
|
||||
@@ -42,17 +44,22 @@ public class Game {
|
||||
s += "0";
|
||||
}
|
||||
}
|
||||
g.deleteCharAt(0);
|
||||
guess.deleteCharAt(0);
|
||||
}
|
||||
if(storeInArray(g.toString())) {
|
||||
if (word.isEmpty()) {
|
||||
System.out.println("öasdlkihg");
|
||||
won = 1;
|
||||
stopGame();
|
||||
} else if (storeInArray(guess.toString())) {
|
||||
won = 2;
|
||||
stopGame();
|
||||
won = !word.isEmpty();
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Speichert das Wort in der nächsten freien Stelle im Array und gibt danach zurück, ob das Array voll ist
|
||||
* 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
|
||||
@@ -61,7 +68,7 @@ public class Game {
|
||||
for (int i = 0; i < guesses.length; i++) {
|
||||
if (guesses[i] == null) {
|
||||
guesses[i] = word;
|
||||
return i == guesses.length - 1;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@@ -75,11 +82,39 @@ public class Game {
|
||||
return !word.equals("") || !word.equals(null);
|
||||
}
|
||||
|
||||
public boolean won() {
|
||||
return won;
|
||||
}
|
||||
|
||||
private void stopGame() {
|
||||
word = "";
|
||||
guesses = new String[guesses.length - 1];
|
||||
}
|
||||
|
||||
public String[] getGuesses() {
|
||||
return guesses;
|
||||
}
|
||||
|
||||
public void setGuesses(String[] guesses) {
|
||||
this.guesses = guesses;
|
||||
}
|
||||
|
||||
public void setWord(String word) {
|
||||
this.word = word;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
|
||||
41
Query.java
41
Query.java
@@ -4,8 +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) {
|
||||
@@ -26,33 +28,31 @@ public class Query {
|
||||
wonInTurn[5] = Integer.parseInt(r[10][0]);
|
||||
user.setWonInTurn(wonInTurn);
|
||||
|
||||
user.setLastDayWOTDFinished(Integer.parseInt(r[11][0]));
|
||||
user.setLastDayWOTDPlayed(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)
|
||||
// TODO: Methode korrigieren (Update ist nicht auf den User beschränkt) und neue Tabelle lastGuesses berücksichtigen
|
||||
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 ("
|
||||
+ Integer.toString(user.getCurrentStreak())
|
||||
+ Integer.toString(user.getMaxStreak())
|
||||
+ Integer.toString(user.getWins())
|
||||
+ Integer.toString(user.getTimesPlayed())
|
||||
+ Integer.toString(user.getWonInTurnIndex(0))
|
||||
+ Integer.toString(user.getWonInTurnIndex(1))
|
||||
+ Integer.toString(user.getWonInTurnIndex(2))
|
||||
+ Integer.toString(user.getWonInTurnIndex(3))
|
||||
+ Integer.toString(user.getWonInTurnIndex(4))
|
||||
+ Integer.toString(user.getWonInTurnIndex(5))
|
||||
+ Integer.toString(user.getLastDayWOTDFinished())
|
||||
+ ")");
|
||||
+ "last_day_WOTD_finished) " + "VALUES (" + Integer.toString(user.getCurrentStreak())
|
||||
+ Integer.toString(user.getMaxStreak()) + Integer.toString(user.getWins())
|
||||
+ Integer.toString(user.getTimesPlayed()) + Integer.toString(user.getWonInTurnIndex(0))
|
||||
+ Integer.toString(user.getWonInTurnIndex(1)) + Integer.toString(user.getWonInTurnIndex(2))
|
||||
+ Integer.toString(user.getWonInTurnIndex(3)) + Integer.toString(user.getWonInTurnIndex(4))
|
||||
+ Integer.toString(user.getWonInTurnIndex(5)) + Integer.toString(user.getLastDayWOTDPlayed()) + ")");
|
||||
}
|
||||
|
||||
/**
|
||||
* Überprüft ob es den Username und das Passwort in der Datenbank gibt und gibt den Erfolg als Boolean zurück
|
||||
* Ü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
|
||||
@@ -61,24 +61,31 @@ public class Query {
|
||||
// TODO: Methode fertigstellen
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt ein Zufälliges Wort aus der Datenbank zurück
|
||||
*
|
||||
* @return Ein Word als String
|
||||
*/
|
||||
public String getWord() {
|
||||
// TODO: Methode fertigstellen
|
||||
return "12345";
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt das Wordle des Tages, welches aus der Datenbank stammt, zurück. Ergibt pro Tag immer das gleiche Wordle.
|
||||
* 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 "abcde";
|
||||
}
|
||||
|
||||
/**
|
||||
* Prüft ob das Wort in der Datenbank vorhanden ist
|
||||
*
|
||||
* @param word ,ein String mit dem Wort
|
||||
* @return Boolean
|
||||
*/
|
||||
|
||||
25
User.java
25
User.java
@@ -1,3 +1,6 @@
|
||||
import java.time.LocalDate;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
|
||||
public class User {
|
||||
private String connectionID;
|
||||
private String username;
|
||||
@@ -6,7 +9,7 @@ public class User {
|
||||
private int winPercentage;
|
||||
private int currentStreak;
|
||||
private int maxStreak;
|
||||
private int lastDayWOTDFinished;
|
||||
private int lastDayWOTDPlayed;
|
||||
private int state;
|
||||
private int wins;
|
||||
private int[] wonInTurn;
|
||||
@@ -29,8 +32,8 @@ public class User {
|
||||
return currentStreak;
|
||||
}
|
||||
|
||||
public int getLastDayWOTDFinished() {
|
||||
return lastDayWOTDFinished;
|
||||
public int getLastDayWOTDPlayed() {
|
||||
return lastDayWOTDPlayed;
|
||||
}
|
||||
|
||||
public int getMaxStreak() {
|
||||
@@ -81,8 +84,8 @@ public class User {
|
||||
this.currentStreak = currentStreak;
|
||||
}
|
||||
|
||||
public void setLastDayWOTDFinished(int lastDayWOTDFinished) {
|
||||
this.lastDayWOTDFinished = lastDayWOTDFinished;
|
||||
public void updateLastDayWOTDPlayed() {
|
||||
lastDayWOTDPlayed = (int) ChronoUnit.DAYS.between(LocalDate.ofEpochDay(0), LocalDate.now());
|
||||
}
|
||||
|
||||
public void setMaxStreak(int maxStreak) {
|
||||
@@ -120,4 +123,16 @@ public class User {
|
||||
public boolean loggedIn() {
|
||||
return password != null && username != null;
|
||||
}
|
||||
|
||||
public String[] getLastGuesses() {
|
||||
return game.getGuesses();
|
||||
}
|
||||
|
||||
public void setLastGuesses(String[] guesses) {
|
||||
game.setGuesses(guesses);
|
||||
}
|
||||
|
||||
public void setLastDayWOTDPlayed(int time) {
|
||||
lastDayWOTDPlayed = time;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,8 +14,6 @@ public class WordleServer extends Server {
|
||||
new WordleServer();
|
||||
}
|
||||
|
||||
private DatabaseConnector db;
|
||||
|
||||
private HashMap<String, User> users;
|
||||
private Query query;
|
||||
|
||||
@@ -26,7 +24,6 @@ public class WordleServer extends Server {
|
||||
public WordleServer(int pPort) {
|
||||
super(pPort);
|
||||
query = new Query();
|
||||
db = new DatabaseConnector("", 0, "wordle.db", "", "");
|
||||
users = new HashMap<>();
|
||||
}
|
||||
|
||||
@@ -42,7 +39,11 @@ public class WordleServer extends Server {
|
||||
|
||||
@Override
|
||||
public void processClosingConnection(String pClientIP, int pClientPort) {
|
||||
|
||||
String connectionID = pClientIP + ":" + Integer.toString(pClientPort);
|
||||
User u = users.get(connectionID);
|
||||
if (u.loggedIn()) {
|
||||
query.pushStats(u);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -56,7 +57,7 @@ public class WordleServer extends Server {
|
||||
} else {
|
||||
String m = pMessage.substring(0, 4);
|
||||
System.out.println("Message: " + m + " State: " + u.getState());
|
||||
if (pMessage.equals("QUIT")) {
|
||||
if (pMessage.equalsIgnoreCase("QUIT")) {
|
||||
send(pClientIP, pClientPort, "+OK Bye");
|
||||
close();
|
||||
}
|
||||
@@ -73,7 +74,6 @@ public class WordleServer extends Server {
|
||||
if (u.getPassword() != null && u.getUsername() != null) {
|
||||
if (query.checkLogin(u.getUsername(), u.getPassword())) {
|
||||
send(pClientIP, pClientPort, "+OK welcome");
|
||||
u.setState(3);
|
||||
} else {
|
||||
u.setPassword("");
|
||||
u.setUsername("");
|
||||
@@ -81,10 +81,18 @@ public class WordleServer extends Server {
|
||||
}
|
||||
}
|
||||
} else if (m.equalsIgnoreCase("WOTD")) {
|
||||
// TODO: Prüfen, wie weit der Spieler schon mit dem Spiel ist
|
||||
if (!isToday(u.getLastDayWOTDPlayed())) {
|
||||
send(pClientIP, pClientPort, "+OK game ready");
|
||||
u.getGame().startGame(query.getWOTD());
|
||||
u.setState(2);
|
||||
send(pClientIP, pClientPort, "+OK Game ready");
|
||||
u.updateLastDayWOTDPlayed();
|
||||
} else if (u.getGame().getGameStatus() == 1) {
|
||||
send(pClientIP, pClientPort, "+OK Game continues");
|
||||
u.setState(2);
|
||||
u.updateLastDayWOTDPlayed();
|
||||
} else {
|
||||
send(pClientIP, pClientPort, "-ERR game finished");
|
||||
}
|
||||
} else {
|
||||
send(pClientIP, pClientPort, "-ERR Command not valid in this state");
|
||||
}
|
||||
@@ -96,14 +104,19 @@ public class WordleServer extends Server {
|
||||
if (m.length() == 5) {
|
||||
if (query.checkWord(m)) {
|
||||
String a = "+OK " + u.getGame().giveGuess(m);
|
||||
if(!u.getGame().isGameRunning()) {
|
||||
if(u.getGame().won()) {
|
||||
a += " game won";
|
||||
} else {
|
||||
a += " game lost";
|
||||
}
|
||||
} else {
|
||||
System.out.println(u.getGame().getGameStatus());
|
||||
switch (u.getGame().getGameStatus()) {
|
||||
case (1):
|
||||
a += " game continues";
|
||||
break;
|
||||
case (2):
|
||||
a += " game won";
|
||||
u.setState(3);
|
||||
break;
|
||||
case (3):
|
||||
a += " game lost";
|
||||
u.setState(3);
|
||||
break;
|
||||
}
|
||||
send(pClientIP, pClientPort, a);
|
||||
} else {
|
||||
@@ -137,7 +150,7 @@ public class WordleServer extends Server {
|
||||
+ u.getWonInTurnIndex(4) + '\n' + "won in 5 turn: " + u.getWonInTurnIndex(5) + '\n'
|
||||
+ "won in 6 turn: " + u.getWonInTurnIndex(6) + '\n' + ".");
|
||||
} else if (m.equalsIgnoreCase("PLAY")) {
|
||||
if (isToday(u.getLastDayWOTDFinished())) {
|
||||
if (isToday(u.getLastDayWOTDPlayed()) && u.getGame().getGameStatus() != 1) {
|
||||
u.getGame().startGame(query.getWord());
|
||||
u.setState(2);
|
||||
send(pClientIP, pClientPort, "+OK Game ready");
|
||||
@@ -150,11 +163,10 @@ public class WordleServer extends Server {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean isToday(int pDay) {
|
||||
LocalDate now = LocalDate.now();
|
||||
LocalDate epoch = LocalDate.ofEpochDay(0);
|
||||
return pDay == ChronoUnit.DAYS.between(epoch, now);
|
||||
return pDay == (int) ChronoUnit.DAYS.between(LocalDate.ofEpochDay(0), LocalDate.now());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user