diff --git a/.DS_Store b/.DS_Store index decf7a6..d111a3b 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Domain/Exceptions/EmptyListException.java b/Domain/Exceptions/EmptyListException.java new file mode 100644 index 0000000..c3f929a --- /dev/null +++ b/Domain/Exceptions/EmptyListException.java @@ -0,0 +1,13 @@ +/* +============================================================ +This is the "EmptyListException" file from Author: Philipp Kotte +written on: 16 / 10 / 2023 at: 07:54 +============================================================ +*/ +package Domain.Exceptions; + +public class EmptyListException extends SpielException { + public EmptyListException(String message) { + super(10, message); + } +} diff --git a/Domain/Exceptions/SpielException.java b/Domain/Exceptions/SpielException.java new file mode 100644 index 0000000..2029354 --- /dev/null +++ b/Domain/Exceptions/SpielException.java @@ -0,0 +1,65 @@ +/* +============================================================ +This is the "SpielException" file from Author: Philipp Kotte +written on: 16 / 10 / 2023 at: 07:42 +============================================================ +*/ +package Domain.Exceptions; + +public abstract class SpielException extends Exception { + /*------------------------------------------*/ + // statische Konstanten + /*------------------------------------------*/ + + /*------------------------------------------*/ + // statische Attribute(zB. zähler) + /*------------------------------------------*/ + + /*------------------------------------------*/ + // Attribute jedes Objektes + /*------------------------------------------*/ + private String message; + private int id; + + /*------------------------------------------*/ + // Konstruktoren (default und spezifische) + /*------------------------------------------*/ + public SpielException() { + } + + public SpielException(int id, String message) { + + } + + public SpielException(String message) { + + } + + /*------------------------------------------*/ + // statische Methoden + /*------------------------------------------*/ + + /*------------------------------------------*/ + // Getter und Setter + /*------------------------------------------*/ + + /*------------------------------------------*/ + // @Overrides + /*------------------------------------------*/ + + public String getMessage() { + return this.message; + } + + public int getID() { + return this.id; + } + + /*------------------------------------------*/ + // öffentliche Methodes + /*------------------------------------------*/ + + /*------------------------------------------*/ + // Hilfsmethoden (privat) + /*------------------------------------------*/ +} diff --git a/Domain/Exceptions/SpielerNotFoundException.java b/Domain/Exceptions/SpielerNotFoundException.java new file mode 100644 index 0000000..a3346f6 --- /dev/null +++ b/Domain/Exceptions/SpielerNotFoundException.java @@ -0,0 +1,15 @@ +/* +============================================================ +This is the "SpielerNotFoundException" file from Author: Philipp Kotte +written on: 16 / 10 / 2023 at: 07:50 +============================================================ +*/ +package Domain.Exceptions; + +public class SpielerNotFoundException extends SpielException { + + public SpielerNotFoundException(String message) { + super(1, message); + } + +} diff --git a/Domain/Spieler.java b/Domain/Spieler.java index 99a7c84..c118989 100644 --- a/Domain/Spieler.java +++ b/Domain/Spieler.java @@ -10,7 +10,7 @@ import Domain.Enums.Geschlecht; import java.io.Serializable; -public class Spieler implements Serializable { +public class Spieler extends Object implements Serializable { /*------------------------------------------*/ // statische Konstanten @@ -168,11 +168,6 @@ public class Spieler implements Serializable { return "ID: " + this.id + " Name: " + this.name + " (" + this.geschlecht + ")"; } - public boolean equals(Spieler spieler) { - return this.id == spieler.getId() && this.geschlecht == spieler.getGeschlecht() - && this.name.equals(spieler.getName()); - } - /*------------------------------------------*/ // öffentliche Methodes /*------------------------------------------*/ diff --git a/Facade/Spiel.java b/Facade/Spiel.java index ddddb99..c5ac7ac 100644 --- a/Facade/Spiel.java +++ b/Facade/Spiel.java @@ -14,6 +14,8 @@ import Domain.Spieler; import Domain.Stich; import Domain.Block.Block; import Domain.Enums.Geschlecht; +import Domain.Exceptions.EmptyListException; +import Domain.Exceptions.SpielerNotFoundException; import Domain.Karten.Karte; public class Spiel implements Serializable { @@ -22,6 +24,11 @@ public class Spiel implements Serializable { // statische Konstanten /*--------------------------------------------------------*/ + private static final String ANSI_RESET = "\u001B[0m"; + private static final String ANSI_GREEN = "\u001B[32m"; + private static final String ANSI_RED = "\u001B[31m"; + public static final String ANSI_BLUE = "\u001B[34m"; + /*--------------------------------------------------------*/ // statische Attribute(zB. zähler) /*--------------------------------------------------------*/ @@ -91,11 +98,20 @@ public class Spiel implements Serializable { if (this.spieler.size() == 0) { text += "Noch keine Spieler vorhanden \n"; } else { - for (int i = 0; i < this.spieler.size(); i++) { - text += "Spieler " + (i + 1) + ": " + this.spieler.get(i + 1).getName() + " (" - + this.spieler.get(i + 1).getGeschlecht() + ")" + "\n"; + for (Spieler s : this.spieler.values()) { + text += "[" + s.getId() + "] " + s.getName() + " (" + + s.getGeschlecht() + ")" + "\n"; + } } + for (int i = 0; i < this.id_check.length; i++) { + if (this.id_check[i]) { + text += "idcheck" + ANSI_BLUE + " [" + i + "] " + ANSI_GREEN + this.id_check[i] + ANSI_RESET + " \n"; + } else { + text += "idcheck" + ANSI_BLUE + " [" + i + "] " + ANSI_RED + this.id_check[i] + ANSI_RESET + " \n"; + } + + } text += footer; return text; } @@ -113,16 +129,32 @@ public class Spiel implements Serializable { Spieler temp = new Spieler(id, name, geschlecht); this.spieler.put(id, temp); System.out.println(this.spieler.get(id)); + if (this.spielerAmZug == null) { + this.spielerAmZug = temp; + } + updateSpielerAmZug(); } - public void removeSpieler(int id_spieler) { - this.spieler.remove(id_spieler); + public void removeSpieler(int id_spieler) throws SpielerNotFoundException, EmptyListException, RuntimeException { + if (this.spieler.containsKey(id_spieler)) { + this.spieler.remove(id_spieler); + this.id_check[id_spieler - 1] = false; + } else if (!this.spieler.containsKey(id_spieler)) { + throw new SpielerNotFoundException("Dieser Spieler existiert nicht"); + } else if (this.spieler.values().size() == 0) { + throw new EmptyListException("Dise Liste ist Leer."); + } else { + throw new RuntimeException("Unkown Error"); + } + updateSpielerAmZug(); } public String[] getAlleSpieler() { String[] spieler_text = new String[this.spieler.size()]; - for (int i = 0; i < this.spieler.size(); i++) { - spieler_text[i] = this.spieler.get(i + 1).toString(); + int zähler = 0; + for (Spieler s : this.spieler.values()) { + spieler_text[zähler] = s.toString(); + zähler++; } return spieler_text; } @@ -197,8 +229,10 @@ public class Spiel implements Serializable { stich.getKarten(); } - private void spieler() { - + private void updateSpielerAmZug() { + if (this.spieler.size() >= 1) { + this.spielerAmZug = (Spieler) this.spieler.values().toArray()[0]; + } } } \ No newline at end of file diff --git a/UI/SpielCLI.java b/UI/SpielCLI.java index 41ad74c..c40479c 100644 --- a/UI/SpielCLI.java +++ b/UI/SpielCLI.java @@ -10,11 +10,18 @@ package UI; import Facade.Spiel; import Domain.Spieler; import Domain.Enums.Geschlecht; +import Domain.Exceptions.EmptyListException; +import Domain.Exceptions.SpielerNotFoundException; import java.util.Scanner; public class SpielCLI { + private static final String ANSI_RESET = "\u001B[0m"; + private static final String ANSI_GREEN = "\u001B[32m"; + private static final String ANSI_RED = "\u001B[31m"; + public static final String ANSI_BLUE = "\u001B[34m"; + Scanner sc = new Scanner(System.in); private Spiel spiel; @@ -26,14 +33,13 @@ public class SpielCLI { public void hauptmenue() { System.out.println("Hallo Wanderer"); mainloop: while (true) { - System.out.println(""); - System.out.println("Was sillst du tun"); - System.out.println("--------Hauptmenü--------"); - System.out.println("-1- Spiel starten"); - System.out.println("-2- Spieler hinzufügen"); - System.out.println("-3- Spiel to String"); - System.out.println("-4- Spieler löschen"); - System.out.println("-5- Exit"); + print(""); + print("--------Hauptmenü--------"); + print(ANSI_BLUE + "-1-" + ANSI_RESET + " Spiel starten"); + print(ANSI_BLUE + "-2-" + ANSI_RESET + " Spieler hinzufügen"); + print(ANSI_BLUE + "-3-" + ANSI_RESET + " Spiel to String"); + print(ANSI_BLUE + "-4-" + ANSI_RESET + " Spieler löschen"); + print(ANSI_BLUE + "-5-" + ANSI_RESET + " Exit"); int input = 0; @@ -45,46 +51,16 @@ public class SpielCLI { switch (input) { case 1: - this.spiel.starteSpiel(); - System.out.println("Noch nicht implementiert."); + spielStarten(); break; case 2: - System.out.println("Gib den Namen des Spielers an"); - String name = sc.nextLine(); - System.out.println("Gib das Geschlecht an."); - System.out.println("Männlich (M), Weiblich (W), Divers (D), KI (K)"); - String geschlecht = sc.nextLine(); - switch (geschlecht) { - case "W": - spiel.addSpieler(name, Geschlecht.W); - break; - case "M": - spiel.addSpieler(name, Geschlecht.M); - break; - case "D": - spiel.addSpieler(name, Geschlecht.D); - break; - case "K": - spiel.addSpieler(name, Geschlecht.KI); - break; - default: - System.out.println("Diese eingabe ist nicht gültig"); - break; - - } + addSpieler(); break; - case 3: System.out.println(spiel.toString()); break; case 4: - System.out.println("Welchen Spieler willst du löschen?"); - - String[] spieler = spiel.getAlleSpieler(); - for (int i = 0; i < spieler.length; i++) { - System.out.println("[" + (i + 1) + "]: " + spieler[i]); - } - + spielerLöschen(); break; case 5: break mainloop; @@ -95,4 +71,93 @@ public class SpielCLI { System.out.println("auf wiedersehen!"); } + private void spielStarten() { + this.spiel.starteSpiel(); + System.out.println("Noch nicht implementiert."); + } + + private void addSpieler() { + int spieler_anzahl = this.spiel.getAlleSpieler().length; + if (spieler_anzahl <= 5) { + System.out.println("Gib den Namen des Spielers an"); + String name = sc.nextLine(); + System.out.println("Gib das Geschlecht an."); + System.out.println("Männlich (M), Weiblich (W), Divers (D), KI (K)"); + String geschlecht = sc.nextLine(); + switch (geschlecht) { + case "W": + spiel.addSpieler(name, Geschlecht.W); + break; + case "M": + spiel.addSpieler(name, Geschlecht.M); + break; + case "D": + spiel.addSpieler(name, Geschlecht.D); + break; + case "K": + spiel.addSpieler(name, Geschlecht.KI); + break; + default: + System.out.println("Diese eingabe ist nicht gültig"); + break; + + } + + } else { + System.out.println("Die Maximale Spieleranzahl ist erreicht."); + } + + } + + private void spielerLöschen() { + + if (this.spiel.getAlleSpieler().length >= 1) { + System.out.println("Welchen Spieler willst du löschen?"); + System.out.println("Gib die ID des Spielers an."); + + String[] spieler = spiel.getAlleSpieler(); + for (int i = 0; i < spieler.length; i++) { + System.out.println(spieler[i]); + } + + int _id = Integer.parseInt(sc.nextLine()); + System.out.println(_id); + for (String s : spieler) { + if (s.contains("ID: " + _id)) { + System.out.println("Sicher das du " + s + " löschen willst?"); + } + } + boolean valid_choice = false; + while (!valid_choice) { + System.out.println("Ja [j] Nein [n]"); + String wahl = sc.nextLine(); + switch (wahl) { + case "j": + valid_choice = true; + try { + spiel.removeSpieler(_id); + System.out.println("Spieler löschen erfolgreich!"); + } catch (SpielerNotFoundException | EmptyListException | RuntimeException e) { + System.out.println(e.getMessage()); + } + + break; + case "n": + System.out.println("Spieler löschen abgebrochen!"); + valid_choice = true; + break; + default: + System.out.println("Diese Auswhal ist nicht gültig"); + } + } + } else { + System.out.println("Es existieren keine Spieler zum löschen."); + } + + } + + private void print(String message) { + System.out.println(message); + } + } \ No newline at end of file