/* ============================================================ This is the "Spiel" file from Author: Philipp Kotte written on: 05 / 10 / 2023 at: 23:25 ============================================================ */ package Facade; import java.io.Serializable; import java.util.HashMap; import Domain.Kartenstapel; import Domain.Spieler; import Domain.Stich; import Domain.Block.Block; import Domain.Enums.Geschlecht; import Domain.Exceptions.EmptyListException; import Domain.Exceptions.SpielerNotFoundException; import Domain.Karten.Karte; public class Spiel implements Serializable { /*--------------------------------------------------------*/ // statische Konstanten /*--------------------------------------------------------*/ private static final String ANSI_RESET = "\u001B[0m"; private static final String ANSI_GREEN = "\u001B[32m"; private static final String ANSI_RED = "\u001B[31m"; public static final String ANSI_BLUE = "\u001B[34m"; /*--------------------------------------------------------*/ // statische Attribute(zB. zähler) /*--------------------------------------------------------*/ /*--------------------------------------------------------*/ // Attribute jedes Objektes /*--------------------------------------------------------*/ private boolean istGestartet; private boolean istBeendet; private Spieler spielerAmZug; private int runde; private HashMap spieler = new HashMap<>(); private HashMap stiche = new HashMap<>(); private boolean[] id_check = { false, false, false, false, false, false }; private Kartenstapel kartenstapel; private Block block; /*--------------------------------------------------------*/ // Konstruktoren (default und spezifische) /*--------------------------------------------------------*/ public Spiel() { this.istGestartet = false; this.istBeendet = false; this.spielerAmZug = null; this.runde = 0; this.kartenstapel = new Kartenstapel(); }; /*--------------------------------------------------------*/ // statische Methoden /*--------------------------------------------------------*/ /*--------------------------------------------------------*/ // Getter und Setter /*--------------------------------------------------------*/ public void setSpielGestartet(boolean gestarted) { this.istGestartet = gestarted; } public void setSpielBeendet(boolean beendet) { this.istBeendet = beendet; } public void setRunde(int runde) { this.runde = runde; } public void setSpielerAmZug(Spieler spieler) { this.spielerAmZug = spieler; } /*--------------------------------------------------------*/ // @Overrides /*--------------------------------------------------------*/ @Override public String toString() { String text = "\n"; String header = "Systemausgabe--------------------------------\n"; String footer = "---------------------------------------------\n"; text += header; text += "Runde: " + getRunde() + "\n"; text += "Gestartet : " + (istSpielGestartet() ? "Ja " : "Nein ") + "\n"; text += "Beendet: " + (istSpielBeendet() ? "Ja" : "Nein") + "\n"; text += "Spieler am Zug: " + (this.spielerAmZug == null ? "Noch keine Spieler vorhanden" : this.spielerAmZug.getName()) + "\n"; if (this.spieler.size() == 0) { text += "Noch keine Spieler vorhanden \n"; } else { for (Spieler s : this.spieler.values()) { text += "[" + s.getId() + "] " + s.getName() + " (" + s.getGeschlecht() + ")" + "\n"; } } for (int i = 0; i < this.id_check.length; i++) { if (this.id_check[i]) { text += "idcheck" + ANSI_BLUE + " [" + i + "] " + ANSI_GREEN + this.id_check[i] + ANSI_RESET + " \n"; } else { text += "idcheck" + ANSI_BLUE + " [" + i + "] " + ANSI_RED + this.id_check[i] + ANSI_RESET + " \n"; } } text += footer; return text; } /*--------------------------------------------------------*/ // öffentliche Methodes /*--------------------------------------------------------*/ public void addSpieler(String name, Geschlecht geschlecht) { int id = 1; while (id_check[id - 1]) { id++; } id_check[id - 1] = true; Spieler temp = new Spieler(id, name, geschlecht); this.spieler.put(id, temp); System.out.println(this.spieler.get(id)); if (this.spielerAmZug == null) { this.spielerAmZug = temp; } updateSpielerAmZug(); } public void removeSpieler(int id_spieler) throws SpielerNotFoundException, EmptyListException, RuntimeException { if (this.spieler.containsKey(id_spieler)) { this.spieler.remove(id_spieler); this.id_check[id_spieler - 1] = false; } else if (!this.spieler.containsKey(id_spieler)) { throw new SpielerNotFoundException("Dieser Spieler existiert nicht"); } else if (this.spieler.values().size() == 0) { throw new EmptyListException("Diese Liste ist Leer."); } else { throw new RuntimeException("Unkown Error"); } updateSpielerAmZug(); } public String[] getAlleSpieler() { String[] spieler_text = new String[this.spieler.size()]; int zähler = 0; for (Spieler s : this.spieler.values()) { spieler_text[zähler] = s.toString(); zähler++; } return spieler_text; } public void starteSpiel() { // sing genügend Spieler angelegt? if (this.spieler.size() >= 3 && this.spieler.size() <= 6) { this.istGestartet = true; while (!this.istSpielBeendet()) { System.out.println("Das Spiel wurde gestartet."); // Beginn der Runde // Stiche erstellen erstelleStiche(this.runde); // Karten für jeden Spieler verteilen // While loop mit der länge der anzahl Stiche für die jeweilige Runde // Für jeden Durchgang des Loops wird der Stich ermittelt // Wer gewonnen hat wird dann der Stich zugeordnet // prüfen ob das Spiel zuende ist // Der Spieler der jetzt am Zug ist, ist der der den letzten Stich gewonne hat // Runde erhöhen runde++; } } else { System.out.println("Es fehlen " + (3 - this.spieler.size()) + " spieler"); } } public String[] getSpielerAmZug() { return new String[1]; } public boolean istSpielGestartet() { return this.istGestartet; } public boolean istSpielBeendet() { return this.istBeendet; } public String[][] getBlock() { return new String[0][0]; } public String getGewinner() { return ""; } public int getRunde() { return this.runde; } public void mischen() { } public void austeilen() { // Spieler 1 bekommt karten // Spieler 2 bekommt Karten // ... // letzer Spieler bekommt Karten } public void ausspielen(int idKarte) { } public void vorhersagen(int stiche) { } /*--------------------------------------------------------*/ // Hilfsmethoden (privat) /*--------------------------------------------------------*/ private void erstelleStiche(int runde) { for (int i = 0; i < runde; i++) { this.stiche.put(i + 1, new Stich(this.spieler.size())); } } private void ermittleGewinner(Stich stich) { stich.getKarten(); } private void updateSpielerAmZug() { if (this.spieler.size() >= 1) { this.spielerAmZug = (Spieler) this.spieler.values().toArray()[0]; } else { this.spielerAmZug = null; } } }