diff --git a/Domain/Exceptions/KartenNichtGemischtException.java b/Domain/Exceptions/KartenNichtGemischtException.java new file mode 100644 index 0000000..a7e5317 --- /dev/null +++ b/Domain/Exceptions/KartenNichtGemischtException.java @@ -0,0 +1,8 @@ +package Domain.Exceptions; + +public class KartenNichtGemischtException extends SpielException { + + public KartenNichtGemischtException(String e) { + super(30, e); + } +} diff --git a/Domain/Exceptions/SpielNotFoundException.java b/Domain/Exceptions/SpielNotFoundException.java new file mode 100644 index 0000000..49ec8f9 --- /dev/null +++ b/Domain/Exceptions/SpielNotFoundException.java @@ -0,0 +1,16 @@ +package Domain.Exceptions; + +public class SpielNotFoundException extends SpielException { + + + public SpielNotFoundException() { + super(); + } + public SpielNotFoundException(String e) { + super(20, e); + } + + public SpielNotFoundException(int id, String e) { + super(id, e); + } +} diff --git a/Domain/Kartenstapel.java b/Domain/Kartenstapel.java index a99684f..87418fb 100644 --- a/Domain/Kartenstapel.java +++ b/Domain/Kartenstapel.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Random; import java.util.HashMap; import Domain.Enums.Kartenfarbe; +import Domain.Exceptions.KartenNichtGemischtException; import Domain.Karten.*; @@ -20,7 +21,7 @@ public class Kartenstapel { // Statische Konstanten // Statische Attribute - private static int kartenzählen = 1; + // Attribute der Objekte /** @@ -30,6 +31,7 @@ public class Kartenstapel { private HashMap kartensortiert = new HashMap<>(); private HashMap kartengemischt = new HashMap<>(); + // Konstruktoren public Kartenstapel() { @@ -109,6 +111,7 @@ public class Kartenstapel { * */ public void mischen() { + kartengemischt.clear(); ArrayList zahlen = new ArrayList<>(); for (int i = 1; i <= 60; i++) { zahlen.add(i); @@ -120,10 +123,6 @@ public class Kartenstapel { kartengemischt.put(i + 1, kartensortiert.get(schlüsselzahl)); zahlen.remove(index); } - - for(Karte k : kartengemischt.values()) { - System.out.println(k.toString()); - } } /** @@ -131,11 +130,20 @@ public class Kartenstapel { * an den Spieler verteilt, bzw. am Ende des Verteilens der Trumpf gezogen, * falls noch eine Karte auf dem Stapel liegen sollte. Hierzu wird die Runde, * als Ausgangswert genommen. + * @return Immer die oberste Karte + * @throws KartenNichtGemischtException */ - public Object getObersteKarte() { - Object k = kartengemischt.values().toArray()[0]; - kartengemischt.remove(k); - return k; + public Object getObersteKarte() throws KartenNichtGemischtException { + if (!kartengemischt.isEmpty()) { + // Die Prüfung, dass NICHT MEHR als 60 Karten gezogen werden + // geschieht in der Spiellogik + Object k = kartengemischt.values().toArray()[0]; + kartengemischt.remove(k); + return k; + } + else { + throw new KartenNichtGemischtException("Der Kartenstapel wurde nicht gemischt."); + } } diff --git a/Domain/Spieler.java b/Domain/Spieler.java index 972fe85..6ed0143 100644 --- a/Domain/Spieler.java +++ b/Domain/Spieler.java @@ -7,10 +7,12 @@ written on: 05 / 10 / 2023 at: 23:48 package Domain; import Domain.Enums.Geschlecht; +import Domain.Exceptions.SpielNotFoundException; +import Facade.Spiel; import java.io.Serializable; -public class Spieler extends Object implements Serializable { +public class Spieler implements Serializable { /*------------------------------------------*/ // statische Konstanten @@ -27,6 +29,7 @@ public class Spieler extends Object implements Serializable { private String name; private int vorhersage; private Geschlecht geschlecht; + private Spiel spielexsist; // /*------------------------------------------*/ @@ -35,9 +38,19 @@ public class Spieler extends Object implements Serializable { // Default /** * Default Konstruktor des Spieler - Klasse + * @throws SpielNotFoundException */ - public Spieler() { - + public Spieler() throws SpielNotFoundException { + + } + + public Spieler(Spiel spiel) throws SpielNotFoundException { + if(spiel == null) { + throw new SpielNotFoundException("Es ist kein Spiel vorhanden."); + } + else { + setSpielexsist(spiel); + } } /** @@ -46,9 +59,10 @@ public class Spieler extends Object implements Serializable { * @param id int * @param name String * @param geschlecht Geschlecht + * @throws SpielNotFoundException */ - public Spieler(int id, String name, Geschlecht geschlecht) { - this(); + public Spieler(Spiel spiel, int id, String name, Geschlecht geschlecht) throws SpielNotFoundException { + this(spiel); if (id < 6) { setId(id); } else { @@ -72,9 +86,10 @@ public class Spieler extends Object implements Serializable { * @param name String * @param geschlecht Geschlecht * @param vorhersage int + * @throws SpielNotFoundException */ - public Spieler(int id, String name, Geschlecht geschlecht, int vorhersage) { - this(id, name, geschlecht); + public Spieler(Spiel spiel, int id, String name, Geschlecht geschlecht, int vorhersage) throws SpielNotFoundException { + this(spiel, id, name, geschlecht); setVorhersage(vorhersage); } @@ -85,6 +100,18 @@ public class Spieler extends Object implements Serializable { /*------------------------------------------*/ // Getter und Setter /*------------------------------------------*/ + // spielexsist + /** + * Prüft und setzt Spiel als Ganzes. + * Nur dann dürfen Spieler erstellt werden + * + */ + private void setSpielexsist(Spiel spiel) { + this.spielexsist = spiel; + } + public Spiel getSpielexsist() { + return this.spielexsist; + } // id /** * Setzt die ID des Spielers @@ -182,9 +209,14 @@ public class Spieler extends Object implements Serializable { /*------------------------------------------*/ // öffentliche Methodes /*------------------------------------------*/ - + /*------------------------------------------*/ // Hilfsmethoden (privat) /*------------------------------------------*/ + private boolean getSpielStatus() { + // TODO Auto-generated method stub + return false; + } + } diff --git a/Facade/Spiel.java b/Facade/Spiel.java index 70a8e31..5eee209 100644 --- a/Facade/Spiel.java +++ b/Facade/Spiel.java @@ -15,6 +15,7 @@ import Domain.Stich; import Domain.Block.Block; import Domain.Enums.Geschlecht; import Domain.Exceptions.EmptyListException; +import Domain.Exceptions.SpielNotFoundException; import Domain.Exceptions.SpielerNotFoundException; import Domain.Karten.Karte; @@ -57,6 +58,7 @@ public class Spiel implements Serializable { this.spielerAmZug = null; this.runde = 0; this.kartenstapel = new Kartenstapel(); + }; /*--------------------------------------------------------*/ // statische Methoden @@ -122,13 +124,13 @@ public class Spiel implements Serializable { // öffentliche Methodes /*--------------------------------------------------------*/ - public void addSpieler(String name, Geschlecht geschlecht) { + public void addSpieler(String name, Geschlecht geschlecht) throws SpielNotFoundException { int id = 1; while (id_check[id - 1]) { id++; } id_check[id - 1] = true; - Spieler temp = new Spieler(id, name, geschlecht); + Spieler temp = new Spieler(this, id, name, geschlecht); this.spieler.put(id, temp); System.out.println(this.spieler.get(id)); if (this.spielerAmZug == null) { diff --git a/Main.java b/Main.java index 515b424..35d6561 100644 --- a/Main.java +++ b/Main.java @@ -4,10 +4,16 @@ import UI.SpielCLI; import java.io.IOException; +import Domain.Exceptions.SpielNotFoundException; + public class Main { - public static void main(String[] args) { + + + + public static void main(String[] args) throws SpielNotFoundException { String name = "Wizard"; Spiel spiel = null; + if (Persistenz.sindDatenVorhanden(name)) { try { @@ -30,6 +36,7 @@ public class Main { } else { spiel = new Spiel(); + } new SpielCLI(spiel); @@ -39,5 +46,8 @@ public class Main { } catch (IOException e) { System.out.println("Konnte Daten nicht speicher!"); } + } + + } diff --git a/Test/Domain/SpielerTest.java b/Test/Domain/SpielerTest.java index ee93bde..1efd668 100644 --- a/Test/Domain/SpielerTest.java +++ b/Test/Domain/SpielerTest.java @@ -7,21 +7,33 @@ written on: 10 / 10 / 2023 at: 20:27 package Test.Domain; import org.junit.Test; +import org.junit.jupiter.api.BeforeAll; import Domain.Spieler; import Domain.Enums.Geschlecht; +import Domain.Exceptions.SpielNotFoundException; +import Facade.Spiel; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; public class SpielerTest { - - Spieler spieler = new Spieler(0, "Herbert", Geschlecht.M, 0); - Spieler spieler2 = new Spieler(1, "Heinz", Geschlecht.M, 0); - Spieler spieler3 = new Spieler(2, "Ulrike", Geschlecht.W, 0); - Spieler spieler4 = new Spieler(3, "HerrFrau", Geschlecht.D, 0); - Spieler spieler5 = new Spieler(4, "", Geschlecht.KI, 0); - Spieler spieler6 = new Spieler(5, "", Geschlecht.KI, 0); + + Spieler spieler, spieler2, spieler3, spieler4, spieler5, spieler6; + Spiel spiel; + + @BeforeAll + public void immer() throws SpielNotFoundException { + spiel = new Spiel(); + + spieler = new Spieler(spiel, 0, "Herbert", Geschlecht.M); + spieler2 = new Spieler(spiel, 1, "Heinz", Geschlecht.M); + spieler3 = new Spieler(spiel, 2, "Ulrike", Geschlecht.W); + spieler4 = new Spieler(spiel, 3, "HerrFrau", Geschlecht.D); + spieler5 = new Spieler(spiel, 4, "", Geschlecht.KI); + spieler6 = new Spieler(spiel, 5, "", Geschlecht.KI, 0); + } + @Test public void idTest() { @@ -54,6 +66,7 @@ public class SpielerTest { } @Test public void exceptionsTest() { - assertThrows(RuntimeException.class, () -> new Spieler(6, "", Geschlecht.KI, 0)); + + assertThrows(RuntimeException.class, () -> new Spieler(spiel, 7, "Hugo", Geschlecht.M)); } } diff --git a/UI/SpielCLI.java b/UI/SpielCLI.java index 6123a62..3b441d5 100644 --- a/UI/SpielCLI.java +++ b/UI/SpielCLI.java @@ -11,6 +11,7 @@ import Facade.Spiel; import Domain.Spieler; import Domain.Enums.Geschlecht; import Domain.Exceptions.EmptyListException; +import Domain.Exceptions.SpielNotFoundException; import Domain.Exceptions.SpielerNotFoundException; import java.util.Scanner; @@ -25,12 +26,12 @@ public class SpielCLI { Scanner sc = new Scanner(System.in); private Spiel spiel; - public SpielCLI(Spiel spiel) { + public SpielCLI(Spiel spiel) throws SpielNotFoundException { this.spiel = spiel; hauptmenue(); } - public void hauptmenue() { + public void hauptmenue() throws SpielNotFoundException { System.out.println("Hallo Wanderer"); mainloop: while (true) { print(""); @@ -76,7 +77,7 @@ public class SpielCLI { System.out.println("Noch nicht implementiert."); } - private void addSpieler() { + private void addSpieler() throws SpielNotFoundException { int spieler_anzahl = this.spiel.getAlleSpieler().length; if (spieler_anzahl <= 5) { System.out.println("Gib den Namen des Spielers an");