This commit is contained in:
Alperen
2022-02-10 11:12:17 +01:00
parent 7fcd2112e6
commit 9c8d2bcb2b
7 changed files with 384 additions and 228 deletions

33
GUI.java Normal file
View File

@@ -0,0 +1,33 @@
/**
* 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;
}
}

38
Game.java Normal file
View File

@@ -0,0 +1,38 @@
/**
* 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

@@ -17,126 +17,126 @@
*/ */
public class Queue<ContentType> { public class Queue<ContentType> {
/* --------- Anfang der privaten inneren Klasse -------------- */ /* --------- Anfang der privaten inneren Klasse -------------- */
private class QueueNode { private class QueueNode {
private ContentType content = null; private ContentType content = null;
private QueueNode nextNode = null; private QueueNode nextNode = null;
/** /**
* Ein neues Objekt vom Typ QueueNode<ContentType> wird erschaffen. * Ein neues Objekt vom Typ QueueNode<ContentType> wird erschaffen.
* Der Inhalt wird per Parameter gesetzt. Der Verweis ist leer. * Der Inhalt wird per Parameter gesetzt. Der Verweis ist leer.
* *
* @param pContent das Inhaltselement des Knotens vom Typ ContentType * @param pContent das Inhaltselement des Knotens vom Typ ContentType
*/ */
public QueueNode(ContentType pContent) { public QueueNode(ContentType pContent) {
content = pContent; content = pContent;
nextNode = null; nextNode = null;
} }
/** /**
* Der Verweis wird auf das Objekt, das als Parameter uebergeben wird, * Der Verweis wird auf das Objekt, das als Parameter uebergeben wird,
* gesetzt. * gesetzt.
* *
* @param pNext der Nachfolger des Knotens * @param pNext der Nachfolger des Knotens
*/ */
public void setNext(QueueNode pNext) { public void setNext(QueueNode pNext) {
nextNode = pNext; nextNode = pNext;
} }
/** /**
* Liefert das naechste Element des aktuellen Knotens. * Liefert das naechste Element des aktuellen Knotens.
* *
* @return das Objekt vom Typ QueueNode, auf das der aktuelle Verweis zeigt * @return das Objekt vom Typ QueueNode, auf das der aktuelle Verweis zeigt
*/ */
public QueueNode getNext() { public QueueNode getNext() {
return nextNode; return nextNode;
} }
/** /**
* Liefert das Inhaltsobjekt des Knotens vom Typ ContentType. * Liefert das Inhaltsobjekt des Knotens vom Typ ContentType.
* *
* @return das Inhaltsobjekt des Knotens * @return das Inhaltsobjekt des Knotens
*/ */
public ContentType getContent() { public ContentType getContent() {
return content; return content;
} }
} }
/* ----------- Ende der privaten inneren Klasse -------------- */ /* ----------- Ende der privaten inneren Klasse -------------- */
private QueueNode head; private QueueNode head;
private QueueNode tail; private QueueNode tail;
/** /**
* Eine leere Schlange wird erzeugt. * Eine leere Schlange wird erzeugt.
* Objekte, die in dieser Schlange verwaltet werden, muessen vom Typ * Objekte, die in dieser Schlange verwaltet werden, muessen vom Typ
* ContentType sein. * ContentType sein.
*/ */
public Queue() { public Queue() {
head = null; head = null;
tail = null; tail = null;
} }
/** /**
* Die Anfrage liefert den Wert true, wenn die Schlange keine Objekte enthaelt, * Die Anfrage liefert den Wert true, wenn die Schlange keine Objekte enthaelt,
* sonst liefert sie den Wert false. * sonst liefert sie den Wert false.
* *
* @return true, falls die Schlange leer ist, sonst false * @return true, falls die Schlange leer ist, sonst false
*/ */
public boolean isEmpty() { public boolean isEmpty() {
return head == null; return head == null;
} }
/** /**
* Das Objekt pContentType wird an die Schlange angehaengt. * Das Objekt pContentType wird an die Schlange angehaengt.
* Falls pContentType gleich null ist, bleibt die Schlange unveraendert. * Falls pContentType gleich null ist, bleibt die Schlange unveraendert.
* *
* @param pContent * @param pContent
* das anzuhaengende Objekt vom Typ ContentType * das anzuhaengende Objekt vom Typ ContentType
*/ */
public void enqueue(ContentType pContent) { public void enqueue(ContentType pContent) {
if (pContent != null) { if (pContent != null) {
QueueNode newNode = new QueueNode(pContent); QueueNode newNode = new QueueNode(pContent);
if (this.isEmpty()) { if (this.isEmpty()) {
head = newNode; head = newNode;
tail = newNode; tail = newNode;
} else { } else {
tail.setNext(newNode); tail.setNext(newNode);
tail = newNode; tail = newNode;
} }
} }
} }
/** /**
* Das erste Objekt wird aus der Schlange entfernt. * Das erste Objekt wird aus der Schlange entfernt.
* Falls die Schlange leer ist, wird sie nicht veraendert. * Falls die Schlange leer ist, wird sie nicht veraendert.
*/ */
public void dequeue() { public void dequeue() {
if (!this.isEmpty()) { if (!this.isEmpty()) {
head = head.getNext(); head = head.getNext();
if (this.isEmpty()) { if (this.isEmpty()) {
head = null; head = null;
tail = null; tail = null;
} }
} }
} }
/** /**
* Die Anfrage liefert das erste Objekt der Schlange. * Die Anfrage liefert das erste Objekt der Schlange.
* Die Schlange bleibt unveraendert. * Die Schlange bleibt unveraendert.
* Falls die Schlange leer ist, wird null zurueckgegeben. * Falls die Schlange leer ist, wird null zurueckgegeben.
* *
* @return das erste Objekt der Schlange vom Typ ContentType oder null, * @return das erste Objekt der Schlange vom Typ ContentType oder null,
* falls die Schlange leer ist * falls die Schlange leer ist
*/ */
public ContentType front() { public ContentType front() {
if (this.isEmpty()) { if (this.isEmpty()) {
return null; return null;
} else { } else {
return head.getContent(); return head.getContent();
} }
} }
} }

View File

@@ -244,16 +244,16 @@ public abstract class Server
public boolean isOpen() public boolean isOpen()
{ {
return(connectionHandler.active); return(connectionHandler.active);
} }
public boolean isConnectedTo(String pClientIP, int pClientPort) public boolean isConnectedTo(String pClientIP, int pClientPort)
{ {
ClientMessageHandler aMessageHandler = findClientMessageHandler(pClientIP, pClientPort); ClientMessageHandler aMessageHandler = findClientMessageHandler(pClientIP, pClientPort);
if (aMessageHandler != null) if (aMessageHandler != null)
return(aMessageHandler.active); return(aMessageHandler.active);
else else
return(false); return(false);
} }
public void send(String pClientIP, int pClientPort, String pMessage) public void send(String pClientIP, int pClientPort, String pMessage)
@@ -265,15 +265,15 @@ public abstract class Server
public void sendToAll(String pMessage) public void sendToAll(String pMessage)
{ {
synchronized(messageHandlers) synchronized(messageHandlers)
{ {
messageHandlers.toFirst(); messageHandlers.toFirst();
while (messageHandlers.hasAccess()) while (messageHandlers.hasAccess())
{ {
messageHandlers.getContent().send(pMessage); messageHandlers.getContent().send(pMessage);
messageHandlers.next(); messageHandlers.next();
} }
} }
} }
public void closeConnection(String pClientIP, int pClientPort) public void closeConnection(String pClientIP, int pClientPort)
@@ -294,15 +294,15 @@ public abstract class Server
synchronized(messageHandlers) synchronized(messageHandlers)
{ {
ClientMessageHandler aMessageHandler; ClientMessageHandler aMessageHandler;
messageHandlers.toFirst(); messageHandlers.toFirst();
while (messageHandlers.hasAccess()) while (messageHandlers.hasAccess())
{ {
aMessageHandler = messageHandlers.getContent(); aMessageHandler = messageHandlers.getContent();
processClosingConnection(aMessageHandler.getClientIP(), aMessageHandler.getClientPort()); processClosingConnection(aMessageHandler.getClientIP(), aMessageHandler.getClientPort());
aMessageHandler.close(); aMessageHandler.close();
messageHandlers.remove(); messageHandlers.remove();
} }
} }
} }
@@ -314,46 +314,46 @@ public abstract class Server
private void addNewClientMessageHandler(Socket pClientSocket) private void addNewClientMessageHandler(Socket pClientSocket)
{ {
synchronized(messageHandlers) synchronized(messageHandlers)
{ {
messageHandlers.append(new Server.ClientMessageHandler(pClientSocket)); messageHandlers.append(new Server.ClientMessageHandler(pClientSocket));
} }
} }
private void removeClientMessageHandler(ClientMessageHandler pClientMessageHandler) private void removeClientMessageHandler(ClientMessageHandler pClientMessageHandler)
{ {
synchronized(messageHandlers) synchronized(messageHandlers)
{ {
messageHandlers.toFirst(); messageHandlers.toFirst();
while (messageHandlers.hasAccess()) while (messageHandlers.hasAccess())
{ {
if (pClientMessageHandler == messageHandlers.getContent()) if (pClientMessageHandler == messageHandlers.getContent())
{ {
messageHandlers.remove(); messageHandlers.remove();
return; return;
} }
else else
messageHandlers.next(); messageHandlers.next();
} }
} }
} }
private ClientMessageHandler findClientMessageHandler(String pClientIP, int pClientPort) private ClientMessageHandler findClientMessageHandler(String pClientIP, int pClientPort)
{ {
synchronized(messageHandlers) synchronized(messageHandlers)
{ {
ClientMessageHandler aMessageHandler; ClientMessageHandler aMessageHandler;
messageHandlers.toFirst(); messageHandlers.toFirst();
while (messageHandlers.hasAccess()) while (messageHandlers.hasAccess())
{ {
aMessageHandler = messageHandlers.getContent(); aMessageHandler = messageHandlers.getContent();
if (aMessageHandler.getClientIP().equals(pClientIP) && aMessageHandler.getClientPort() == pClientPort) if (aMessageHandler.getClientIP().equals(pClientIP) && aMessageHandler.getClientPort() == pClientPort)
return (aMessageHandler); return (aMessageHandler);
messageHandlers.next(); messageHandlers.next();
} }
return (null); return (null);
} }
} }
} }

67
User.java Normal file
View File

@@ -0,0 +1,67 @@
/**
* 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;
}
}

View File

@@ -4,14 +4,14 @@
*/ */
public class WordleServer extends Server { public class WordleServer extends Server {
public static final int DEFAULT_PORT = 1000; public static final int DEFAULT_PORT = 1000;
public static void main( String[] args ) { public static void main( String[] args ) {
new WordleServer(); new WordleServer();
} }
private DatabaseConnector db; private DatabaseConnector db;
public WordleServer() { public WordleServer() {
@@ -26,17 +26,17 @@ public class WordleServer extends Server {
@Override @Override
public void processNewConnection( String pClientIP, int pClientPort ) { public void processNewConnection( String pClientIP, int pClientPort ) {
System.out.println("New connection: " + pClientPort); System.out.println("New connection: " + pClientPort);
} }
@Override @Override
public void processClosingConnection( String pClientIP, int pClientPort ) { public void processClosingConnection( String pClientIP, int pClientPort ) {
System.out.println("Closed connection: " + pClientPort); System.out.println("Closed connection: " + pClientPort);
} }
@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); System.out.println("Message: " + pMessage);
} }
} }

View File

@@ -1,91 +1,109 @@
#BlueJ package file #BlueJ package file
dependency1.from=DecisionNode dependency1.from=DatabaseConnector
dependency1.to=Dataset dependency1.to=QueryResult
dependency1.type=UsesDependency dependency1.type=UsesDependency
dependency2.from=Classification dependency2.from=DatabaseConnector
dependency2.to=Dataset dependency2.to=Queue
dependency2.type=UsesDependency dependency2.type=UsesDependency
dependency3.from=Decision dependency3.from=Server
dependency3.to=Dataset dependency3.to=List
dependency3.type=UsesDependency dependency3.type=UsesDependency
dependency4.from=DecisionTreeBuilder dependency4.from=WordleServer
dependency4.to=BinaryTree dependency4.to=DatabaseConnector
dependency4.type=UsesDependency dependency4.type=UsesDependency
dependency5.from=DecisionTreeBuilder dependency5.from=Game
dependency5.to=DecisionNode dependency5.to=WordleServer
dependency5.type=UsesDependency dependency5.type=UsesDependency
dependency6.from=DecisionTreeBuilder dependency6.from=Game
dependency6.to=Classification dependency6.to=User
dependency6.type=UsesDependency dependency6.type=UsesDependency
dependency7.from=DecisionTreeBuilder dependency7.from=Game
dependency7.to=Decision dependency7.to=DatabaseConnector
dependency7.type=UsesDependency dependency7.type=UsesDependency
dependency8.from=DecisionTreeBuilder
dependency8.to=Dataset
dependency8.type=UsesDependency
editor.fx.0.height=722 editor.fx.0.height=722
editor.fx.0.width=800 editor.fx.0.width=800
editor.fx.0.x=388 editor.fx.0.x=346
editor.fx.0.y=50 editor.fx.0.y=91
objectbench.height=66 objectbench.height=96
objectbench.width=1201 objectbench.width=1201
package.divider.horizontal=0.6 package.divider.horizontal=0.6
package.divider.vertical=0.8983286908077994 package.divider.vertical=0.8476331360946746
package.editor.height=622 package.editor.height=553
package.editor.width=1078 package.editor.width=1090
package.editor.x=39 package.editor.x=39
package.editor.y=24 package.editor.y=24
package.frame.height=776 package.frame.height=776
package.frame.width=1241 package.frame.width=1241
package.numDependencies=8 package.numDependencies=7
package.numTargets=6 package.numTargets=9
package.showExtends=true package.showExtends=true
package.showUses=true package.showUses=true
project.charset=UTF-8 project.charset=UTF-8
readme.height=58 readme.height=60
readme.name=@README readme.name=@README
readme.width=47 readme.width=49
readme.x=10 readme.x=10
readme.y=10 readme.y=10
target1.height=40 target1.height=70
target1.name=Classification target1.name=DatabaseConnector
target1.showInterface=false target1.showInterface=false
target1.type=ClassTarget target1.type=ClassTarget
target1.width=210 target1.width=150
target1.x=40 target1.x=370
target1.y=460 target1.y=20
target2.height=50 target2.height=70
target2.name=Decision target2.name=QueryResult
target2.showInterface=false target2.showInterface=false
target2.type=ClassTarget target2.type=ClassTarget
target2.width=190 target2.width=120
target2.x=300 target2.x=110
target2.y=460 target2.y=80
target3.height=120 target3.height=70
target3.name=BinaryTree target3.name=User
target3.showInterface=false target3.showInterface=false
target3.type=ClassTarget target3.type=ClassTarget
target3.width=440 target3.width=120
target3.x=890 target3.x=770
target3.y=250 target3.y=50
target4.height=40 target4.height=70
target4.name=Dataset target4.name=Game
target4.showInterface=false target4.showInterface=false
target4.type=ClassTarget target4.type=ClassTarget
target4.width=270 target4.width=120
target4.x=430 target4.x=960
target4.y=30 target4.y=30
target5.height=50 target5.height=70
target5.name=DecisionNode target5.name=Server
target5.showInterface=false target5.showInterface=false
target5.type=AbstractTarget target5.type=AbstractTarget
target5.width=110 target5.width=120
target5.x=210 target5.x=770
target5.y=290 target5.y=300
target6.height=60 target6.height=70
target6.name=DecisionTreeBuilder target6.name=WordleServer
target6.showInterface=false target6.showInterface=false
target6.type=ClassTarget target6.type=ClassTarget
target6.width=270 target6.width=120
target6.x=580 target6.x=540
target6.y=230 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