public int zugErlaubt( int kartennummer) { // überprüft, ob der zug erlaubt ist (Abarbeiten der erlaubten fälle) String karteDieVersuchtWirdZuLegen = einzelneKarte(kartennummer); char farbeDieVersuchtWirdZuLegen = karteDieVersuchtWirdZuLegen.charAt(1); char IDDieVersuchtWirdZuLegen = karteDieVersuchtWirdZuLegen.charAt(0); if (stapel.gebeFarbe() == '4') { // Ist die Farbe der obersten Karte schwarz, so muss die karte aus der ersten // Runde sein und das ablegen jeder karte ist erlaubt return 4; // normales ablegen } if (farbeDieVersuchtWirdZuLegen == '4') { // Sonderfall schwarze Karten if (IDDieVersuchtWirdZuLegen == 'd') { return farbWechselKarte(0); // normale farbwechselkarte } if (IDDieVersuchtWirdZuLegen == 'c' && hatKeineAndereMoeglichkeit()) { // +4 darf nur gelegt werden, wenn keine andere // möglichkeit stapel.setzeZiehFlag(4); System.out.println(name + "Du hast eine +4 gelegt!"); System.out.println(name + "Die Gegnerin wird 4 Karten ziehen müssen oder kontern!"); return farbWechselKarte(1); // +4 mit farbwechsel } else if (IDDieVersuchtWirdZuLegen == 'c' && !hatKeineAndereMoeglichkeit()) { strafKarte( name + "Du hast versucht eine plus4 zu legen obwohl du noch andere Möglichkeiten hattest!\n\tDu musst eine Strafkarte ziehen!"); return -1; // Zug nicht erlaubt } } if (IDDieVersuchtWirdZuLegen == stapel.gebeID() || farbeDieVersuchtWirdZuLegen == stapel.gebeFarbe()) { // Fall selbe ID oder Fall selbe Farbe wahr if (IDDieVersuchtWirdZuLegen == 'a') { stapel.setzeZiehFlag(2); System.out.println(name + "Du hast eine +2 gelegt!"); System.out.println( name + "Die Nächste muss kontern oder " + stapel.gebeZiehFlag() + " Karten ziehen!"); return 4; // normales ablegen } else if (IDDieVersuchtWirdZuLegen == 'b') { System.out.println(name + "Du hast eine Aussetzen-Karte gelegt!"); aussetzen(true); return 4; // normales ablegen } System.out.println("Zug erfolgreich!"); return 4; // karte darf gelegt werden (wenn das Programm hier ankommt, dann erfordert die // Karte keine Sonderbehandlung) } else if (IDDieVersuchtWirdZuLegen != stapel.gebeID()) { // Fall Fehler wegen unterschiedlicher ID strafKarte( name + "Du hast versucht eine andere Zahl auf den Stapel zu legen als die oberste Karte! \nDu erhälst eine Strafkarte!"); return -1; } else if (farbeDieVersuchtWirdZuLegen != stapel.gebeFarbe()) { // Fall Fehler wegen unterschiedlicher Farbe strafKarte( name + "Du hast versucht eine andere Farbe zu legen. Du erhälst eine strafkarte!"); return -1; // Zug nicht erlaubt } return -1; // nicht erlaubt }
public void Zug() { // Durchführen des eigentlichen Zuges (Ziehen, reagieren auf +karten Fälle, ...) System.out.println("SPIELERIN " + ID + " IST AM ZUG!"); String gewaehlteKarte = ""; boolean error; int konterID = 0; stapel.gebeObersteKarteAus(); this.kartenAusgeben(); // überprüfen ob karte gelegt werden darf do { if (stapel.gebeZiehFlag() == 0) { gewaehlteKarte = leseEingabe( name + "Bitte eine Karte auswählen (Kartennummer angeben), oder unter dem Zug einer neuen Karte passen! (0 eingeben). \n\tUm \"UNO\" zu rufen ein \"u\" vor die Zahl setzen!"); error = erkenneEingabe(gewaehlteKarte); // eigentlicher Zug } else { gewaehlteKarte = leseEingabe( name + "Dein Gegner hat eine ziehen-karte gelegt. Du kannst kontern (Kartennummer angeben) oder die karten ziehen (0 eingeben). \n\tUm \"UNO\" zu rufen ein \"u\" vor die Zahl setzen!"); konterID = kontern(gewaehlteKarte); if (konterID == 1) { // Spieler wird nach fehlgeschlagenen Konter gegen +2 übersprungen this.kartenAusgeben(); error = false; } else if (konterID == 2) { this.kartenAusgeben(); error = false; // der Spieler wird wegen des fehlgeschlagenen konters nicht übersprungen (konter gegen // eine +4 fehlgeschlagen) gewaehlteKarte = leseEingabe( name + "Bitte eine Karte auswählen (Kartennummer angeben), oder unter dem Zug einer neuen Karte passen! (0 eingeben). \n\tUm \"UNO\" zu rufen ein \"u\" vor die Zahl setzen!"); error = erkenneEingabe(gewaehlteKarte); // eigentlicher Zug } else if (konterID == 0) { System.out.println(name + "Du hast erfolgreich gekontert!"); error = false; } else { error = false; } } if (error) { System.out.println(name + "Falsche Eingabe, bitte erneut versuchen!"); } } while (error); }
int kontern( String gewaehlteKarte) { // Überprüfen, ob die Spielerin kontern kann, Durchführen des Konters // oder des Kartenziehens unter Berücksichtigung der Ausnahmefälle int fehlerID = pruefeEingabe(gewaehlteKarte); String karte = ""; int kartennummer = 0; if (fehlerID == 1) { // kein Uno eingegeben kartennummer = Integer.parseInt(gewaehlteKarte); } else if (fehlerID == 2) { // uno eingegeben kartennummer = Integer.parseInt(gewaehlteKarte.substring(1, gewaehlteKarte.length())); } if (kartennummer != 0) { karte = einzelneKarte(kartennummer); } boolean error; do { int eingabeID = konterEingabe( gewaehlteKarte); // 0 = kein fehler, kein uno / 1= uno, kein fehler / -1 = fehler if (eingabeID == 0) { // spielerin zieht die karten, es kann auch kein UNO auftreten error = false; } else if (eingabeID == 1) { // spielerin hat uno gerufen error = false; } else if (eingabeID == 2) { // spielerin hat kein uno gerufen error = false; } else { error = true; } if (error) { System.out.println(name + "Falsche Eingabe, bitte erneut versuchen!"); } } while (error); if (karte.equals("c4") || (karte.contains("a") && karte.charAt(1) == stapel.gebeFarbe())) { if (karte.equals("c4") && hatKeineAndereMoeglichkeit()) { stapel.setzeZiehFlag(4); System.out.println(name + "Du hast mit einer +4 gekontert!"); System.out.println( name + "Der nächste muss kontern oder " + stapel.gebeZiehFlag() + " Karten ziehen!"); farbWechselKarte(1); entferneGewisseKarte(kartennummer); return 0; // erfolgreich gekontert } else { stapel.setzeZiehFlag(2); System.out.println(name + "Du hast mit einer +2 gekontert!"); System.out.println( name + "Der Nächste muss kontern oder " + stapel.gebeZiehFlag() + " Karten ziehen!"); entferneGewisseKarte(kartennummer); return 0; // erfolgreich gekontert } } else { System.out.println("Du hast nicht gekontert!"); plusXZiehen(stapel.gebeZiehFlag()); if (stapel.gebeID() == 'c') { stapel.resetZiehflag(); return 2; // Konter gegen eine +4 fehlgeschlagen (Spieler wird nicht übersprungen) } else { stapel.resetZiehflag(); return 1; // Konter gegen eine +2 fehlgeschlagen (Spieler wird übersprungen) } } }