This commit is contained in:
ekresse
2020-12-03 11:10:18 +01:00
2 changed files with 276 additions and 5 deletions

View File

@@ -2,11 +2,68 @@ package de.jaujau.daten;
/** /**
* Class Karte * Klasse Karte
* Verwaltet die Daten einer Spielkarte
* @author Sebastian Kacza
*/ */
public class Karte { public class Karte {
private Farbe FARBE;
private Wert WERT;
private Ablageort Ablageort;
/**
* Konstruktor für die Klasse Karte
* Ablageort dird Standartmäßig auf Zielstapel gestezt
* @param f Farbe der Karte
* @param w Wert der Karte
*/
public Karte(Farbe f, Wert w) {
FARBE = f;
WERT = w;
Ablageort = de.jaujau.daten.Ablageort.ZIESTAPEL;
}
/**
* Gibt die Farbe der Karte zurück
* @return Farbe der Karte
*/
public Farbe getFARBE() {
return FARBE;
}
/**
* Gibt den Wert einer Karte zurück
* @return Wert der Karte
*/
public Wert getWERT() {
return WERT;
}
/**
* Gibt den Ablageort der Karte zurück
* @return Ablageort der Karte
*
*/
public Ablageort getAblageort() {
return Ablageort;
}
/**
* Ändert den Ablageoert der Karte
* @param ablageort Neuer Ablageort der Karte
*/
public void setAblageort(Ablageort ablageort) {
Ablageort = ablageort;
}
/**
* Gibt die Eigenschaften der Karte aus Text aus
* !!!Diese Methode ist nur für Debug-Ausgaben notwendig und kann Später entfernt werden!!!
* @return String mit den Karten Eigenschaften
*/
@Override
public String toString() {
return "Karte [FARBE=" + FARBE + ", WERT=" + WERT + ", Ablageort=" + Ablageort + "]";
}
} }

View File

@@ -1,12 +1,226 @@
package de.jaujau.daten; package de.jaujau.daten;
import java.util.ArrayList;
import java.util.Random;
/**
* Diese Klasse Verwaltet den Kartensatz
* @author Sebastian Kacza
*/
public class Kartensatz {
public Karte kartensatz[];
int letztekarte;
/**
* Konstruktor für den Kartensatz
* Erstellt einen Neuen Kartensatz mit 32 Karten in einem Array
* Die Karten haben dabei die Reihenfolge eines Standart Skat Blattes
*/
public Kartensatz() {
letztekarte = 0;
kartensatz = new Karte[32];
//Standart Skat Kartensatz erstellen
kartensatz[0] = new Karte(Farbe.KARO, Wert.SIEBEN);
kartensatz[1] = new Karte(Farbe.KARO, Wert.ACHT);
kartensatz[2] = new Karte(Farbe.KARO, Wert.NEUN);
kartensatz[3] = new Karte(Farbe.KARO, Wert.ZEHN);
kartensatz[4] = new Karte(Farbe.KARO, Wert.BUBE);
kartensatz[5] = new Karte(Farbe.KARO, Wert.DAME);
kartensatz[6] = new Karte(Farbe.KARO, Wert.KOENING);
kartensatz[7] = new Karte(Farbe.KARO, Wert.ASS);
kartensatz[8] = new Karte(Farbe.HERZ, Wert.SIEBEN);
kartensatz[9] = new Karte(Farbe.HERZ, Wert.ACHT);
kartensatz[10] = new Karte(Farbe.HERZ, Wert.NEUN);
kartensatz[11] = new Karte(Farbe.HERZ, Wert.ZEHN);
kartensatz[12] = new Karte(Farbe.HERZ, Wert.BUBE);
kartensatz[13] = new Karte(Farbe.HERZ, Wert.DAME);
kartensatz[14] = new Karte(Farbe.HERZ, Wert.KOENING);
kartensatz[15] = new Karte(Farbe.HERZ, Wert.ASS);
kartensatz[16] = new Karte(Farbe.PIK, Wert.SIEBEN);
kartensatz[17] = new Karte(Farbe.PIK, Wert.ACHT);
kartensatz[18] = new Karte(Farbe.PIK, Wert.NEUN);
kartensatz[19] = new Karte(Farbe.PIK, Wert.ZEHN);
kartensatz[20] = new Karte(Farbe.PIK, Wert.BUBE);
kartensatz[21] = new Karte(Farbe.PIK, Wert.DAME);
kartensatz[22] = new Karte(Farbe.PIK, Wert.KOENING);
kartensatz[23] = new Karte(Farbe.PIK, Wert.ASS);
kartensatz[24] = new Karte(Farbe.KREUZ, Wert.SIEBEN);
kartensatz[25] = new Karte(Farbe.KREUZ, Wert.ACHT);
kartensatz[26] = new Karte(Farbe.KREUZ, Wert.NEUN);
kartensatz[27] = new Karte(Farbe.KREUZ, Wert.ZEHN);
kartensatz[28] = new Karte(Farbe.KREUZ, Wert.BUBE);
kartensatz[29] = new Karte(Farbe.KREUZ, Wert.DAME);
kartensatz[30] = new Karte(Farbe.KREUZ, Wert.KOENING);
kartensatz[31] = new Karte(Farbe.KREUZ, Wert.ASS);
}
//!!!Es kann noch zu fehler kommen
/**
* Zieht eine Zufällige karte aus dem Ziestapel für einen bestimmten Spieler und gibt den Karten dem Spieler auf die Hand
* Wenn keine Karten mehr auf dem Ziestapel sind werden alle Karten vom Ablagestabel auf den Ziestapel verschoben
* @param spieler Spieler der die Karte auf die Hand bekommen soll
*
*/
public boolean ziehen(Spieler spieler) {
//System.out.println("Start Ziehen");
//Ziestapel Prüfen
int ZiestapelAnzahl = getZiestapelAnzahl();
if(ZiestapelAnzahl < 1) {
//Alle Karten vom Ablagestapel ausßer letze auf den Ziestapel verschieben
for(int i = 0; i < 32; i++) {
if((kartensatz[i].getAblageort() == Ablageort.ABLAGESTAPEL) && (i != letztekarte)) {
kartensatz[i].setAblageort(Ablageort.ZIESTAPEL);
}
}
}
ZiestapelAnzahl = getZiestapelAnzahl();
//System.out.println("ZieStapel Anzahl " + ZiestapelAnzahl);
if(ZiestapelAnzahl > 0) {
//Ziekarte bestimmen und
//Zienummer auswählen
//System.out.println("Nummer wählen");
Random random = new Random();
int auswahl = random.nextInt(ZiestapelAnzahl);
//System.out.println("Karte Ziehen " + auswahl);
//Wenn Karten auf dem Ziespabel verfügbar sind
int ZiestapelIndex = 0;
for(int i = 0; i < 32; i++) {
//System.out.println("ZielStapelIndex " + ZiestapelIndex);
if(kartensatz[i].getAblageort() == Ablageort.ZIESTAPEL) {
//System.out.println("Suche " + auswahl + " ZieIndex " + ZiestapelIndex + " KartenIndex " + i);
if(auswahl == ZiestapelIndex) {
//System.out.println("Ziehe Karte " + i + " " + kartensatz[i].toString());
//Karte im Ziestaple ist die die Ausgewählt wurde
if(spieler == Spieler.SPIELER) {
kartensatz[i].setAblageort(Ablageort.SPIELER);
}
if(spieler == Spieler.COMPUTER) {
kartensatz[i].setAblageort(Ablageort.COMPUTER);
}
return true;
}
ZiestapelIndex++;
}
}
}
else {
System.out.println("Keine Karten zum ziehen verfügbar!");
return false;
}
return false;
}
/** /**
* Class Kartensatz * legt die Karte mit der KartenID x auf den Ablagestapel
* Speicher die KartenID der zuletzgelegt Karte in "letztekarte"
* @param kartenid ID der Karte die Abgeget werden Soll
*/ */
public class Kartensatz { public void ablegen(int kartenID) {
if((kartenID >= 0) && (kartenID < 32)){
kartensatz[kartenID].setAblageort(Ablageort.ABLAGESTAPEL);
letztekarte = kartenID;
}
}
//Funktion geprüft
/**
* gibt die ID der Kartezurück die als letztes auf dem Ablagestabel gelegt wurde
* @return ID der zuletzt gelegten Karte
*/
public int getletzteKarte() {
return letztekarte;
}
//Funktion geprüft
/**
* Gibt die Karten Indexe einer Spieler Hand zuück
* Wenn keine Karten auf der Hand liegen wird eine Leere ArrayList zurückgegeben
* @param spieler Spieler
* @return ArrayList von Integer welche die KatrenIndexe enthält,
*/
public ArrayList<Integer> getHand(Spieler spieler) {
ArrayList<Integer> hand = new ArrayList<Integer>();
for(int i = 0; i < 32; i++) {
//Für Spieler
if(spieler == Spieler.SPIELER) {
if(kartensatz[i].getAblageort() == Ablageort.SPIELER) {
hand.add(i);
}
}
//Für Computer
if(spieler == Spieler.COMPUTER) {
if(kartensatz[i].getAblageort() == Ablageort.COMPUTER) {
hand.add(i);
}
}
}
return hand;
}
//Funktion geprüft
/**
* Gibt eine Karte aus dem Kartensatz zurück
* @param kartenid ID Der Karte (0 - 31)
* @return Karte auf dem Kartensatz mit der ID x
*/
public Karte getKarte(int kartenID) {
if((kartenID >= 0) && (kartenID < 32)){
return kartensatz[kartenID];
}
else {
return null;
}
}
//Funktion geprüft
/**
* Legt die Farbe fest die als nächstes auf den Ablagestapel gelegt werden muss
* Dafür wird der "Wünscher" (Bube) der jeweiligen Farbe als letze Karte auf dem Ablegestabel eingetragen
* @param farbe Farbe die sich gewünscht wird
*/
public void SetWunschfarbe(Farbe farbe) {
if(farbe == Farbe.KARO) {
letztekarte = 4; //Karo Bube
}
else if (farbe == Farbe.HERZ) {
letztekarte = 12; //Kerz Bube
}
else if (farbe == Farbe.PIK) {
letztekarte = 20; //Pik Bube
}
else if (farbe == Farbe.KREUZ) {
letztekarte = 28; //Kreuz Bube
}
}
//Funktion geprüft
/**
* Dies Funktion Prüft ob sich auf dem Ziestapel noch mindestes eine Karte Befindet
* Wird nur Klassenintern Verwendet
* @return true wenn keine Karten Vorhanden, false wenn kein Karte vorhanden
*/
private int getZiestapelAnzahl() {
int anzahl = 0;
for(Karte karte: kartensatz) {
if(karte.getAblageort() == Ablageort.ZIESTAPEL) {
anzahl++;
}
}
return anzahl;
}
} }