From acb915b611df8d3bbd8df7be62a74e17e11b4c3b Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Wed, 18 Mar 2026 17:49:11 +0100 Subject: [PATCH] Logic Player Completely changed --- .../Cards/Building/Effects/Building0.java | 31 +++++-------- .../Cards/Building/Effects/Building10.java | 13 ++---- .../Cards/Building/Effects/Building11.java | 4 +- .../Cards/Building/Effects/Building4.java | 16 ++----- .../Cards/Building/Effects/Building8.java | 6 +-- .../ingsw/gc14/Model/Cards/TribeCard.java | 6 ++- .../Model/Cards/TribeCards/Character.java | 2 +- .../Model/Cards/TribeCards/EventCard.java | 2 +- .../TribeCards/Events/CavePaintings.java | 9 +--- .../Model/Cards/TribeCards/Events/Hunt.java | 10 +--- .../TribeCards/Events/ShamanicRitual.java | 2 +- .../it/polimi/ingsw/gc14/Model/Player.java | 46 +++++++++++-------- 12 files changed, 62 insertions(+), 85 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building0.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building0.java index 026068e..2732523 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building0.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building0.java @@ -2,6 +2,7 @@ package it.polimi.ingsw.gc14.Model.Cards.Building.Effects; import it.polimi.ingsw.gc14.Model.Cards.Building.EffectType; import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.Artist; import it.polimi.ingsw.gc14.Model.Player; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Character; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType; @@ -31,16 +32,12 @@ public class Building0 extends BuildingCard { { return; } - HashMap map = new HashMap(); - for(CharacterType t : CharacterType.values()) + numSet=player.getNType(CharacterType.INVENTOR); + for(CharacterType type : CharacterType.values()) { - map.put(t, 0); + if(player.getNType(type)<=numSet) + numSet=player.getNType(type); } - for(Character c : player.getCharacterCards()) - { - map.merge(c.getType(), 1, Integer::sum); - } - numSet= map.values().stream().min(Integer::compareTo).get(); purchased = true; } @@ -50,22 +47,18 @@ public class Building0 extends BuildingCard { } @Override public void applyEffect(Player player) { - HashMap map = new HashMap(); - - for(CharacterType t : CharacterType.values()) + int min_temp=player.getNType(CharacterType.INVENTOR); + for(CharacterType type : CharacterType.values()) { - map.put(t, 0); + if(player.getNType(type)<=min_temp) + min_temp=player.getNType(type); } - for(Character c : player.getCharacterCards()) - { - map.merge(c.getType(), 1, Integer::sum); - } - int temp = map.values().stream().min(Integer::compareTo).get(); - if(temp<=numSet) + if(min_temp<=numSet) { return; } - player.addFood(5*(temp-numSet)); + player.addFood(5*(min_temp-numSet)); + numSet=min_temp; }; } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building10.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building10.java index da57707..e9b5c8a 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building10.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building10.java @@ -22,17 +22,14 @@ public class Building10 extends BuildingCard { public void applyEffect(Player player) { HashMap map = new HashMap(); - for(CharacterType t : CharacterType.values()) + int numSet=player.getNType(CharacterType.INVENTOR); + for(CharacterType type : CharacterType.values()) { - map.put(t, 0); + if(player.getNType(type)<=numSet) + numSet=player.getNType(type); } - for(Character c : player.getCharacterCards()) - { - map.merge(c.getType(), 1, Integer::sum); - } - int numberOfSet = map.values().stream().min(Integer::compareTo).get(); - player.addPrestige(6 * numberOfSet); + player.addPrestige(6 * numSet); } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11.java index 3e74e19..052ce6b 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11.java @@ -27,8 +27,6 @@ public class Building11 extends BuildingCard { } @Override public void applyEffect(Player player) { - int Count = (int) player.getCharacterCards().stream() - .filter(x -> x.getType().equals(this.getIcon())).count(); - player.addPrestige(Count * this.getPrestigeMul()); + player.addPrestige(player.getNType(getIcon()) * this.getPrestigeMul()); } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building4.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building4.java index 1c27142..2f1bcfe 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building4.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building4.java @@ -29,13 +29,9 @@ public class Building4 extends BuildingCard { { map.put(i,0); } - - for(Character c : player.getCharacterCards()) + for(Inventor inv : player.inventors) { - if(c instanceof Inventor inv) - { - map.merge(inv.Icon(),1,Integer::sum); - } + map.merge(inv.Icon(),1,Integer::sum); } numPair=0; for(Integer i : map.values()) @@ -56,13 +52,9 @@ public class Building4 extends BuildingCard { { map.put(i,0); } - - for(Character c : player.getCharacterCards()) + for(Inventor inv : player.inventors) { - if(c instanceof Inventor inv) - { - map.merge(inv.Icon(),1,Integer::sum); - } + map.merge(inv.Icon(),1,Integer::sum); } int temp=0; for(Integer i : map.values()) diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building8.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building8.java index 3f681b2..f9433c5 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building8.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building8.java @@ -21,12 +21,8 @@ public class Building8 extends BuildingCard { } @Override public void applyEffect(Player player) { - ArrayList builders = player.getCharacterCards().stream() - .filter(c -> c instanceof Builder) - .map(c -> (Builder) c) - .collect(Collectors.toCollection(ArrayList::new)); - for (Builder builder : builders) { + for (Builder builder : player.builders) { player.addPrestige(builder.getPrestigeValue() * 2); } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCard.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCard.java index 7e374e8..eb41dfb 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCard.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCard.java @@ -3,7 +3,11 @@ package it.polimi.ingsw.gc14.Model.Cards; import it.polimi.ingsw.gc14.Model.PlayableCard; public abstract class TribeCard extends PlayableCard { - public TribeCard(int Era) { + private boolean isEventCard; + public boolean IsEventCard() { + return isEventCard; + } + public TribeCard(int Era,boolean IsEventCard) { super(Era); } } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Character.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Character.java index 203d87a..a02a098 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Character.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Character.java @@ -11,7 +11,7 @@ public abstract class Character extends TribeCard implements Cloneable { } public Character(int Era, CharacterType type){ - super(Era); + super(Era,false ); this.type = type; } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/EventCard.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/EventCard.java index 9091a81..82d8f11 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/EventCard.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/EventCard.java @@ -14,7 +14,7 @@ public abstract class EventCard extends TribeCard { // Constructors public EventCard(int Era, EventType type) { - super(Era); + super(Era,true); this.type = type; } // End Constructors diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/CavePaintings.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/CavePaintings.java index f11a270..23c1b0d 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/CavePaintings.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/CavePaintings.java @@ -3,6 +3,7 @@ package it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events; import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; import it.polimi.ingsw.gc14.Model.Cards.TribeCard; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Character; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.Artist; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventCard; @@ -25,16 +26,10 @@ public class CavePaintings extends EventCard { @Override public void activateEvent (ArrayList playerList){ for (Player player : playerList){ - int NArtists = 0; + int NArtists = player.getNType(CharacterType.ARTIST); int NBuildings = 0; - ArrayList charCards = player.getCharacterCards(); ArrayList buildingCards = player.getBuildingCards(); - for (Character card : charCards){ - if(card instanceof Artist){ - NArtists++; - } - } for(BuildingCard card : buildingCards){ if(card.getEffectId() == 9){ NBuildings++; diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Hunt.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Hunt.java index 5bd3b0d..82c72fe 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Hunt.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/Hunt.java @@ -2,6 +2,7 @@ package it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events; import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Character; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.Hunter; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventCard; @@ -20,15 +21,8 @@ public class Hunt extends EventCard { @Override public void activateEvent (ArrayList playerList){ for (Player player : playerList) { - ArrayList characterList= player.getCharacterCards(); ArrayList buildingList = player.getBuildingCards(); - int hunterCounter=0; - - for (Character character : characterList) { - if (character instanceof Hunter) { - hunterCounter++; - } - } + int hunterCounter=player.getNType(CharacterType.HUNTER); for (BuildingCard buildingCard : buildingList) { if (buildingCard.getEffectId() == 7) { diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/ShamanicRitual.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/ShamanicRitual.java index 7ddef82..33a8e0b 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/ShamanicRitual.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Events/ShamanicRitual.java @@ -15,7 +15,7 @@ public class ShamanicRitual extends EventCard { } - // TODO + // TODO รจ completamente scorretto... da controllare numero icone sciamani @Override public void activateEvent (ArrayList playerList){ int maxPrestige = playerList.get(0).getPrestigeValue(); diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Player.java b/src/main/java/it/polimi/ingsw/gc14/Model/Player.java index d20dade..7e2be36 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Player.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Player.java @@ -2,10 +2,13 @@ package it.polimi.ingsw.gc14.Model; import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; import it.polimi.ingsw.gc14.Model.Cards.TribeCard; -import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Character; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.*; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; import static java.lang.Math.abs; @@ -16,20 +19,20 @@ public class Player { return UserName; } - private ArrayList CharacterCards; - public ArrayList getCharacterCards() { - ArrayList copy = new ArrayList <>(); - ArrayList temp = new ArrayList <>(); - temp.addAll(artists); - temp.addAll(builders); - temp.addAll(gatherers); - temp.addAll(inventors); - temp.addAll(shamans); - temp.addAll(hunters); - for(Character character:CharacterCards){ - copy.add(character.clone()); - } - return copy; + public int getTotCharacters() { + return Arrays.stream(CharacterType.values()) + .mapToInt(this::getNType) + .sum(); + } + public int getNType(CharacterType type) { + return switch (type) { + case ARTIST -> artists.size(); + case INVENTOR -> inventors.size(); + case HUNTER -> hunters.size(); + case BUILDER -> builders.size(); + case SHAMAN -> shamans.size(); + case GATHERERS -> gatherers.size(); + }; } private ArrayList BuildingCards; @@ -71,9 +74,7 @@ public class Player { this.FoodValue += Value; } - // TODO, chiedere prof (throws IllegalArgument) public Boolean removeFood(int Value){ - // Value = abs(Value); chiedere prof if(Value > this.FoodValue){ return false; } @@ -95,8 +96,15 @@ public class Player { // Constructors public Player(String UserName){ this.UserName = UserName; - this.CharacterCards = new ArrayList(); - this.BuildingCards = new ArrayList(); + + this.inventors = new ArrayList <>(); + this.builders = new ArrayList <>(); + this.gatherers = new ArrayList <>(); + this.shamans = new ArrayList <>(); + this.hunters = new ArrayList <>(); + this.artists = new ArrayList<>(); + + this.BuildingCards = new ArrayList<>(); this.FoodValue = 0; this.PrestigeValue = 0; }