From 45374250a972755ac2b0cde3812a54e562b3b4e9 Mon Sep 17 00:00:00 2001 From: lorenzo Date: Mon, 13 Apr 2026 22:18:14 +0200 Subject: [PATCH] improvements --- src/main/java/server/Tribe.java | 82 ++++++++++++++------------------- 1 file changed, 35 insertions(+), 47 deletions(-) diff --git a/src/main/java/server/Tribe.java b/src/main/java/server/Tribe.java index e51f648..8e37706 100644 --- a/src/main/java/server/Tribe.java +++ b/src/main/java/server/Tribe.java @@ -6,8 +6,10 @@ import server.cards.CharacterType; import server.cards.Trigger; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; - +import java.util.Map; +import java.util.stream.Collectors; public class Tribe { @@ -93,38 +95,31 @@ public class Tribe { // Metodo che restituisce i punti finali degli inventori public int inventorsEndPoints() { - int inventorCount = 0; - List uniqueInventions = new ArrayList<>(); + long inventorCount = characters.stream() + .filter(c -> c.getCharacterType() == CharacterType.INVENTOR) + .count(); - for (CharacterCard c : characters) { - if (c.getCharacterType() == CharacterType.INVENTOR) { - inventorCount++; + long uniqueInventions = characters.stream() + .filter(c -> c.getCharacterType() == CharacterType.INVENTOR) + .map(CharacterCard::getIconValue) + .distinct() + .count(); - int inventionId = c.getIconValue(); // Usiamo l'iconValue del file cards.csv - - // Se non abbiamo ancora contato questa invenzione, la aggiungiamo - if (!uniqueInventions.contains(inventionId)) { - uniqueInventions.add(inventionId); - } - } - } - return inventorCount * uniqueInventions.size(); + return (int) (inventorCount * uniqueInventions); } + // Metodo che restituisce i punti finali degli artisti public int artistsEndPoints() { return (artistsNumber() / 2) * 10; // in java 1/2 fa 0 } - // Metodo che restituisce i punti finali dei costruttori + // Metodo che restituisce i punti finali dei costruttore public int buildersEndPoints() { - int points = 0; - for (CharacterCard c : characters) { - if (c.getCharacterType() == CharacterType.BUILDER) { - points += c.getPrestigePoints(); - } - } - return points; + return characters.stream() + .filter(c -> c.getCharacterType() == CharacterType.BUILDER) + .mapToInt(CharacterCard::getPrestigePoints) + .sum(); } // Metodo che restituisce i punti finali guadagnati grazie agli EFFETTI delle carte building @@ -135,9 +130,7 @@ public class Tribe { Trigger trigger = b.getAbilityTrigger(); // leggiamo il trigger della carta edificio // Se la carta per qualche motivo non ha trigger, passiamo alla prossima - if (trigger == null) { - continue; - } + if (trigger == null) continue; switch (trigger) { case ENDGAME_BUILDER_BONUS: // id carta: 107 @@ -146,28 +139,23 @@ public class Tribe { case ENDGAME_FOR_SIX: // id carta: 109 // Prepariamo i contatori per tutti e 6 i tipi di characters - int inv = 0, hun = 0, gat = 0, sha = 0, art = 0, bui = 0; + Map counts = characters.stream() + .collect(Collectors.groupingBy(CharacterCard::getCharacterType, Collectors.counting())); + long completeSets = Arrays.stream(new CharacterType[]{ + CharacterType.INVENTOR, + CharacterType.HUNTER, + CharacterType.GATHERER, + CharacterType.SHAMAN, + CharacterType.ARTIST, + CharacterType.BUILDER + }) + .mapToLong(t -> counts.getOrDefault(t, 0L)) + .min() + .orElse(0); - // contiamo le carte nella tribù - for (CharacterCard c : characters) { - switch (c.getCharacterType()) { - case INVENTOR: inv++; break; - case HUNTER: hun++; break; - case GATHERER: gat++; break; - case SHAMAN: sha++; break; - case ARTIST: art++; break; - case BUILDER: bui++; break; - } - } + // aggiungiamo 6 punti prestigio per ogni set completo + bonusPoints += completeSets * 6; - // troviamo il numero di set completi - int min1 = Math.min(inv, hun); - int min2 = Math.min(gat, sha); - int min3 = Math.min(art, bui); - int completeSets = Math.min(Math.min(min1, min2), min3); - - // aggiungiamo 6 punti prestigio per ogni set completo - bonusPoints += (completeSets * 6); break; case ENDGAME_BONUS_CHARACTER: @@ -220,7 +208,7 @@ public class Tribe { total += b.getEndPP(); } - // sommiamo gli effetti degli edifici sul punteggio finale, NON quelli durante la partita + //TODO sommiamo gli effetti degli edifici sul punteggio finale, NON quelli durante la partita total += buildingAbilitiesEndPoints(); return total;