Noah Vogt 3 年之前
當前提交
e9267f6923
共有 4 個文件被更改,包括 145 次插入0 次删除
  1. 1 0
      .gitignore
  2. 49 0
      cards/Karte.java
  3. 90 0
      cards/KartenDeck.java
  4. 5 0
      game/Karten.java

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+*.class

+ 49 - 0
cards/Karte.java

@@ -0,0 +1,49 @@
+package cards;
+
+public class Karte {
+    public enum Farbe {
+        KREUZ, PIK, KARO, HERZ;
+    }
+
+    private static final int MIN_WERT = 2;
+    private static final int MAX_WERT = 14;
+
+    private int wert;
+    private Farbe farbe;
+
+    public Karte(Farbe farbe, int wert) {
+        setFarbe(farbe);
+        setWert(wert);
+    }
+
+    public int getWert() {
+        return wert;
+    }
+
+    public void setWert(int wert) {
+        validateWert(wert);
+        this.wert = wert;
+    }
+
+    private void validateWert(int wert) {
+        if (wert < MIN_WERT || wert > MAX_WERT)
+            throw new RuntimeException(
+                    String.format("Unerlaubter Wert: %d. Der Wert muss zwischen %d und %d liegen.",
+                            wert, MIN_WERT, MAX_WERT));
+    }
+
+    public Farbe getFarbe() {
+        return farbe;
+    }
+
+    public void setFarbe(Farbe farbe) {
+        validateFarbe(farbe);
+        this.farbe = farbe;
+    }
+
+    private void validateFarbe(Farbe farbe) {
+        if (farbe == null)
+            throw new RuntimeException("Farbe darf kein Null-Objekt sein");
+    }
+}
+

+ 90 - 0
cards/KartenDeck.java

@@ -0,0 +1,90 @@
+package cards;
+
+import java.util.ArrayList;
+
+public class KartenDeck {
+    private static final int MIN_DECK_SIZE = 0;
+    private static final int MAX_DECK_SIZE = 52;
+
+    private ArrayList<Karte> kartenListe = new ArrayList<Karte>();
+
+    public KartenDeck() {
+    }
+
+    public ArrayList<Karte> getDeck() {
+        return kartenListe;
+    }
+
+    public void setDeck(ArrayList<Karte> kartenListe) {
+        this.kartenListe = kartenListe;
+    }
+
+    public int getDeckSize() {
+        return this.kartenListe.size();
+    }
+
+    public void generateFullDeck() {
+        ArrayList<Karte> kartenListe = new ArrayList<Karte>();
+        for (Karte.Farbe farbe : Karte.Farbe.values()) {
+            for (int wert = 2; wert < 15; wert++) {
+                kartenListe.add(new Karte(farbe, wert));
+            }
+        }
+
+        this.kartenListe = kartenListe;
+    }
+
+    public void print() {
+        Karte karte;
+        for (int index = 0; index < this.kartenListe.size(); index++) {
+            karte = kartenListe.get(index);
+            System.out.println("cards.Karte #" + (index + 1) + "\n" +
+                               "Farbe = " + karte.getFarbe() + "\n" +
+                               "Wert = " + karte.getWert());
+        }
+    }
+
+    /* return value '-1' means karte not found */
+    public int getListIndexByKarte(Karte karte) {
+        int found_index = -1;
+        for (int index = 0; index < this.kartenListe.size(); index++) {
+            if (karte.getWert() == this.kartenListe.get(index).getWert() &&
+                karte.getFarbe() == this.kartenListe.get(index).getFarbe()) {
+                found_index = index;
+                break;
+            }
+        }
+
+        return found_index;
+    }
+
+    public void removeKarte(Karte karte) {
+        int list_index = getListIndexByKarte(karte);
+        if (!(list_index == -1))
+            this.kartenListe.remove(list_index);
+        else
+            throw new RuntimeException(String.format("Fehler: Die zu " +
+                        "ersetzende Karte '%s' wurde nicht gefunden.",
+                        karte.getFarbe().toString() + " " + karte.getWert()));
+    }
+
+    public void appendKarte(Karte karte) {
+        this.kartenListe.add(karte);
+    }
+
+    public static void main(String[] args) {
+        KartenDeck kartenDeck = new KartenDeck();
+        kartenDeck.generateFullDeck();
+        kartenDeck.print();
+        System.out.println(kartenDeck.getDeckSize());
+        kartenDeck.removeKarte(new Karte(Karte.Farbe.PIK, 10));
+        kartenDeck.removeKarte(new Karte(Karte.Farbe.PIK, 10));
+        System.out.println(kartenDeck.getDeckSize());
+        // kartenDeck.removeKarte(karo7);
+        // System.out.println(kartenDeck.getDeckSize());
+        for (Karte.Farbe farbe : Karte.Farbe.values()) {
+            System.out.println(farbe);
+        }
+
+    }
+}

+ 5 - 0
game/Karten.java

@@ -0,0 +1,5 @@
+package game;
+
+public class Karten {
+
+}