Esempio n. 1
0
    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
    }
Esempio n. 2
0
    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);
    }
Esempio n. 3
0
 int farbWechselKarte(
     int
         ID) { // Führt eine Farbwechselkarte aus, unter Berücksichtigung ob es eine
               // Farbwechselkarte oder eine +4 war
   boolean error;
   String eingabe;
   int farbWunsch;
   if (ID == 0) {
     System.out.println(
         "Du hast eine Farbwechselkarte gelegt! Zu welcher Farbe möchtest du wechseln? \n"
             + "0 für Blau, 1 für Grün, 2 für Gelb, 3 für Rot");
   } else {
     System.out.println(
         "Deine +4 beinhaltet einen Farbwechsel! Zu welcher Farbe möchtest du wechseln? \n"
             + "0 für Blau, 1 für Grün, 2 für Gelb, 3 für Rot");
   }
   do {
     eingabe = scanner.nextLine();
     if (eingabe.matches("[0-3]")) {
       farbWunsch = Integer.parseInt(eingabe);
       stapel.setzeNeueFarbe(Character.forDigit(farbWunsch, 10));
       return farbWunsch;
     } else {
       error = true;
     }
     if (error) {
       System.out.println("Falsche Eingabe, bitte erneut versuchen!");
     }
   } while (error);
   return -1;
 }
Esempio n. 4
0
 boolean zugVersuchen(
     String eingabe,
     int
         uno) { // Versuchen, einen Zug durchzuführen, bei Fehler reagieren darauf (Karten ziehe,
                // ...). Die Methode entfernt auch eine gelegte Karte aus den Spielerkarten)
   int kartennummer;
   if (uno == 1) { // Uno muss geprüft werden
     unoIsTrue(true);
     kartennummer =
         Integer.parseInt(
             eingabe.substring(1, eingabe.length())); // es steht ein U am anfang vom string
   } else {
     unoIsTrue(false); // überprüfen, ob uno hätte gerufen werden müssen
     kartennummer = Integer.parseInt(eingabe); // es steht kein U am anfang vom string
   }
   int zug = zugErlaubt(kartennummer);
   if (zug == 4) {
     zugDurchfueren(
         einzelneKarte(kartennummer)); // Die oberste Karte des Stapels wird die augewählte Karte
     entferneGewisseKarte(kartennummer);
     return true;
   } else if (zug == 0 | zug == 1 | zug == 2
       | zug == 3) { // Farbkartenbehandlung (Farbwechsel und +4)
     String karteTemp = einzelneKarte(kartennummer);
     char IDtemp = karteTemp.charAt(0);
     stapel.neueObersteKarte(
         "" + IDtemp + zug); // Die oberste Karte des Stapels wird die augewählte Karte
     entferneGewisseKarte(kartennummer);
   } else {
     return false;
   }
   return false;
 }
Esempio n. 5
0
  public static void main(String[] args) {
    boolean weiterSpielen = true;

    while (weiterSpielen) {
      if (runde == 0 && spiel == 0) {
        intro();
      }
      if (runde == 0) {
        startStapel();
        stapel.zieheErsteKarte();
        scrollTerminal();
      }
      if (runde % 2 == 0) { // entscheidet ob Spielerin1 oder Spielerin2 an der reihe ist
        spieler1.Zug();
      } else {
        spieler2.Zug();
      }
      System.out.println("");
      System.out.println("Setze fort in 3 sek");
      warten(3000);
      scrollTerminal();
      warten(500);
      runde++;
      if (spieler1.karten.length() == 0) {
        System.out.println("Spielerin 1 hat gewonnen!");
        weiterSpielen = rundenAuswertung();
        spiel++;
      } else if (spieler2.karten.length() == 0) {
        System.out.println("Spielerin 2 hat gewonnen!");
        weiterSpielen = rundenAuswertung();
        spiel++;
      }
    }
  }
Esempio n. 6
0
 boolean
     hatKeineAndereMoeglichkeit() { // Überprüft, ob der Spieler eine andere Karte außer der +4
                                    // legen kann
   String colorAll = "";
   String IDAll = "";
   for (int i = 1; i < karten.length(); i = i + 2) { // Alle Farben in einen String
     colorAll += karten.charAt(i);
   }
   for (int i = 0; i < karten.length(); i = i + 2) { // Alle IDs in einen String
     IDAll += karten.charAt(i);
   }
   if (IDAll.contains("d")
       || (IDAll.contains("" + stapel.gebeID()) && stapel.gebeID() != 'c')
       || (colorAll.contains("" + stapel.gebeFarbe()) && stapel.gebeID() != 'c')) {
     return false; // Spielerin hat noch andere Möglichkeiten zu legen
   } else {
     return true; // Spielerin kann nur diese +4 legen
   }
 }
Esempio n. 7
0
 void plusXZiehen(
     int
         anzahl) { // wenn eine spielerin wg. einer Strafkarte ziehen muss, wird diese methode
                   // aufgerufen
   System.out.println(name + "Du hast " + anzahl + " Karten gezogen");
   for (int i = 0; i < anzahl; i++) {
     neueKarte();
   }
   stapel.resetZiehflag();
 }
Esempio n. 8
0
    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)
        }
      }
    }
Esempio n. 9
0
 void zugDurchfueren(String karte) {
   stapel.neueObersteKarte(karte); // Die oberste Karte des Stapels wird die augewählte Karte
 }