improvements

This commit is contained in:
2026-04-13 22:18:14 +02:00
parent 9a662a27a7
commit 45374250a9

View File

@@ -6,8 +6,10 @@ import server.cards.CharacterType;
import server.cards.Trigger; import server.cards.Trigger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Tribe { public class Tribe {
@@ -93,38 +95,31 @@ public class Tribe {
// Metodo che restituisce i punti finali degli inventori // Metodo che restituisce i punti finali degli inventori
public int inventorsEndPoints() { public int inventorsEndPoints() {
int inventorCount = 0; long inventorCount = characters.stream()
List<Integer> uniqueInventions = new ArrayList<>(); .filter(c -> c.getCharacterType() == CharacterType.INVENTOR)
.count();
for (CharacterCard c : characters) { long uniqueInventions = characters.stream()
if (c.getCharacterType() == CharacterType.INVENTOR) { .filter(c -> c.getCharacterType() == CharacterType.INVENTOR)
inventorCount++; .map(CharacterCard::getIconValue)
.distinct()
.count();
int inventionId = c.getIconValue(); // Usiamo l'iconValue del file cards.csv return (int) (inventorCount * uniqueInventions);
// Se non abbiamo ancora contato questa invenzione, la aggiungiamo
if (!uniqueInventions.contains(inventionId)) {
uniqueInventions.add(inventionId);
}
}
}
return inventorCount * uniqueInventions.size();
} }
// Metodo che restituisce i punti finali degli artisti // Metodo che restituisce i punti finali degli artisti
public int artistsEndPoints() { public int artistsEndPoints() {
return (artistsNumber() / 2) * 10; // in java 1/2 fa 0 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() { public int buildersEndPoints() {
int points = 0; return characters.stream()
for (CharacterCard c : characters) { .filter(c -> c.getCharacterType() == CharacterType.BUILDER)
if (c.getCharacterType() == CharacterType.BUILDER) { .mapToInt(CharacterCard::getPrestigePoints)
points += c.getPrestigePoints(); .sum();
}
}
return points;
} }
// Metodo che restituisce i punti finali guadagnati grazie agli EFFETTI delle carte building // 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 Trigger trigger = b.getAbilityTrigger(); // leggiamo il trigger della carta edificio
// Se la carta per qualche motivo non ha trigger, passiamo alla prossima // Se la carta per qualche motivo non ha trigger, passiamo alla prossima
if (trigger == null) { if (trigger == null) continue;
continue;
}
switch (trigger) { switch (trigger) {
case ENDGAME_BUILDER_BONUS: // id carta: 107 case ENDGAME_BUILDER_BONUS: // id carta: 107
@@ -146,28 +139,23 @@ public class Tribe {
case ENDGAME_FOR_SIX: // id carta: 109 case ENDGAME_FOR_SIX: // id carta: 109
// Prepariamo i contatori per tutti e 6 i tipi di characters // 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<CharacterType, Long> 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ù // aggiungiamo 6 punti prestigio per ogni set completo
for (CharacterCard c : characters) { bonusPoints += completeSets * 6;
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;
}
}
// 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; break;
case ENDGAME_BONUS_CHARACTER: case ENDGAME_BONUS_CHARACTER:
@@ -220,7 +208,7 @@ public class Tribe {
total += b.getEndPP(); 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(); total += buildingAbilitiesEndPoints();
return total; return total;