package pokerspiel;
public class Pokerspiel {
private Kartendeck deck;
// leeres Array, wird später dynamisch erweitert bis MAX_SPIELER_ANZAHL
private Spieler[] spieler = new Spieler[0];
private Karte[] communityCards = new Karte[0];
private static final int MIN_SPIELER_ANZAHL = 2;
private static final int MAX_SPIELER_ANZAHL = 8;
private static final int HAND_CARDS_ANZAHL = 2;
private static final int COMMUNITY_CARDS_ANZAHL = 5;
/**
* erstellt ein Pokerspiel mit dem Kartendeck deck
*
* @param deck
*/
public Pokerspiel(Kartendeck deck) {
this.deck = deck;
}
/**
* setzt einen Spieler an den Tisch
* <p>
* <b>tischBeitreten:</b> Fügt einen Spieler dem Pokertisch hinzu, dabei
* sollte das Maximum von 8 Spielern nicht überschritten werden!
*
* @param spieler
*/
public void tischBeitreten(Spieler spieler) {
// Methode vorzeitig beenden, wenn ein Spieler bereits am Tisch ist
if (existSpieler(spieler))
return;
// prüft ob die maximale Anzahl an Spieler bereits erreicht ist,
// wenn ja, Hinweis ausgeben, das der Spieler nicht platznehmen
// kann und Methode vorzeitig beenden
if (this.spieler.length >= MAX_SPIELER_ANZAHL) {
System.out.println(spieler.getName() + " finden keinen freien Platz am Tisch.");
return;
}
System.out.println(spieler.getName() + " nimmt am Tisch platz.");
Spieler[] tmpSpieler = new Spieler[this.spieler.length + 1];
int i = 0;
for (Spieler spieler1 : this.spieler)
tmpSpieler[i++] = spieler1;
tmpSpieler[i] = spieler;
this.spieler = tmpSpieler;
}
/**
* entfernt einen Spieler vom Tisch
* <p>
* <b>tischVerlassen:</b> Ein bestimmter Spieler verlässt den Pokertisch,
* damit wird ein Platz frei.
*
* @param spieler
*/
public void tischVerlassen(Spieler spieler) {
// tue nichts, wenn Spieler nicht am Tisch ist
if (!existSpieler(spieler))
return;
System.out.println(spieler.getName() + " verlässt den Tisch.");
Spieler[] tmpSpieler = new Spieler[this.spieler.length - 1];
int i = 0;
for (Spieler spieler1 : this.spieler) {
if (!spieler1.equals(spieler))
tmpSpieler[i++] = spieler1;
}
this.spieler = tmpSpieler;
}
/**
* prüft, ob ein Spieler bereits am Tisch ist
*
* @param spieler
* @return (true: Spieler schon vorhanden)
*/
private boolean existSpieler(Spieler spieler) {
for (Spieler spieler1 : this.spieler) {
if (spieler1.equals(spieler))
return true;
}
return false;
}
/**
* gibt jeden Spiele 2 Karten (Hand) aus dem Deck und teilt die 5 Community
* Cards aus
* <p>
* <b>austeilen:</b> Aus dem Kartendeck erhält jeder Spieler zwei Karten.
* Weiterhin werden die fünf Community Cards gesetzt.
*/
public void austeilen() {
for (Spieler spieler : this.spieler) {
Hand hand = new Hand(this.deck.getKarten(HAND_CARDS_ANZAHL));
spieler.setHand(hand);
}
this.communityCards = this.deck.getKarten(COMMUNITY_CARDS_ANZAHL);
}
/**
* gibt eine Spielübersicht zurück
* <p>
* <b>toString:</b> Erzeugt eine Übersicht des aktuellen Spiels in Form
* einer Zeichenkette. Diese soll die Community Cards sowie die Namen der
* Spieler mit ihren aktuellen Händen enthalten.
*
* @return
*/
@Override
public String toString() {
String communityCardsStr = "";
for (Karte karte : this.communityCards) {
if (!"".equals(communityCardsStr))
communityCardsStr += ", ";
communityCardsStr += karte;
}
String spielerCardsStr = "", winner = "";
int max = 0;
for (Spieler spieler : this.spieler) {
Eval eval = new Eval(communityCards, spieler.getHand().getKarten());
spielerCardsStr += spieler.getName() + ": " + spieler.getHand() + "\n" + eval + "\n";
if (eval.getScore() > max) {
max = eval.getScore();
winner = spieler.getName();
} else if (eval.getScore() == max) {
winner += ", " + spieler.getName();
}
}
return "Community Cards: " + communityCardsStr + "\n" + spielerCardsStr + "Gewinner ist: " + winner;
}
/**
* spielt eine Partie Poker, mischen, austeilen, Ausgabe, zusammenwerfen
* <p>
* <b>spielen:</b> Simuliert ein Pokerspiel, bestehend aus (1) Mischen des
* Kartendecks, (2) Austeilen der Karten, (3) Ausgeben der Spielübersicht
* (mit System.out.println()) und (4) Zusammenwerfen der Karten
*/
public void spielen() {
// prüft, ob mindestens zwei Spieler am Tisch sitzen
// wenn nicht, Hinweis ausgeben und Methode vorzeitig beenden
if (this.spieler.length < MIN_SPIELER_ANZAHL) {
System.out.println("Die Mindesanzahl an Spielern von " + MIN_SPIELER_ANZAHL
+ " für eine Pokerpartie ist nicht erreicht.");
if (this.spieler.length == 1)
System.out.println(spieler[0].getName() + " wartet auf einen weiteren Mitspieler.");
System.out.println();
return;
}
System.out.println(" +++ mische Karten +++");
this.deck.mischen();
System.out.println(" +++ verteile Karten +++");
this.austeilen();
System.out.println(this);
System.out.println(" +++ ziehe Karten ein +++\n");
this.deck.zusammenwerfen(this.communityCards);
for (Spieler spieler : this.spieler) {
this.deck.zusammenwerfen(spieler.getHand().getKarten());
}
}
}
for the next/prev image click on the picture right/left
on touch screen simply wipe with your fingers