2023-10-05 23:49:36 +02:00
|
|
|
/*
|
|
|
|
============================================================
|
|
|
|
This is the "Kartenstapel" file from Author: Philipp Kotte
|
|
|
|
written on: 05 / 10 / 2023 at: 23:42
|
|
|
|
============================================================
|
|
|
|
*/
|
|
|
|
package Domain;
|
2023-10-11 17:15:09 +02:00
|
|
|
|
2023-10-26 17:22:29 +02:00
|
|
|
import java.io.Serializable;
|
2023-10-20 08:52:29 +02:00
|
|
|
import java.util.ArrayList;
|
2023-10-26 13:50:54 +02:00
|
|
|
import java.util.Collection;
|
2023-10-20 08:52:29 +02:00
|
|
|
import java.util.List;
|
|
|
|
import java.util.Random;
|
2023-10-26 13:50:54 +02:00
|
|
|
import java.util.HashMap;
|
2023-10-20 08:52:29 +02:00
|
|
|
import Domain.Enums.Kartenfarbe;
|
2023-10-10 17:34:41 +02:00
|
|
|
import Domain.Karten.*;
|
2023-10-11 17:15:09 +02:00
|
|
|
|
2023-10-26 17:22:29 +02:00
|
|
|
public class Kartenstapel implements Serializable {
|
2023-10-11 17:15:09 +02:00
|
|
|
|
2023-10-26 13:50:54 +02:00
|
|
|
// Statische Konstanten
|
2023-10-11 17:15:09 +02:00
|
|
|
|
2023-10-26 13:50:54 +02:00
|
|
|
// Statische Attribute
|
|
|
|
private static int kartenzählen = 1;
|
|
|
|
// Attribute der Objekte
|
2023-10-26 17:22:29 +02:00
|
|
|
|
2023-10-26 13:50:54 +02:00
|
|
|
/**
|
|
|
|
* 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<Integer, Karte> kartensortiert = new HashMap<>();
|
2023-10-11 17:15:09 +02:00
|
|
|
|
2023-10-26 17:22:29 +02:00
|
|
|
private ArrayList<Karte> kartengemischt = new ArrayList<>();
|
2023-10-11 17:15:09 +02:00
|
|
|
|
2023-10-26 13:50:54 +02:00
|
|
|
// Konstruktoren
|
2023-10-10 17:34:41 +02:00
|
|
|
public Kartenstapel() {
|
2023-10-26 13:50:54 +02:00
|
|
|
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));
|
|
|
|
}
|
2023-10-11 17:15:09 +02:00
|
|
|
|
2023-10-10 17:34:41 +02:00
|
|
|
}
|
2023-10-26 13:50:54 +02:00
|
|
|
// Statische Methoden
|
2023-10-11 17:15:09 +02:00
|
|
|
|
|
|
|
// Getter und Setter
|
2023-10-26 13:50:54 +02:00
|
|
|
public Karte getKartesortiert(Integer index) {
|
|
|
|
return kartensortiert.get(index);
|
|
|
|
}
|
|
|
|
// Overrides
|
2023-10-11 17:15:09 +02:00
|
|
|
|
2023-10-26 13:50:54 +02:00
|
|
|
// Public Methoden
|
2023-10-10 17:34:41 +02:00
|
|
|
/**
|
2023-10-26 13:50:54 +02:00
|
|
|
* Die Collection der HashMap 'kartensortiert'.
|
2023-10-11 17:15:09 +02:00
|
|
|
*
|
2023-10-26 13:50:54 +02:00
|
|
|
* @return Die Kartenreferenzen der HashMap.
|
2023-10-10 17:34:41 +02:00
|
|
|
*/
|
2023-10-26 13:50:54 +02:00
|
|
|
public Collection<Karte> getKartenstapelSortiert() {
|
|
|
|
return kartensortiert.values();
|
|
|
|
}
|
|
|
|
|
|
|
|
public Collection<Karte> getKartenstapelGemischt() {
|
2023-10-26 17:22:29 +02:00
|
|
|
return kartengemischt;
|
2023-10-10 17:34:41 +02:00
|
|
|
}
|
2023-10-11 17:15:09 +02:00
|
|
|
|
2023-10-10 17:34:41 +02:00
|
|
|
/**
|
2023-10-26 13:50:54 +02:00
|
|
|
* Methode für die Testklasse KartenstapelTest, um die Sortierung Visuell zu
|
|
|
|
* bestätigen. Kann nach Finalem Test und Freigabe gelöscht oder auskommentiert
|
|
|
|
* werden.
|
2023-10-11 17:15:09 +02:00
|
|
|
*
|
2023-10-26 13:50:54 +02:00
|
|
|
* @return 'kg' Eine Namensliste des gemischten Kartenstapel
|
2023-10-10 17:34:41 +02:00
|
|
|
*/
|
2023-10-26 13:50:54 +02:00
|
|
|
public HashMap<Integer, String> getStatusGemischt() {
|
|
|
|
HashMap<Integer, String> kg = new HashMap<>();
|
|
|
|
for (int i = 1; i <= 60; i++) {
|
|
|
|
kg.put(i, ((String) kartengemischt.get(i).toString()));
|
|
|
|
}
|
|
|
|
return kg;
|
2023-10-10 17:34:41 +02:00
|
|
|
}
|
2023-10-05 23:49:36 +02:00
|
|
|
|
2023-10-26 13:50:54 +02:00
|
|
|
/**
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
*/
|
2023-10-11 17:15:09 +02:00
|
|
|
public void mischen() {
|
2023-10-26 13:50:54 +02:00
|
|
|
ArrayList<Integer> 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);
|
2023-10-26 17:22:29 +02:00
|
|
|
kartengemischt.add(kartensortiert.get(schlüsselzahl));
|
2023-10-26 13:50:54 +02:00
|
|
|
zahlen.remove(index);
|
|
|
|
}
|
2023-10-20 08:52:29 +02:00
|
|
|
}
|
|
|
|
|
2023-10-26 13:50:54 +02:00
|
|
|
/**
|
|
|
|
* 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.
|
|
|
|
*/
|
2023-10-26 17:22:29 +02:00
|
|
|
public Karte getObersteKarte() {
|
|
|
|
Karte k = kartengemischt.get(0);
|
|
|
|
kartengemischt.remove(0);
|
2023-10-26 13:50:54 +02:00
|
|
|
return k;
|
|
|
|
}
|
2023-10-26 17:22:29 +02:00
|
|
|
|
2023-10-26 13:50:54 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
// Private Methoden
|
2023-10-11 17:15:09 +02:00
|
|
|
|
2023-10-05 23:49:36 +02:00
|
|
|
}
|