From 380a2b4d8be717fca0e28fce1a8a9761700b5b03 Mon Sep 17 00:00:00 2001 From: Kai Sellmann Date: Thu, 26 Oct 2023 13:50:54 +0200 Subject: [PATCH] Update DOMAIN.KARTEN --- Domain/Karten/Magierkarte.java | 44 ++----- Domain/Karten/Narrenkarte.java | 35 ++---- Domain/Karten/Zahlenkarte.java | 13 +- Domain/Kartenstapel.java | 217 ++++++++++++++++++--------------- 4 files changed, 152 insertions(+), 157 deletions(-) diff --git a/Domain/Karten/Magierkarte.java b/Domain/Karten/Magierkarte.java index 7725825..d9d4bf9 100644 --- a/Domain/Karten/Magierkarte.java +++ b/Domain/Karten/Magierkarte.java @@ -11,24 +11,18 @@ import Domain.Enums.Kartenfarbe; public class Magierkarte extends Karte { // Statische Konstanten - + private final static String NAME = "Zauberer"; // Statische Attribute // Attribute des Objekts - private Kartenfarbe kartenfarbe; - private String bezeichnung; - private static int magierkartenanzahl = 0; + + private String name; + // Konstruktoren public Magierkarte(int id) { super(id); - - } - - public Magierkarte(Kartenfarbe kartenfarbe, String bezeichnung) { - super(); - setKartenfarbe(kartenfarbe); - setBezeichnung(bezeichnung); + setName(); } @@ -36,39 +30,23 @@ public class Magierkarte extends Karte { // Getter und Setter - public void setKartenfarbe(Kartenfarbe kartenfarbe) { - this.kartenfarbe = kartenfarbe; - } - - public Kartenfarbe getKartenfarbe() { - return this.kartenfarbe; - } - public int getId() { - return this.getId(); + return super.getId(); } - public void setBezeichnung(String bezeichnung) { - this.bezeichnung = bezeichnung; + private void setName() { + this.name = NAME; } - public String getBezeichnung() { - return this.bezeichnung; + public String getName() { + return this.name; } - public void setMagierkartenanzahl(int magierkartenanzahl) { - magierkartenanzahl++; - } - - public int getMagierkartenanzahl() { - return magierkartenanzahl; - } // @Overrides @Override public String toString() { - return this.getBezeichnung() + ": " + this.getKartenfarbe().name() + " (" + this.getKartenfarbe().toString() - + ")."; + return "ID " + this.getId() + ": " + this.getName(); } // Public Methoden diff --git a/Domain/Karten/Narrenkarte.java b/Domain/Karten/Narrenkarte.java index 154d31a..7b081e6 100644 --- a/Domain/Karten/Narrenkarte.java +++ b/Domain/Karten/Narrenkarte.java @@ -11,45 +11,33 @@ import Domain.Enums.Kartenfarbe; public class Narrenkarte extends Karte { // Statische Konstanten - + private final static String NAME = "Narr"; // Statische Attribute // Attribute des Objekts - private Kartenfarbe kartenfarbe; - private String bezeichnung; + + private String name; // Konstruktoren public Narrenkarte(int id) { super(id); - } - - public Narrenkarte(Kartenfarbe farbe, String bezeichnung) { - super(); - setKartenfarbe(farbe); - setBezeichnung(bezeichnung); + setName(); } // Statische Methoden // Getter und Setter + public int getId() { - return this.getId(); + return super.getId(); } - public void setKartenfarbe(Kartenfarbe farbe) { - this.kartenfarbe = farbe; + private void setName() { + this.name = NAME; } - public Kartenfarbe getKartenfarbe() { - return this.kartenfarbe; - } - - public void setBezeichnung(String bezeichnung) { - this.bezeichnung = bezeichnung; - } - - public String getBezeichnung() { - return this.bezeichnung; + public String getName() { + return this.name; } public void setNarrenkarteanzahl(int narrenkarteanzahl) { @@ -59,8 +47,7 @@ public class Narrenkarte extends Karte { // @Overrides @Override public String toString() { - return this.getBezeichnung() + ": " + this.getKartenfarbe().name() + " (" + this.getKartenfarbe().toString() - + ")."; + return "ID " + this.getId() + ": " + this.getName(); } // Public Methoden diff --git a/Domain/Karten/Zahlenkarte.java b/Domain/Karten/Zahlenkarte.java index 91240bd..3959ece 100644 --- a/Domain/Karten/Zahlenkarte.java +++ b/Domain/Karten/Zahlenkarte.java @@ -27,12 +27,12 @@ public class Zahlenkarte extends Karte { /*------------------------------------------*/ // Konstruktoren (default und spezifische) /*------------------------------------------*/ - public Zahlenkarte() { - super(); + public Zahlenkarte(int id) { + super(id); } - public Zahlenkarte(Kartenfarbe farbe, int kartenNummer) { - super(); + public Zahlenkarte(int id, Kartenfarbe farbe, int kartenNummer) { + super(id); setFarbe(farbe); setKartenNummer(kartenNummer); @@ -44,6 +44,11 @@ public class Zahlenkarte extends Karte { /*------------------------------------------*/ // Getter und Setter /*------------------------------------------*/ + + public int getId() { + return super.getId(); + } + public void setFarbe(Kartenfarbe farbe) { this.farbe = farbe; } diff --git a/Domain/Kartenstapel.java b/Domain/Kartenstapel.java index e9e94c2..a99684f 100644 --- a/Domain/Kartenstapel.java +++ b/Domain/Kartenstapel.java @@ -7,116 +7,141 @@ written on: 05 / 10 / 2023 at: 23:42 package Domain; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Random; - +import java.util.HashMap; import Domain.Enums.Kartenfarbe; import Domain.Karten.*; + public class Kartenstapel { - /*------------------------------------------*/ - // statische Konstanten - /*------------------------------------------*/ + // Statische Konstanten - /*------------------------------------------*/ - // statische Attribute(zB. zähler) - /*------------------------------------------*/ + // Statische Attribute + private static int kartenzählen = 1; + // Attribute der Objekte + + /** + * Die HashMap besitzt alle Karten in sortierter Reihenfolge Die ArrayList wird + * durch Zufall erzeugt und gibt den Key der HashMap wieder. D.h. + */ + private HashMap kartensortiert = new HashMap<>(); - /*------------------------------------------*/ - // Attribute jedes Objektes - /*------------------------------------------*/ - private boolean[][] belegung = { - { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false }, - { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false }, - { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false }, - { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false } - }; - - private Karte[] kartenStapel = new Karte[60]; - - /*------------------------------------------*/ - // Konstruktoren (default und spezifische) - /*------------------------------------------*/ + private HashMap kartengemischt = new HashMap<>(); + // Konstruktoren public Kartenstapel() { - mischen(); - - } - - /*------------------------------------------*/ - // statische Methoden - /*------------------------------------------*/ - - /*------------------------------------------*/ - // Getter und Setter - /*------------------------------------------*/ - - /** - * Ausgabe des ersten Elements des Stapels. - * - * @return erstes Element - */ - public Karte getObersteKarte() { - return kartenStapel[0]; - } - - /** - * Ausgabe der Stapelgroesse. - * - * @return laenge des Kartenstapels-Arrays - */ - public int getAnzahlKarten() { - return kartenStapel.length; - } - - /*------------------------------------------*/ - // @Overrides - /*------------------------------------------*/ - - /*------------------------------------------*/ - // öffentliche Methoden - /*------------------------------------------*/ - - public void mischen() { - - } - - /*------------------------------------------*/ - // Hilfsmethoden (privat) - /*------------------------------------------*/ - - private void Kartenverteilung() { - - Random r = new Random(); - List karten = new ArrayList<>(); - while (karten.size() < 60) { - int high = 4; - int low = 1; - int ultra_high = 15; - int x = r.nextInt(high - low) + low; - int y = r.nextInt(ultra_high - low) + low; - if (!belegung[x - 1][y - 1]) { - if (y == 1) { - karten.add(new Narrenkarte(x * y)); - } else if (y == 15) { - karten.add(new Magierkarte(x * y)); - } else { - if (x == 1) { - karten.add(new Zahlenkarte(Kartenfarbe.ZWERG, y)); - } else if (x == 2) { - - } else if (x == 3) { - - } else if (x == 4) { - - } - } - } + kartensortiert.clear(); + // Erstelle Magierkarten + for (int i = 1; i <= 4; i++) { + kartensortiert.put(i, new Magierkarte(i)); + } + // Erstelle Narrenkarten + for (int i = 5; i <= 8; i++) { + kartensortiert.put(i, new Narrenkarte(i)); + } + // Erstelle Charakterkarten MENSCH + for (int i = 9; i <= 21; i++) { + kartensortiert.put(i, new Zahlenkarte(i, Kartenfarbe.MENSCH, i - 8)); + } + // Erstelle Charakterkarten ELF + for (int i = 22; i <= 34; i++) { + kartensortiert.put(i, new Zahlenkarte(i, Kartenfarbe.ELF, i - 21)); + } + // Erstelle Charakterkarten RIESE + for (int i = 35; i <= 47; i++) { + kartensortiert.put(i, new Zahlenkarte(i, Kartenfarbe.RIESE, i - 34)); + } + // Erstelle Charakterkarten ZWERG + for (int i = 48; i <= 60; i++) { + kartensortiert.put(i, new Zahlenkarte(i, Kartenfarbe.ZWERG, i - 47)); } + + } + // Statische Methoden + + // Getter und Setter + public Karte getKartesortiert(Integer index) { + return kartensortiert.get(index); + } + // Overrides + + // Public Methoden + /** + * Die Collection der HashMap 'kartensortiert'. + * + * @return Die Kartenreferenzen der HashMap. + */ + public Collection getKartenstapelSortiert() { + return kartensortiert.values(); } - // + public Collection getKartenstapelGemischt() { + return kartengemischt.values(); + } + + /** + * Methode für die Testklasse KartenstapelTest, um die Sortierung Visuell zu + * bestätigen. Kann nach Finalem Test und Freigabe gelöscht oder auskommentiert + * werden. + * + * @return 'kg' Eine Namensliste des gemischten Kartenstapel + */ + public HashMap getStatusGemischt() { + HashMap kg = new HashMap<>(); + for (int i = 1; i <= 60; i++) { + kg.put(i, ((String) kartengemischt.get(i).toString())); + } + return kg; + } + + /** + * Methode mischen(): beinhaltet eine ArrayList 'zahlen' die Zahlenwerte von 1 + * bis 60 zur Verfügung stellt. + * + * @code Mit Random wird ein Zufallsindex gewählt. 'kartensortiert' und + * 'kartengemsicht' sind zwei HashMap. 'kartensortiert' beinhaltet alle + * Karten in einer initialisierten Reihenfolge. 'kartengemischt' wird + * durch die @code Random 'zufall' befüllt. + * + */ + public void mischen() { + ArrayList zahlen = new ArrayList<>(); + for (int i = 1; i <= 60; i++) { + zahlen.add(i); + } + Random zufall = new Random(); + for (int i = 0; i < 60; i++) { + int index = zufall.nextInt(zahlen.size()); + int schlüsselzahl = zahlen.get(index); + kartengemischt.put(i + 1, kartensortiert.get(schlüsselzahl)); + zahlen.remove(index); + } + + for(Karte k : kartengemischt.values()) { + System.out.println(k.toString()); + } + } + + /** + * Methode getObersteKarte(): Hier wird der Reihe nach die jeweils oberste Karte + * 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. + */ + public Object getObersteKarte() { + Object k = kartengemischt.values().toArray()[0]; + kartengemischt.remove(k); + return k; + } + + + /** + * + */ + // Private Methoden }