Compare commits

..

39 Commits

Author SHA1 Message Date
Asecave
6f117b6b30 wotd 2022-03-07 16:07:07 +01:00
Asecave
e203a8747c phase constants 2022-03-07 15:50:37 +01:00
Asecave
86d449cba2 login detection 2022-03-07 15:38:35 +01:00
Tim Tersch
91ed88d15d asdasda 2022-03-03 11:37:50 +01:00
Tim Tersch
8e9a9218be Merge branch 'main' of https://git.ngb.schule/Tim/wordle
# Conflicts:
#	src/Game.java
2022-03-03 11:37:41 +01:00
Tim Tersch
de0133d1b1 login angefangen 2022-03-03 11:31:11 +01:00
Alperen Semih Baldan
7d66b9c043 . 2022-03-03 11:29:46 +01:00
Alperen Semih Baldan
55fe449643 added lib and changed db 2022-03-03 11:28:20 +01:00
Tim Tersch
a5ffccc596 datendtypen geändert 2022-03-03 10:54:50 +01:00
Tim Tersch
16e4382902 Befehle 2022-03-02 13:30:28 +01:00
Alperen Semih Baldan
da1167b8d4 Guest entfernt 2022-03-02 13:25:21 +01:00
Tim Tersch
a7a4848737 Rename 2022-03-02 13:22:05 +01:00
Tim Tersch
2cf96672fc methoden für phasen 2022-03-02 13:05:29 +01:00
Alperen
98522653b2 update umlet.uxf 2022-02-20 17:51:49 +01:00
Alperen
08f6a3f68a added guest class 2022-02-20 17:44:44 +01:00
Alperen
c3e91b9ae4 Revert "Merge branch 'main' of https://git.ngb.schule/Tim/wordle"
This reverts commit ae7093a555, reversing
changes made to 9c47fb0885.
2022-02-18 00:07:18 +01:00
Alperen
ae7093a555 Merge branch 'main' of https://git.ngb.schule/Tim/wordle 2022-02-14 09:45:58 +01:00
Alperen
9c47fb0885 Update umlet.uxf 2022-02-14 09:45:55 +01:00
Tim Tersch
4419bbee88 added user table 2022-02-14 09:44:20 +01:00
Tim Tersch
f6734a51ab added lib 2022-02-14 09:36:10 +01:00
Alperen
6ca53fcd10 Merge branch 'main' of https://git.ngb.schule/Tim/wordle 2022-02-14 09:33:16 +01:00
Alperen
ed124899bb finished user class 2022-02-14 09:29:56 +01:00
Tim Tersch
e7a785f968 quit 2022-02-14 09:27:40 +01:00
Tim Tersch
e3e899908f set ip and port 2022-02-14 09:23:31 +01:00
Tim Tersch
031f73abfa Game instance for every connection 2022-02-14 09:15:13 +01:00
Tim Tersch
86119bcb6a Update umlet.uxf 2022-02-14 09:09:37 +01:00
Tim Tersch
e1103cf78e game instances 2022-02-14 08:53:01 +01:00
Tim Tersch
2278d6ae6d moved gui to different folder 2022-02-14 08:47:43 +01:00
Tim Tersch
fbfc559a45 disabled GUI 2022-02-14 08:32:31 +01:00
Asecave
755f2d5a9d letter rendering 2022-02-12 21:01:25 +01:00
Asecave
c56b0d755e fonst test 2022-02-11 20:43:46 +01:00
Asecave
b84ff5459e Readdded letter code 2022-02-11 19:31:28 +01:00
Asecave
78e83c500d Create Letter.java 2022-02-11 19:20:12 +01:00
Asecave
9fe5d3c753 Update .gitignore
Update .gitignore
2022-02-11 19:20:12 +01:00
Asecave
65a8467b89 source dir
added package declaration

removed package declaration

ist doch nicht nötig
2022-02-11 19:20:12 +01:00
Alperen
dd3713bda1 Merge remote-tracking branch 'origin/main' 2022-02-10 11:36:22 +01:00
Alperen
120b704cd2 User klasse increase fehlt 2022-02-10 11:35:59 +01:00
Tim Tersch
1500e3f4d2 square 2022-02-10 11:35:20 +01:00
Tim Tersch
f86c7805f5 main method 2022-02-10 11:22:15 +01:00
20 changed files with 874 additions and 347 deletions

4
.gitignore vendored
View File

@@ -13,7 +13,6 @@ Dokumente*
.mtj.tmp/ .mtj.tmp/
# Package Files # # Package Files #
*.jar
*.war *.war
*.nar *.nar
*.ear *.ear
@@ -26,3 +25,6 @@ hs_err_pid*
# Engine-Alpha files # Engine-Alpha files
engine-alpha.log engine-alpha.log
.classpath
.project
/bin/

View File

@@ -1,33 +0,0 @@
/**
* Beschreiben Sie hier die Klasse GUI.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class GUI
{
// Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
private int x;
/**
* Konstruktor für Objekte der Klasse GUI
*/
public GUI()
{
// Instanzvariable initialisieren
x = 0;
}
/**
* Ein Beispiel einer Methode - ersetzen Sie diesen Kommentar mit Ihrem eigenen
*
* @param y ein Beispielparameter für eine Methode
* @return die Summe aus x und y
*/
public int beispielMethode(int y)
{
// tragen Sie hier den Code ein
return x + y;
}
}

View File

@@ -1,38 +0,0 @@
/**
* Beschreiben Sie hier die Klasse Game.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Game
{
// Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
WordleServer wordleServer = new WordleServer();
User user = new User();
DatabaseConnector databaseConnector;//Datenbankverbindung aufstellen
private String wordle;
private String[] words;
private int Count;
/**
* Konstruktor für Objekte der Klasse Game
*/
public Game()
{
// Instanzvariable initialisieren
}
/**
* Ein Beispiel einer Methode - ersetzen Sie diesen Kommentar mit Ihrem eigenen
*
* @param y ein Beispielparameter für eine Methode
* @return die Summe aus x und y
*/
public int beispielMethode(int y)
{
// tragen Sie hier den Code ein
return y;
}
}

View File

@@ -1,67 +0,0 @@
/**
* Beschreiben Sie hier die Klasse User.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class User
{
// Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
private String name;
private String password;
private int timesPlayed;
private int winPercentage;
private int currentStreak;
private int maxStreak;
private int[] winInTurn;
/**
* Konstruktor für Objekte der Klasse User
*/
public User()
{
// Instanzvariable initialisieren
}
/**
* Ein Beispiel einer Methode - ersetzen Sie diesen Kommentar mit Ihrem eigenen
*
* @param y ein Beispielparameter für eine Methode
* @return die Summe aus x und y
*/
public void setPassword(String pW)
{
// tragen Sie hier den Code ein
password = pW;
}
public String getPassword()
{
return password;
}
public void setName(String pN)
{
// tragen Sie hier den Code ein
name = pN;
}
public String getName()
{
return name;
}
public void setName(String pN)
{
// tragen Sie hier den Code ein
name = pN;
}
public String getName()
{
return name;
}
}

93
gui (not in use)/GUI.java Normal file
View File

@@ -0,0 +1,93 @@
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUI extends JPanel {
private static final long serialVersionUID = 1L;
private JFrame frame;
private Letter[][] letters;
private boolean running;
private float marginRatio = 0.2f;
public GUI() {
frame = new JFrame();
frame.setSize(1000, 800);
frame.setTitle("Wordle");
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
letters = new Letter[5][6];
for (int x = 0; x < letters.length; x++) {
for (int y = 0; y < letters[0].length; y++) {
letters[x][y] = new Letter();
}
}
new Thread(new Runnable() {
@Override
public void run() {
running = true;
while (running) {
repaint();
try {
Thread.sleep(16);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
if (letters == null) {
return;
}
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setFont(new Font(null, Font.BOLD, 48));
g2d.setStroke(new BasicStroke(4));
int framew = getSize().width;
int frameh = getSize().height;
g2d.setColor(Color.DARK_GRAY);
g2d.fillRect(0, 0, framew, frameh);
int letterSize = frameh / 10;
int margin = (int) (letterSize * marginRatio);
int offsetX = framew / 2 - (5 * letterSize + 4 * margin) / 2;
int offsetY = frameh / 2 - (6 * letterSize + 5 * margin) / 2;
for (int x = 0; x < letters.length; x++) {
for (int y = 0; y < letters[0].length; y++) {
int posX = offsetX + x * (letterSize + margin);
int posY = offsetY + y * (letterSize + margin);
g2d.setColor(letters[x][y].getColor());
g2d.fillRect(posX, posY, letterSize, letterSize);
g2d.setColor(Color.BLACK);
g2d.drawRect(posX, posY, letterSize, letterSize);
String letter = "" + letters[x][y].getLetter();
int letterWidth = g2d.getFontMetrics().stringWidth(letter);
g2d.drawString(letter, posX + letterSize / 2 - letterWidth / 2, posY + letterSize / 2 + 20);
}
}
}
}

141
gui (not in use)/Guest.java Normal file
View File

@@ -0,0 +1,141 @@
/**
* Beschreiben Sie hier die Klasse User.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Guest
{
// Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
private String name;
private String password;
private float winPercentage;
private int timesPlayed;
private int currentStreak;
private int maxStreak;
private int[] wonInTurn = {0,0,0,0,0,0};
/**
* Konstruktor für Objekte der Klasse User
*/
public Guest()
{
// Instanzvariable initialisieren
}
public void setPassword(String password)
{
// tragen Sie hier den Code ein
this.password = password;
}
public String getPassword()
{
return password;
}
public void setName(String name)
{
// tragen Sie hier den Code ein
this.name = name;
}
public String getName()
{
return name;
}
public void setWinPercentage(float winPercentage)
{
// tragen Sie hier den Code ein
this.winPercentage = winPercentage;
}
public float getWinPercentage()
{
int sum = 0;
for(int i = 0;i < wonInTurn.length;i++)
{
sum += wonInTurn[i];
}
winPercentage = sum / timesPlayed;
return winPercentage;
}
public void setTimesPlayed(int timesPlayed)
{
// tragen Sie hier den Code ein
this.timesPlayed = timesPlayed;
}
public int getTimesPlayed()
{
return timesPlayed;
}
public void increaseTimesPlayed()
{
timesPlayed = timesPlayed + 1;
}
public void setCurrentStreak(int currentStreak)
{
// tragen Sie hier den Code ein
this.currentStreak = currentStreak;
}
public int getCurrentStreak()
{
return currentStreak;
}
public void increaseCurrentStreak()
{
currentStreak = currentStreak + 1;
}
public void setMaxStreak(int maxStreak)
{
this.maxStreak = maxStreak;
}
public int getMaxStreak()
{
return maxStreak;
}
public void increaseMaxStreak()
{
maxStreak = maxStreak + 1;
}
public void setWonInTurn(int row, int value)
{
this.wonInTurn[row] = value;
}
public int getWonInTurn(int row)
{
int temp = wonInTurn[row];
return temp;
}
public void increaseWonInTurn(int row)
{
int temp = getWonInTurn(row) + 1;
setWonInTurn(row, temp);
}
public int[] getWonInTurnFull()
{
return wonInTurn;
}
}

View File

@@ -0,0 +1,43 @@
import java.awt.Color;
public class Letter {
public static final byte WHITE = -1;
public static final byte GRAY = 0;
public static final byte YELLOW = 1;
public static final byte GREEN = 2;
private char letter;
private byte color;
public Letter() {
letter = 'A';
color = (byte) ((byte) (Math.random() * 4) - 1);
}
public void setColor(byte color) {
this.color = color;
}
public Color getColor() {
switch (color) {
case WHITE:
return new Color(200, 200, 200);
case GRAY:
return new Color(100, 100, 100);
case YELLOW:
return new Color(220, 220, 0);
case GREEN:
return new Color(0, 220, 0);
}
return Color.BLACK;
}
public void setLetter(char letter) {
this.letter = letter;
}
public char getLetter() {
return letter;
}
}

Binary file not shown.

View File

@@ -1,109 +0,0 @@
#BlueJ package file
dependency1.from=DatabaseConnector
dependency1.to=QueryResult
dependency1.type=UsesDependency
dependency2.from=DatabaseConnector
dependency2.to=Queue
dependency2.type=UsesDependency
dependency3.from=Server
dependency3.to=List
dependency3.type=UsesDependency
dependency4.from=WordleServer
dependency4.to=DatabaseConnector
dependency4.type=UsesDependency
dependency5.from=Game
dependency5.to=WordleServer
dependency5.type=UsesDependency
dependency6.from=Game
dependency6.to=User
dependency6.type=UsesDependency
dependency7.from=Game
dependency7.to=DatabaseConnector
dependency7.type=UsesDependency
editor.fx.0.height=722
editor.fx.0.width=800
editor.fx.0.x=346
editor.fx.0.y=91
objectbench.height=96
objectbench.width=1201
package.divider.horizontal=0.6
package.divider.vertical=0.8476331360946746
package.editor.height=553
package.editor.width=1090
package.editor.x=39
package.editor.y=24
package.frame.height=776
package.frame.width=1241
package.numDependencies=7
package.numTargets=9
package.showExtends=true
package.showUses=true
project.charset=UTF-8
readme.height=60
readme.name=@README
readme.width=49
readme.x=10
readme.y=10
target1.height=70
target1.name=DatabaseConnector
target1.showInterface=false
target1.type=ClassTarget
target1.width=150
target1.x=370
target1.y=20
target2.height=70
target2.name=QueryResult
target2.showInterface=false
target2.type=ClassTarget
target2.width=120
target2.x=110
target2.y=80
target3.height=70
target3.name=User
target3.showInterface=false
target3.type=ClassTarget
target3.width=120
target3.x=770
target3.y=50
target4.height=70
target4.name=Game
target4.showInterface=false
target4.type=ClassTarget
target4.width=120
target4.x=960
target4.y=30
target5.height=70
target5.name=Server
target5.showInterface=false
target5.type=AbstractTarget
target5.width=120
target5.x=770
target5.y=300
target6.height=70
target6.name=WordleServer
target6.showInterface=false
target6.type=ClassTarget
target6.width=120
target6.x=540
target6.y=210
target7.height=70
target7.name=List
target7.showInterface=false
target7.type=ClassTarget
target7.width=140
target7.x=390
target7.y=380
target8.height=70
target8.name=GUI
target8.showInterface=false
target8.type=ClassTarget
target8.width=120
target8.x=630
target8.y=80
target9.height=60
target9.name=Queue
target9.showInterface=false
target9.type=ClassTarget
target9.width=120
target9.x=80
target9.y=380

179
src/Game.java Normal file
View File

@@ -0,0 +1,179 @@
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class Game {
private static final int LOGIN_PHASE = 0;
private static final int GAME_PHASE = 1;
private static final int END_PHASE = 2;
WordleServer wordleServer;
User user;
static DatabaseConnector databaseConnector;// Datenbankverbindung aufstellen
private String ip;
private int port;
private String wordle;
private String[] words;
private int count;
private int phase;
private String tempLoginName;
static {
databaseConnector = new DatabaseConnector(null, 0, "wordle.db", null, null);
if (databaseConnector.getErrorMessage() != null) {
System.err.println(databaseConnector.getErrorMessage());
}
}
public Game(WordleServer wordleServer, String pClientIP, int pClientPort) {
this.wordleServer = wordleServer;
this.ip = pClientIP;
this.port = pClientPort;
send("+OK Hello there");
}
public void processMessage(String msg) {
msg = msg.toLowerCase().trim();
if (msg.equals("quit")) {
send("+OK bye");
wordleServer.closeConnection(ip, port);
System.exit(0); // TODO remove: Einfacher zum testen
}
switch (phase) {
case LOGIN_PHASE:
loginPhase(msg);
break;
case GAME_PHASE:
gamePhase(msg);
break;
case END_PHASE:
endPhase(msg);
break;
}
}
private void loginPhase(String msg) {
if (msg.startsWith("user ")) {
if (msg.length() <= 5) {
sendUniversalError();
return;
}
String args = msg.substring(5);
databaseConnector.executeStatement("SELECT * FROM User WHERE name = '" + args + "'");
QueryResult result = databaseConnector.getCurrentQueryResult();
if (result != null && result.getData().length > 0) {
tempLoginName = result.getData()[0][0];
send("+OK");
} else {
send("-ERR User not found.");
}
} else if (msg.startsWith("pass ")) {
if (msg.length() <= 5) {
sendUniversalError();
return;
}
String args = msg.substring(5);
int pw = args.hashCode();
databaseConnector.executeStatement("SELECT * FROM User WHERE password = '" + pw + "' AND name = '" + tempLoginName + "'");
QueryResult result = databaseConnector.getCurrentQueryResult();
if (result != null && result.getData().length > 0) {
user = new User(tempLoginName);
send("+OK welcome");
} else {
send("-ERR login not valid");
}
} else if (msg.startsWith("wotd")) {
databaseConnector.executeStatement("SELECT word FROM words WHERE id = " + getWOTDIndex());
QueryResult result = databaseConnector.getCurrentQueryResult();
if (result != null && result.getData().length > 0) {
wordle = result.getData()[0][0];
phase = GAME_PHASE;
send("+OK game ready");
} else {
send("-ERR Fatal error: WOTD could not be generated.");
}
} else if (msg.startsWith("play")) {
if (user == null) {
send("-ERR not logged in.");
} else {
}
} else {
sendUniversalError();
}
}
private void gamePhase(String msg) {
if (msg.startsWith("send")) {
String args = msg.substring(5);
//vergleichen von wotd mit
//ja = spiel beendet und ausgabe word 11111
//nein = ausgabe 01102 oder so und pr<70>fen ob man noch ein wort eingebn kann
// ja game continues nein = game lost
} else if (msg.startsWith("info")) {
} else if (msg.startsWith("exit")) {
}
}
private void endPhase(String msg) {
if (msg.startsWith("stat")) {
} else if (msg.startsWith("play")) {
}
}
private void send(String msg) {
wordleServer.send(ip, port, msg);
}
private void sendUniversalError() {
send("-ERR command not valid in this state");
}
private int getWOTDIndex() {
long days = ChronoUnit.DAYS.between(LocalDate.ofEpochDay(0), LocalDate.now());
int hash = ("" + days).hashCode();
return hash % 949 + 1;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
}

154
src/User.java Normal file
View File

@@ -0,0 +1,154 @@
public class User {
private String name = "default";
/**
* Konstruktor für Objekte der Klasse User
*/
public User(String name)
{
setName(name);
}
public void setPassword(String password)
{
Game.databaseConnector.executeStatement("UPDATE User SET password = " + password + " Where name = " + this.name);
}
public String getPassword()
{
Game.databaseConnector.executeStatement("SELECT password FROM User Where name =" + this.name);
String result = Game.databaseConnector.getCurrentQueryResult().getData()[0][0];
return result;
}
public void setName(String name)
{
Game.databaseConnector.executeStatement("UPDATE User SET name = " + name + " Where name = " + this.name);
}
public String getName()
{
return name;
}
public void setWinPercentage(float winPercentage)
{
Game.databaseConnector.executeStatement("UPDATE User SET winPercentage = " + winPercentage + " Where name = " + this.name);
}
public float getWinPercentage()
{
Game.databaseConnector.executeStatement("SELECT winPercentage FROM User Where name =" + this.name);
String result = Game.databaseConnector.getCurrentQueryResult().getData()[0][0];
return Float.parseFloat(result);
}
public void setTimesPlayed(int timesPlayed)
{
Game.databaseConnector.executeStatement("UPDATE User SET timesPlayed = " + timesPlayed + " Where name = " + this.name);
}
public int getTimesPlayed()
{
Game.databaseConnector.executeStatement("SELECT timesPlayed FROM User Where name =" + this.name);
String result = Game.databaseConnector.getCurrentQueryResult().getData()[0][0];
return Integer.parseInt(result);
}
public void increaseTimesPlayed()
{
int temp = getTimesPlayed();
temp++;
setTimesPlayed(temp);
}
public void setCurrentStreak(int currentStreak)
{
Game.databaseConnector.executeStatement("UPDATE User SET currentStreak = " + currentStreak + " Where name = " + this.name);
}
public int getCurrentStreak()
{
Game.databaseConnector.executeStatement("SELECT currentStreak FROM User Where name =" + this.name);
String result = Game.databaseConnector.getCurrentQueryResult().getData()[0][0];
return Integer.parseInt(result);
}
public void increaseCurrentStreak()
{
int temp = getCurrentStreak();
temp++;
setCurrentStreak(temp);
}
public void setMaxStreak(int maxStreak)
{
Game.databaseConnector.executeStatement("UPDATE User SET maxStreak = " + maxStreak + " Where name = " + this.name);
}
public int getMaxStreak()
{
Game.databaseConnector.executeStatement("SELECT maxStreak FROM User Where name =" + this.name);
String result = Game.databaseConnector.getCurrentQueryResult().getData()[0][0];
return Integer.parseInt(result);
}
public void increaseMaxStreak()
{
int temp = getMaxStreak();
temp++;
setMaxStreak(temp);
}
public void setWonInTurn(int row, int value)
{
Game.databaseConnector.executeStatement("UPDATE User SET wonInTurn" + row + " = " + value + " Where name = " + this.name);
}
public int getWonInTurn(int row)
{
Game.databaseConnector.executeStatement("SELECT wonInTurn" + row + " FROM User Where name =" + this.name);
String result = Game.databaseConnector.getCurrentQueryResult().getData()[0][0];
return Integer.parseInt(result);
}
public void increaseWonInTurn(int row)
{
int temp = getWonInTurn(row) + 1;
setWonInTurn(row, temp);
}
public int[] getWonInTurnFull()
{
int[] result = {getWonInTurn(1),getWonInTurn(2),getWonInTurn(3),getWonInTurn(4),getWonInTurn(5),getWonInTurn(6)};
return result;
}
}

View File

@@ -1,10 +1,11 @@
/** /**
* Server für das WORDLE Spiel. * Server für das WORDLE Spiel.
*/ */
public class WordleServer extends Server { public class WordleServer extends Server {
public static final int DEFAULT_PORT = 1000; public static final int DEFAULT_PORT = 1000;
List<Game> games;
public static void main( String[] args ) { public static void main( String[] args ) {
new WordleServer(); new WordleServer();
@@ -22,21 +23,34 @@ public class WordleServer extends Server {
super(pPort); super(pPort);
db = new DatabaseConnector("", 0, "wordle.db", "", ""); db = new DatabaseConnector("", 0, "wordle.db", "", "");
games = new List<>();
} }
@Override @Override
public void processNewConnection( String pClientIP, int pClientPort ) { public void processNewConnection( String pClientIP, int pClientPort ) {
System.out.println("New connection: " + pClientPort); games.append(new Game(this, pClientIP, pClientPort));
} }
@Override @Override
public void processClosingConnection( String pClientIP, int pClientPort ) { public void processClosingConnection( String pClientIP, int pClientPort ) {
System.out.println("Closed connection: " + pClientPort); find(pClientIP, pClientPort);
games.remove();
} }
@Override @Override
public void processMessage( String pClientIP, int pClientPort, String pMessage ) { public void processMessage( String pClientIP, int pClientPort, String pMessage ) {
System.out.println("Message: " + pMessage); find(pClientIP, pClientPort).processMessage(pMessage);
} }
private Game find(String ip, int port) {
games.toFirst();
while (games.hasAccess()) {
Game g = games.getContent();
if (g.getIp().equals(ip) && g.getPort() == port) {
return g;
}
}
return null;
}
} }

132
src/package.bluej Normal file
View File

@@ -0,0 +1,132 @@
#BlueJ package file
dependency1.from=DatabaseConnector
dependency1.to=QueryResult
dependency1.type=UsesDependency
dependency10.from=Game
dependency10.to=DatabaseConnector
dependency10.type=UsesDependency
dependency2.from=DatabaseConnector
dependency2.to=Queue
dependency2.type=UsesDependency
dependency3.from=Server
dependency3.to=List
dependency3.type=UsesDependency
dependency4.from=WordleServer
dependency4.to=List
dependency4.type=UsesDependency
dependency5.from=WordleServer
dependency5.to=Game
dependency5.type=UsesDependency
dependency6.from=WordleServer
dependency6.to=DatabaseConnector
dependency6.type=UsesDependency
dependency7.from=User
dependency7.to=DatabaseConnector
dependency7.type=UsesDependency
dependency8.from=Game
dependency8.to=WordleServer
dependency8.type=UsesDependency
dependency9.from=Game
dependency9.to=User
dependency9.type=UsesDependency
editor.fx.0.height=1017
editor.fx.0.width=854
editor.fx.0.x=100
editor.fx.0.y=100
objectbench.height=153
objectbench.width=1656
package.divider.horizontal=0.6
package.divider.vertical=0.8272138228941684
package.editor.height=759
package.editor.width=1545
package.editor.x=0
package.editor.y=0
package.frame.height=1026
package.frame.width=1696
package.numDependencies=10
package.numTargets=11
package.showExtends=true
package.showUses=true
project.charset=windows-1252
readme.height=60
readme.name=@README
readme.width=49
readme.x=10
readme.y=10
target1.height=70
target1.name=Letter
target1.showInterface=false
target1.type=ClassTarget
target1.width=120
target1.x=10
target1.y=80
target10.height=70
target10.name=GUI
target10.showInterface=false
target10.type=ClassTarget
target10.width=120
target10.x=10
target10.y=270
target11.height=60
target11.name=Queue
target11.showInterface=false
target11.type=ClassTarget
target11.width=160
target11.x=100
target11.y=520
target2.height=70
target2.name=DatabaseConnector
target2.showInterface=false
target2.type=ClassTarget
target2.width=150
target2.x=220
target2.y=80
target3.height=60
target3.name=QueryResult
target3.showInterface=false
target3.type=ClassTarget
target3.width=100
target3.x=100
target3.y=600
target4.height=100
target4.name=Game
target4.showInterface=false
target4.type=ClassTarget
target4.width=180
target4.x=680
target4.y=320
target5.height=70
target5.name=User
target5.showInterface=false
target5.type=ClassTarget
target5.width=130
target5.x=930
target5.y=180
target6.height=70
target6.name=Server
target6.showInterface=false
target6.type=AbstractTarget
target6.width=110
target6.x=310
target6.y=500
target7.height=70
target7.name=WordleServer
target7.showInterface=false
target7.type=ClassTarget
target7.width=110
target7.x=480
target7.y=500
target8.height=70
target8.name=Guest
target8.showInterface=false
target8.type=ClassTarget
target8.width=130
target8.x=10
target8.y=180
target9.height=60
target9.name=List
target9.showInterface=false
target9.type=ClassTarget
target9.width=150
target9.x=560
target9.y=640

206
umlet.uxf
View File

@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.3.0"> <diagram program="umlet" version="14.3.0">
<zoom_level>9</zoom_level> <zoom_level>8</zoom_level>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>648</x> <x>400</x>
<y>198</y> <y>48</y>
<w>90</w> <w>80</w>
<h>27</h> <h>24</h>
</coordinates> </coordinates>
<panel_attributes>Server</panel_attributes> <panel_attributes>Server</panel_attributes>
<additional_attributes/> <additional_attributes/>
@@ -15,10 +15,10 @@
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>648</x> <x>400</x>
<y>315</y> <y>152</y>
<w>90</w> <w>80</w>
<h>27</h> <h>24</h>
</coordinates> </coordinates>
<panel_attributes>WordleServer</panel_attributes> <panel_attributes>WordleServer</panel_attributes>
<additional_attributes/> <additional_attributes/>
@@ -26,10 +26,10 @@
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>684</x> <x>432</x>
<y>216</y> <y>64</y>
<w>27</w> <w>24</w>
<h>117</h> <h>104</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;&lt;-</panel_attributes> <panel_attributes>lt=&lt;&lt;-</panel_attributes>
<additional_attributes>10.0;10.0;10.0;110.0</additional_attributes> <additional_attributes>10.0;10.0;10.0;110.0</additional_attributes>
@@ -37,45 +37,50 @@
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>171</x> <x>448</x>
<y>405</y> <y>424</y>
<w>261</w> <w>248</w>
<h>351</h> <h>384</h>
</coordinates> </coordinates>
<panel_attributes>User <panel_attributes>Guest
-- --
-name: String -name: String
-password: String -password: String
-timesPlayed: int -timesPlayed: int
-winPercentage: int -winPercentage: float
-currentStreak: int -currentStreak: int
-maxStreak: int -maxStreak: int
-wonInTurn: int[] -wonInTurn: int[]
-- --
+setPassword(String pw): void +setPassword(String password): void
+getPassword(): String +getPassword(): String
+setName(String name): void +setName(String name): void
+getName(): String +getName(): String
+setWinPercentage(float winPercentage): void
+getWinPercentage(): float
+setTimesPlayed(int timesPlayed): void +setTimesPlayed(int timesPlayed): void
+getTimesPlayed(): int +getTimesPlayed(): int
+setWinPercentage(int winPercentage): void +increaseTimesPlayed(): void
+getWinPercentage(): int
+setCurrentStreak(int currentStreak): void +setCurrentStreak(int currentStreak): void
+getCurrentStreak(): int +getCurrentStreak(): int
+increaseCurrentStreak(): void
+setMaxStreak(int maxStreak): void +setMaxStreak(int maxStreak): void
+getMaxStreak(): int +getMaxStreak(): int
+setWonInTurn(int[] wonInTurn): void +increaseMaxStreak(): void
+getWonInTurn(int turn): int</panel_attributes> +setWonInTurn(int row, int value): void
+getWonInTurn(int row): int
+increaseWonInTurn(int row): void
+getWonInTurnFull(): int</panel_attributes>
<additional_attributes/> <additional_attributes/>
</element> </element>
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>306</x> <x>96</x>
<y>297</y> <y>136</y>
<w>126</w> <w>112</w>
<h>27</h> <h>24</h>
</coordinates> </coordinates>
<panel_attributes>DatabaseConnector</panel_attributes> <panel_attributes>DatabaseConnector</panel_attributes>
<additional_attributes/> <additional_attributes/>
@@ -83,10 +88,10 @@
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>684</x> <x>432</x>
<y>333</y> <y>168</y>
<w>108</w> <w>96</w>
<h>90</h> <h>80</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
-wordleServer</panel_attributes> -wordleServer</panel_attributes>
@@ -95,13 +100,16 @@
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>558</x> <x>320</x>
<y>405</y> <y>232</y>
<w>270</w> <w>240</w>
<h>99</h> <h>88</h>
</coordinates> </coordinates>
<panel_attributes>Game <panel_attributes>Game
-- --
-ip: String
-port: int
-wordle: String -wordle: String
-words: String[] -words: String[]
-wordCount: int -wordCount: int
@@ -113,24 +121,10 @@
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>936</x> <x>48</x>
<y>405</y> <y>56</y>
<w>216</w> <w>80</w>
<h>63</h> <h>24</h>
</coordinates>
<panel_attributes>GUI
--
+setLetter(char letter): void
+setLetterColor(byte color): void</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>252</x>
<y>207</y>
<w>90</w>
<h>27</h>
</coordinates> </coordinates>
<panel_attributes>QueryResult</panel_attributes> <panel_attributes>QueryResult</panel_attributes>
<additional_attributes/> <additional_attributes/>
@@ -138,34 +132,22 @@
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>423</x> <x>536</x>
<y>396</y> <y>312</y>
<w>153</w> <w>56</w>
<h>36</h> <h>128</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
-user</panel_attributes> -guest</panel_attributes>
<additional_attributes>10.0;20.0;150.0;20.0</additional_attributes> <additional_attributes>10.0;140.0;10.0;10.0</additional_attributes>
</element> </element>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>819</x> <x>200</x>
<y>396</y> <y>136</y>
<w>135</w> <w>176</w>
<h>36</h> <h>112</h>
</coordinates>
<panel_attributes>lt=&lt;.
-gui</panel_attributes>
<additional_attributes>130.0;20.0;10.0;20.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>423</x>
<y>297</y>
<w>198</w>
<h>126</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
-databaseConnector</panel_attributes> -databaseConnector</panel_attributes>
@@ -174,35 +156,69 @@
<element> <element>
<id>UMLClass</id> <id>UMLClass</id>
<coordinates> <coordinates>
<x>936</x> <x>136</x>
<y>90</y> <y>424</y>
<w>216</w> <w>240</w>
<h>225</h> <h>392</h>
</coordinates> </coordinates>
<panel_attributes>Letter <panel_attributes>User
-- --
WHITE: byte = -1 -name: String
GRAY: byte = 0
YELLOW: byte = 1
GREEN: byte = 2
-letter: char
-color: byte
-- --
+setColor(byte color): void +setPassword(String password): void
+getColor(): byte</panel_attributes> +getPassword(): String
+setName(String name): void
+getName(): String
+setTimesPlayed(int timesPlayed): void
+getTimesPlayed(): int
+increaseTimesPlayed(): void
+setWinPercentage(float winPercentage): void
+getWinPercentage(): float
+setCurrentStreak(int currentStreak): void
+getCurrentStreak(): int
+increaseCurrentStreak(): void
+setMaxStreak(int maxStreak): void
+getMaxStreak(): int
+increaseMaxStreak(): void
+setWonInTurn(int row, int value): void
+getWonInTurn(int row): int
+getWonInTurnFull(): int</panel_attributes>
<additional_attributes/> <additional_attributes/>
</element> </element>
<element> <element>
<id>Relation</id> <id>Relation</id>
<coordinates> <coordinates>
<x>1035</x> <x>128</x>
<y>306</y> <y>152</y>
<w>117</w> <w>144</w>
<h>117</h> <h>288</h>
</coordinates> </coordinates>
<panel_attributes>lt=&lt;. <panel_attributes>lt=&lt;.
-letters: Letter[][]</panel_attributes> -databaseConnector</panel_attributes>
<additional_attributes>10.0;10.0;10.0;110.0</additional_attributes> <additional_attributes>30.0;10.0;30.0;340.0;10.0;340.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>320</x>
<y>312</y>
<w>48</w>
<h>128</h>
</coordinates>
<panel_attributes>lt=&lt;.
-user</panel_attributes>
<additional_attributes>10.0;140.0;10.0;10.0</additional_attributes>
</element>
<element>
<id>Relation</id>
<coordinates>
<x>368</x>
<y>424</y>
<w>96</w>
<h>24</h>
</coordinates>
<panel_attributes>lt=&lt;&lt;-</panel_attributes>
<additional_attributes>100.0;10.0;10.0;10.0</additional_attributes>
</element> </element>
</diagram> </diagram>

BIN
wordle.db

Binary file not shown.