/** * 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; }
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; }
/** * - 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); }
private boolean isCardInCurrentRound(PlayCard pc) { final Stich r = getCurrentStich(); return (r != null && r.getStichNr() == pc.getStichNr()); }