Ejemplo 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
    }
Ejemplo 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);
    }
Ejemplo n.º 3
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)
        }
      }
    }