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

View File

@@ -244,16 +244,16 @@ public abstract class Server
public boolean isOpen()
{
return(connectionHandler.active);
return(connectionHandler.active);
}
public boolean isConnectedTo(String pClientIP, int pClientPort)
{
ClientMessageHandler aMessageHandler = findClientMessageHandler(pClientIP, pClientPort);
ClientMessageHandler aMessageHandler = findClientMessageHandler(pClientIP, pClientPort);
if (aMessageHandler != null)
return(aMessageHandler.active);
return(aMessageHandler.active);
else
return(false);
return(false);
}
public void send(String pClientIP, int pClientPort, String pMessage)
@@ -265,15 +265,15 @@ public abstract class Server
public void sendToAll(String pMessage)
{
synchronized(messageHandlers)
{
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
messageHandlers.getContent().send(pMessage);
messageHandlers.next();
}
}
synchronized(messageHandlers)
{
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
messageHandlers.getContent().send(pMessage);
messageHandlers.next();
}
}
}
public void closeConnection(String pClientIP, int pClientPort)
@@ -294,15 +294,15 @@ public abstract class Server
synchronized(messageHandlers)
{
ClientMessageHandler aMessageHandler;
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
aMessageHandler = messageHandlers.getContent();
processClosingConnection(aMessageHandler.getClientIP(), aMessageHandler.getClientPort());
aMessageHandler.close();
messageHandlers.remove();
}
ClientMessageHandler aMessageHandler;
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
aMessageHandler = messageHandlers.getContent();
processClosingConnection(aMessageHandler.getClientIP(), aMessageHandler.getClientPort());
aMessageHandler.close();
messageHandlers.remove();
}
}
}
@@ -314,46 +314,46 @@ public abstract class Server
private void addNewClientMessageHandler(Socket pClientSocket)
{
synchronized(messageHandlers)
{
messageHandlers.append(new Server.ClientMessageHandler(pClientSocket));
}
synchronized(messageHandlers)
{
messageHandlers.append(new Server.ClientMessageHandler(pClientSocket));
}
}
private void removeClientMessageHandler(ClientMessageHandler pClientMessageHandler)
{
synchronized(messageHandlers)
{
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
if (pClientMessageHandler == messageHandlers.getContent())
{
messageHandlers.remove();
return;
}
else
messageHandlers.next();
}
}
synchronized(messageHandlers)
{
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
if (pClientMessageHandler == messageHandlers.getContent())
{
messageHandlers.remove();
return;
}
else
messageHandlers.next();
}
}
}
private ClientMessageHandler findClientMessageHandler(String pClientIP, int pClientPort)
{
synchronized(messageHandlers)
{
ClientMessageHandler aMessageHandler;
messageHandlers.toFirst();
synchronized(messageHandlers)
{
ClientMessageHandler aMessageHandler;
messageHandlers.toFirst();
while (messageHandlers.hasAccess())
{
aMessageHandler = messageHandlers.getContent();
if (aMessageHandler.getClientIP().equals(pClientIP) && aMessageHandler.getClientPort() == pClientPort)
return (aMessageHandler);
messageHandlers.next();
}
return (null);
}
while (messageHandlers.hasAccess())
{
aMessageHandler = messageHandlers.getContent();
if (aMessageHandler.getClientIP().equals(pClientIP) && aMessageHandler.getClientPort() == pClientPort)
return (aMessageHandler);
messageHandlers.next();
}
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 static final int DEFAULT_PORT = 1000;
public static final int DEFAULT_PORT = 1000;
public static void main( String[] args ) {
new WordleServer();
}
private DatabaseConnector db;
private DatabaseConnector db;
public WordleServer() {
@@ -26,17 +26,17 @@ public class WordleServer extends Server {
@Override
public void processNewConnection( String pClientIP, int pClientPort ) {
System.out.println("New connection: " + pClientPort);
System.out.println("New connection: " + pClientPort);
}
@Override
public void processClosingConnection( String pClientIP, int pClientPort ) {
System.out.println("Closed connection: " + pClientPort);
System.out.println("Closed connection: " + pClientPort);
}
@Override
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
dependency1.from=DecisionNode
dependency1.to=Dataset
dependency1.from=DatabaseConnector
dependency1.to=QueryResult
dependency1.type=UsesDependency
dependency2.from=Classification
dependency2.to=Dataset
dependency2.from=DatabaseConnector
dependency2.to=Queue
dependency2.type=UsesDependency
dependency3.from=Decision
dependency3.to=Dataset
dependency3.from=Server
dependency3.to=List
dependency3.type=UsesDependency
dependency4.from=DecisionTreeBuilder
dependency4.to=BinaryTree
dependency4.from=WordleServer
dependency4.to=DatabaseConnector
dependency4.type=UsesDependency
dependency5.from=DecisionTreeBuilder
dependency5.to=DecisionNode
dependency5.from=Game
dependency5.to=WordleServer
dependency5.type=UsesDependency
dependency6.from=DecisionTreeBuilder
dependency6.to=Classification
dependency6.from=Game
dependency6.to=User
dependency6.type=UsesDependency
dependency7.from=DecisionTreeBuilder
dependency7.to=Decision
dependency7.from=Game
dependency7.to=DatabaseConnector
dependency7.type=UsesDependency
dependency8.from=DecisionTreeBuilder
dependency8.to=Dataset
dependency8.type=UsesDependency
editor.fx.0.height=722
editor.fx.0.width=800
editor.fx.0.x=388
editor.fx.0.y=50
objectbench.height=66
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.8983286908077994
package.editor.height=622
package.editor.width=1078
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=8
package.numTargets=6
package.numDependencies=7
package.numTargets=9
package.showExtends=true
package.showUses=true
project.charset=UTF-8
readme.height=58
readme.height=60
readme.name=@README
readme.width=47
readme.width=49
readme.x=10
readme.y=10
target1.height=40
target1.name=Classification
target1.height=70
target1.name=DatabaseConnector
target1.showInterface=false
target1.type=ClassTarget
target1.width=210
target1.x=40
target1.y=460
target2.height=50
target2.name=Decision
target1.width=150
target1.x=370
target1.y=20
target2.height=70
target2.name=QueryResult
target2.showInterface=false
target2.type=ClassTarget
target2.width=190
target2.x=300
target2.y=460
target3.height=120
target3.name=BinaryTree
target2.width=120
target2.x=110
target2.y=80
target3.height=70
target3.name=User
target3.showInterface=false
target3.type=ClassTarget
target3.width=440
target3.x=890
target3.y=250
target4.height=40
target4.name=Dataset
target3.width=120
target3.x=770
target3.y=50
target4.height=70
target4.name=Game
target4.showInterface=false
target4.type=ClassTarget
target4.width=270
target4.x=430
target4.width=120
target4.x=960
target4.y=30
target5.height=50
target5.name=DecisionNode
target5.height=70
target5.name=Server
target5.showInterface=false
target5.type=AbstractTarget
target5.width=110
target5.x=210
target5.y=290
target6.height=60
target6.name=DecisionTreeBuilder
target5.width=120
target5.x=770
target5.y=300
target6.height=70
target6.name=WordleServer
target6.showInterface=false
target6.type=ClassTarget
target6.width=270
target6.x=580
target6.y=230
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