improvements
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user