Beispiel #1
0
  /**
   * - Stichgewinner ermitteln - Mitspieler im gleichen Team ermitteln - Punkte zählen und allen im
   * Team addieren
   */
  private void calculatePointsInRound(final Stich stich) {

    final List<PlayCard> stichcards = new ArrayList<>();
    for (PlayCard c : playcards) {
      if (c.getStichNr() == stich.getStichNr()) {
        stichcards.add(c);
      }
    }

    // Nach Spielreihenfolge sortieren
    Collections.sort(stichcards, this.stichSorter);

    // Erste Karte merken
    final PlayCard karte1 = stichcards.get(0);
    PlayCard winnerCard = null;
    Player winner = null;
    int points = 0;

    for (PlayCard c : stichcards) {
      if (winner == null) {
        winner = karte1.getOwner();
        winnerCard = karte1;
      } else {
        int r1 = winnerCard.getRank(trumpfFarbe);
        // Abgeworfen, dann rank 0
        int r2 =
            c.getFarbe() != karte1.getFarbe() && c.getFarbe() != trumpfFarbe
                ? 0
                : c.getRank(trumpfFarbe);
        if (r2 > r1) {
          winner = c.getOwner();
          winnerCard = c;
        }
      }
      points += c.getPoints();
      // Zusatzgewinne
      // 1) Jass
      if (c.isJass(trumpfFarbe)) {
        points += 20;
      }
      // 2) Mie
      if (c.isMie(trumpfFarbe)) {
        points += 14;
      }
      // letzter Stich bekommt 10 Extrapunkte
      if (this.maxStichNr == c.getStichNr()) {
        points += 10;
      }
    }
    stich.setWinner(winner);
    stich.setPoints(points);
    log.info(
        "Round "
            + stich.getStichNr()
            + ": "
            + points
            + " points for player "
            + winner.getUsername()
            + ", stich="
            + stichcards);
  }