Beispiel #1
0
 /**
  * Spielende feststellen: wenn alle gegebenen Karten im Stich verwendet worden sind.
  *
  * @return True, wenn alle gegebenen Karten im Stich verwendet worden sind.
  */
 private boolean areCardsAvailable() {
   for (PlayCard c : playcards) {
     if (c.getOwner() != null && c.getStichNr() == 0) {
       return true;
     }
   }
   log.info("Cards available: NO");
   return false;
 }
Beispiel #2
0
  private List<CardInfo> buildCardInfo() {

    final List<CardInfo> info = new ArrayList<>();
    final Map<Integer, CardInfo> roundCards = new HashMap<>();

    for (final PlayCard card : playcards) {
      final CardInfo ci = new CardInfo(card.getKarte());
      ci.setOffen(card.getOwner() != null && !card.getOwner().isComputer());
      ci.setPlayerPosition(card.getOwner() != null ? card.getOwner().getPosition() : 0);

      CardPlace location = CardPlace.Invisible; // Karte bereits gespielt

      // 0=bereits gespielt/nicht sichtbar, 1=auf Hand, 2=Original, 3=Stich, 4=Stapel

      if (card.equals(original)) {
        if (!originalSelected) {
          location = CardPlace.Original; // Aufgedeckt vor dem Spieler anzeigen
        }
      }
      if (location == CardPlace.Invisible && isCardInCurrentRound(card)) {
        location = CardPlace.Bid; // im aktuellen Stich
        roundCards.put(card.getBidNr(), ci);
      }
      if (location == CardPlace.Invisible && card.getOwner() == null) {
        location = CardPlace.Stock; // im Stapel
      }
      if (location == CardPlace.Invisible && card.getOwner() != null && card.getStichNr() == 0) {
        location = CardPlace.Hand; // Hand, nicht gespielt
      }
      ci.setCardPlace(location);
      info.add(ci);
    }
    // Integrate cards from bid in correct order
    info.removeAll(roundCards.values());
    info.addAll(roundCards.values());
    return info;
  }
Beispiel #3
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);
  }
Beispiel #4
0
 private boolean isCardInCurrentRound(PlayCard pc) {
   final Stich r = getCurrentStich();
   return (r != null && r.getStichNr() == pc.getStichNr());
 }