forked from IF-LK-2020/wordle
parent
1a966b285f
commit
6eb5f59b50
35
Game.java
35
Game.java
|
@ -2,11 +2,13 @@ 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];
|
||||
|
@ -113,7 +115,8 @@ public class Game {
|
|||
}
|
||||
}
|
||||
|
||||
public void startGame(String word) {
|
||||
public void startGame(String word, int isWOTD) {
|
||||
this.isWOTD = isWOTD;
|
||||
System.out.println(word);
|
||||
guessCount = 0;
|
||||
this.word = word;
|
||||
|
@ -129,21 +132,47 @@ public class Game {
|
|||
}
|
||||
|
||||
public String getGuessIndex(int index) {
|
||||
return guesses[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() {
|
||||
return word;
|
||||
if (word.equals("")) {
|
||||
return null;
|
||||
}
|
||||
return "'" + word + "'";
|
||||
}
|
||||
|
||||
public int getGuessesCount() {
|
||||
|
|
37
Query.java
37
Query.java
|
@ -16,11 +16,11 @@ public class Query {
|
|||
*/
|
||||
public void pullStats(User user) {
|
||||
String[][] r;
|
||||
db.executeStatement("SELECT * FROM Stats " + "INNER JOIN won_on_n " + "ON Stats.ID = won_on_n.Stats_ID "
|
||||
+ "INNER JOIN last_Game " + "ON Stats.ID = last_Game.Stats_ID " + "WHERE user_username = '"
|
||||
+ user.getUsername() + "'");
|
||||
db.executeStatement("SELECT * FROM Stats INNER JOIN won_on_n ON Stats.ID = won_on_n.Stats_ID "
|
||||
+ "INNER JOIN last_Game ON Stats.ID = last_Game.Stats_ID WHERE user_username = '" + user.getUsername()
|
||||
+ "'");
|
||||
r = db.getCurrentQueryResult().getData();
|
||||
if (r != null && r.length != 0 && r[0].length == 21) {
|
||||
if (r != null && r.length != 0 && r[0].length == 22) {
|
||||
user.setCurrentStreak(Integer.parseInt(r[0][2]));
|
||||
user.setMaxStreak(Integer.parseInt(r[0][3]));
|
||||
user.setWinPercentage(Float.parseFloat(r[0][4]));
|
||||
|
@ -36,13 +36,15 @@ public class Query {
|
|||
}
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
try {
|
||||
user.setWonInTurnIndex(Integer.parseInt(r[0][8 + i]), i);
|
||||
} catch (NumberFormatException e) {
|
||||
user.getGame().setGuessesIndex(r[0][15 + i], i);
|
||||
}
|
||||
user.getGame().setGuessesIndex(r[0][15 + i], i);
|
||||
}
|
||||
user.getGame().setWord(r[0][20]);
|
||||
|
||||
try {
|
||||
user.getGame().setIsWOTD(Integer.parseInt(r[0][21]));
|
||||
} catch (NumberFormatException e) {
|
||||
user.getGame().setIsWOTD(0);
|
||||
}
|
||||
} else {
|
||||
System.out.println("Fehler beim Abfragen der Daten für den User " + user.getUsername());
|
||||
}
|
||||
|
@ -64,12 +66,12 @@ public class Query {
|
|||
+ user.getWonInTurnIndex(5)
|
||||
+ " WHERE Stats_ID IN( SELECT user_username FROM Stats WHERE user_username LIKE '" + user.getUsername()
|
||||
+ "')");
|
||||
db.executeStatement("UPDATE last_Game SET last_guess_1 = " + user.getGame().getGuessIndex(0) + ", last_guess_2 = "
|
||||
+ user.getGame().getGuessIndex(1) + ", last_guess_3 = " + user.getGame().getGuessIndex(2)
|
||||
+ ", last_guess_4 = " + user.getGame().getGuessIndex(3) + ", last_guess_5 = "
|
||||
+ user.getGame().getGuessIndex(4) + ", word = " + user.getGame().getWord()
|
||||
+ " WHERE Stats_ID IN( SELECT user_username FROM Stats WHERE user_username LIKE '" + user.getUsername()
|
||||
+ "')");
|
||||
db.executeStatement("UPDATE last_Game SET last_guess_1 = " + user.getGame().getGuessIndex(0)
|
||||
+ ", last_guess_2 = " + user.getGame().getGuessIndex(1) + ", last_guess_3 = "
|
||||
+ user.getGame().getGuessIndex(2) + ", last_guess_4 = " + user.getGame().getGuessIndex(3)
|
||||
+ ", last_guess_5 = " + user.getGame().getGuessIndex(4) + ", word = " + user.getGame().getWord()
|
||||
+ ", isWOTD = " + user.getGame().getIsWOTD()
|
||||
+ " WHERE Stats_ID IN( SELECT ID FROM Stats WHERE user_username LIKE '" + user.getUsername() + "')");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -105,13 +107,14 @@ public class Query {
|
|||
|
||||
/**
|
||||
* Gibt das Wordle des Tages, welches aus der Datenbank stammt, zur�ck. Ergibt
|
||||
* pro Tag immer das gleiche Wordle, aber trotzdem für jeden neuen Tag ein anderes Wort
|
||||
* pro Tag immer das gleiche Wordle, aber trotzdem für jeden neuen Tag ein
|
||||
* anderes Wort
|
||||
*
|
||||
* @return Das Wort als String
|
||||
*/
|
||||
public String getWOTD() {
|
||||
db.executeStatement("SELECT COUNT(*) FROM words");
|
||||
String [][] r = db.getCurrentQueryResult().getData();
|
||||
String[][] r = db.getCurrentQueryResult().getData();
|
||||
int words = Integer.parseInt(r[0][0]);
|
||||
Random random = new Random();
|
||||
random.setSeed((int) ChronoUnit.DAYS.between(LocalDate.ofEpochDay(0), LocalDate.now()));
|
||||
|
|
23
User.java
23
User.java
|
@ -74,16 +74,31 @@ public class User {
|
|||
|
||||
public void setCurrentStreak(int currentStreak) {
|
||||
this.currentStreak = currentStreak;
|
||||
}
|
||||
|
||||
public void updateLastDayWOTDPlayed() {
|
||||
lastDayWOTDPlayed = (int) ChronoUnit.DAYS.between(LocalDate.ofEpochDay(0), LocalDate.now());
|
||||
if (maxStreak < currentStreak) {
|
||||
maxStreak = currentStreak;
|
||||
}
|
||||
}
|
||||
|
||||
public void setMaxStreak(int maxStreak) {
|
||||
this.maxStreak = maxStreak;
|
||||
}
|
||||
|
||||
private int getTotalWins() {
|
||||
int w = 0;
|
||||
for (int i = 0; i < wonInTurn.length; i++) {
|
||||
w += wonInTurn[i];
|
||||
}
|
||||
return w;
|
||||
}
|
||||
|
||||
public void updateWinPercentage() {
|
||||
winPercentage = (int) (getTotalWins() / timesPlayed) * 100;
|
||||
}
|
||||
|
||||
public void updateLastDayWOTDPlayed() {
|
||||
lastDayWOTDPlayed = (int) ChronoUnit.DAYS.between(LocalDate.ofEpochDay(0), LocalDate.now());
|
||||
}
|
||||
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
|
|
@ -50,6 +50,7 @@ public class WordleServer extends Server {
|
|||
String connectionID = pClientIP + ":" + Integer.toString(pClientPort);
|
||||
User u = users.get(connectionID);
|
||||
u.setConnectionID(connectionID);
|
||||
u.getGame().updateGuessCount();
|
||||
if (pMessage.length() < 4) {
|
||||
send(pClientIP, pClientPort, "-ERR Command not valid in this state");
|
||||
} else {
|
||||
|
@ -57,7 +58,7 @@ public class WordleServer extends Server {
|
|||
System.out.println("Message: " + m + " State: " + u.getState());
|
||||
if (pMessage.equalsIgnoreCase("QUIT")) {
|
||||
send(pClientIP, pClientPort, "+OK Bye");
|
||||
close();
|
||||
closeConnection(pClientIP, pClientPort);
|
||||
}
|
||||
switch (u.getState()) {
|
||||
case 1:
|
||||
|
@ -82,10 +83,10 @@ public class WordleServer extends Server {
|
|||
} else if (m.equalsIgnoreCase("WOTD")) {
|
||||
if (!isToday(u.getLastDayWOTDPlayed())) {
|
||||
send(pClientIP, pClientPort, "+OK game ready");
|
||||
u.getGame().startGame(query.getWOTD());
|
||||
u.getGame().startGame(query.getWOTD(), 1);
|
||||
u.setState(2);
|
||||
u.updateLastDayWOTDPlayed();
|
||||
} else if (u.getGame().getGameStatus() == 1) {
|
||||
} else if (u.getGame().getGameStatus() == 1 && u.getGame().getIsWOTD() == 1) {
|
||||
send(pClientIP, pClientPort, "+OK Game continues");
|
||||
u.setState(2);
|
||||
u.updateLastDayWOTDPlayed();
|
||||
|
@ -93,10 +94,15 @@ public class WordleServer extends Server {
|
|||
send(pClientIP, pClientPort, "-ERR game finished");
|
||||
}
|
||||
} else if (m.equalsIgnoreCase("PLAY")) {
|
||||
if (isToday(u.getLastDayWOTDPlayed()) && u.getGame().getGameStatus() != 1) {
|
||||
u.getGame().startGame(query.getWord());
|
||||
u.setState(2);
|
||||
send(pClientIP, pClientPort, "+OK Game ready");
|
||||
if (isToday(u.getLastDayWOTDPlayed())) {
|
||||
if (u.getGame().getGameStatus() != 1) {
|
||||
u.getGame().startGame(query.getWord(), 0);
|
||||
u.setState(2);
|
||||
send(pClientIP, pClientPort, "+OK Game ready");
|
||||
} else if (u.getGame().getIsWOTD() == 0) {
|
||||
u.setState(2);
|
||||
send(pClientIP, pClientPort, "+OK Game continues");
|
||||
}
|
||||
} else {
|
||||
send(pClientIP, pClientPort, "-ERR wotd not finished");
|
||||
}
|
||||
|
@ -118,14 +124,18 @@ public class WordleServer extends Server {
|
|||
case (2):
|
||||
a += " game won";
|
||||
u.increaseWonInTurnIndex(u.getGame().getGuessesCount() - 1);
|
||||
u.setCurrentStreak(u.getCurrentStreak() + 1);
|
||||
u.setTimesPlayed(u.getTimesPlayed() + 1);
|
||||
u.updateWinPercentage();
|
||||
u.setState(3);
|
||||
break;
|
||||
case (3):
|
||||
a += " game lost";
|
||||
u.setTimesPlayed(u.getTimesPlayed() + 1);
|
||||
u.setCurrentStreak(0);
|
||||
u.updateWinPercentage();
|
||||
u.setState(3);
|
||||
break;
|
||||
default:
|
||||
a += " what";
|
||||
}
|
||||
send(pClientIP, pClientPort, a);
|
||||
} else {
|
||||
|
@ -143,7 +153,6 @@ public class WordleServer extends Server {
|
|||
int n = Integer.parseInt("0" + substring);
|
||||
String[] guesses = u.getGame().getGuesses();
|
||||
if (6 >= n && n >= 1) {
|
||||
//TODO:
|
||||
if (guesses[n - 1] != null) {
|
||||
String guess = guesses[n - 1];
|
||||
send(pClientIP, pClientPort, "+OK " + guess + " " + u.getGame().checkGuess(guess));
|
||||
|
@ -151,13 +160,13 @@ public class WordleServer extends Server {
|
|||
send(pClientIP, pClientPort, "-ERR word not typed yet");
|
||||
}
|
||||
} else if (n == 0) {
|
||||
String a = "+OK ";
|
||||
String a = "+OK";
|
||||
for (int i = 0; i < 5; i++) {
|
||||
if (guesses[i] != null) {
|
||||
a += " " + guesses[i] + " " + u.getGame().checkGuess(guesses[i]);
|
||||
send(pClientIP, pClientPort, guesses[i] + " " + u.getGame().checkGuess(guesses[i]));
|
||||
}
|
||||
}
|
||||
send(pClientIP, pClientPort, a);
|
||||
send(pClientIP, pClientPort, ".");
|
||||
}
|
||||
} else if (m.equalsIgnoreCase("EXIT")) {
|
||||
u.updateLastDayWOTDPlayed();
|
||||
|
@ -171,19 +180,28 @@ public class WordleServer extends Server {
|
|||
case 3:
|
||||
// Zwischenphase(Angemeldet)
|
||||
if (m.equalsIgnoreCase("STAT")) {
|
||||
send(pClientIP, pClientPort,
|
||||
"+OK" + '\n' + "times played: " + u.getTimesPlayed() + "\n" + "win percentage: "
|
||||
+ u.getWinPercentage() + "\n" + "current streak: " + u.getCurrentStreak() + "\n"
|
||||
+ "max streak: " + u.getMaxStreak() + "\n" + "won in 1 turn: "
|
||||
+ u.getWonInTurnIndex(0) + "\n" + "won in 2 turn: " + u.getWonInTurnIndex(1) + "\n"
|
||||
+ "won in 3 turn: " + u.getWonInTurnIndex(2) + "\n" + "won in 4 turn: "
|
||||
+ u.getWonInTurnIndex(3) + "\n" + "won in 5 turn: " + u.getWonInTurnIndex(4) + "\n"
|
||||
+ "won in 6 turn: " + u.getWonInTurnIndex(5) + "\n" + ".");
|
||||
send(pClientIP, pClientPort, "+OK");
|
||||
send(pClientIP, pClientPort, "times played: " + u.getTimesPlayed());
|
||||
send(pClientIP, pClientPort, "times played: " + u.getTimesPlayed());
|
||||
send(pClientIP, pClientPort, "win percentage: " + u.getWinPercentage());
|
||||
send(pClientIP, pClientPort, "current streak: " + u.getCurrentStreak());
|
||||
send(pClientIP, pClientPort, "max streak: " + u.getMaxStreak());
|
||||
send(pClientIP, pClientPort, "won in 1 turn: " + u.getWonInTurnIndex(0));
|
||||
send(pClientIP, pClientPort, "won in 2 turn: " + u.getWonInTurnIndex(1));
|
||||
send(pClientIP, pClientPort, "won in 3 turn: " + u.getWonInTurnIndex(2));
|
||||
send(pClientIP, pClientPort, "won in 4 turn: " + u.getWonInTurnIndex(3));
|
||||
send(pClientIP, pClientPort, "won in 5 turn: " + u.getWonInTurnIndex(4));
|
||||
send(pClientIP, pClientPort, "won in 6 turn: " + u.getWonInTurnIndex(5));
|
||||
} else if (m.equalsIgnoreCase("PLAY")) {
|
||||
if (isToday(u.getLastDayWOTDPlayed()) && u.getGame().getGameStatus() != 1) {
|
||||
u.getGame().startGame(query.getWord());
|
||||
u.setState(2);
|
||||
send(pClientIP, pClientPort, "+OK Game ready");
|
||||
if (isToday(u.getLastDayWOTDPlayed())) {
|
||||
if (u.getGame().getGameStatus() != 1) {
|
||||
u.getGame().startGame(query.getWord(), 0);
|
||||
u.setState(2);
|
||||
send(pClientIP, pClientPort, "+OK Game ready");
|
||||
} else if (u.getGame().getIsWOTD() == 0) {
|
||||
u.setState(2);
|
||||
send(pClientIP, pClientPort, "+OK Game continues");
|
||||
}
|
||||
} else {
|
||||
send(pClientIP, pClientPort, "-ERR wotd not finished");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue