WIZARD_PR2_DOP/Domain/Kartenstapel.java

156 lines
4.3 KiB
Java
Raw Permalink Normal View History

/*
============================================================
This is the "Kartenstapel" file from Author: Philipp Kotte
written on: 05 / 10 / 2023 at: 23:42
============================================================
*/
package Domain;
import java.util.ArrayList;
2023-10-26 13:50:54 +02:00
import java.util.Collection;
import java.util.List;
import java.util.Random;
2023-10-26 13:50:54 +02:00
import java.util.HashMap;
import Domain.Enums.Kartenfarbe;
import Domain.Exceptions.EmptyKartensortiertException;
import Domain.Exceptions.SpielException;
import Domain.Karten.*;
2023-10-26 13:50:54 +02:00
public class Kartenstapel {
2023-10-26 13:50:54 +02:00
// Statische Konstanten
2023-10-26 13:50:54 +02:00
// Statische Attribute
2023-10-26 13:50:54 +02:00
// 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<Integer, Karte> kartensortiert = new HashMap<>();
2023-10-26 13:50:54 +02:00
private HashMap<Integer, Karte> kartengemischt = new HashMap<>();
2023-10-26 13:50:54 +02:00
// Konstruktoren
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-26 13:50:54 +02:00
}
2023-10-26 13:50:54 +02:00
// Statische Methoden
// Getter und Setter
2023-10-26 13:50:54 +02:00
public Karte getKartesortiert(Integer index) {
return kartensortiert.get(index);
}
// Overrides
2023-10-26 13:50:54 +02:00
// Public Methoden
/**
2023-10-26 13:50:54 +02:00
* Die Collection der HashMap 'kartensortiert'.
*
2023-10-26 13:50:54 +02:00
* @return Die Kartenreferenzen der HashMap.
*/
2023-10-26 13:50:54 +02:00
public Collection<Karte> getKartenstapelSortiert() {
return kartensortiert.values();
}
public Collection<Karte> getKartenstapelGemischt() {
return kartengemischt.values();
}
/**
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-26 13:50:54 +02:00
* @return 'kg' Eine Namensliste des gemischten Kartenstapel
*/
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-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.
*
*/
public void mischen() throws EmptyKartensortiertException {
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);
try {
kartengemischt.put(i + 1, kartensortiert.get(schlüsselzahl));
} catch(Exception e) {
new EmptyKartensortiertException("Es wurde versucht ein leerer Kartenstapel zu mischen.");
}
2023-10-26 13:50:54 +02:00
zahlen.remove(index);
2023-10-26 13:50:54 +02:00
}
for(Karte k : kartengemischt.values()) {
System.out.println(k.toString());
}
}
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,
2023-11-02 07:37:41 +01:00
* als Ausgangswert genommen. Die Prüfung ob der return = null ist erfolgt in der
* Klasse Spiel, um dann auszusagen, dass es keinen Trumpf gibt
2023-10-26 13:50:54 +02:00
*/
public Object getObersteKarte() {
2023-11-02 07:37:41 +01:00
Object k = kartengemischt.values().toArray()[0];
kartengemischt.remove(k);
return k;
2023-10-26 13:50:54 +02:00
}
/**
*
*/
// Private Methoden
}