Logic Player Completely changed

This commit is contained in:
rubenpirreram
2026-03-18 17:49:11 +01:00
parent e98bae5a6e
commit acb915b611
12 changed files with 62 additions and 85 deletions
@@ -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.Building.EffectType;
import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; 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.Player;
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Character; 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.CharacterType;
@@ -31,16 +32,12 @@ public class Building0 extends BuildingCard {
{ {
return; return;
} }
HashMap<CharacterType,Integer> map = new HashMap<CharacterType,Integer>(); numSet=player.getNType(CharacterType.INVENTOR);
for(CharacterType t : CharacterType.values()) 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; purchased = true;
} }
@@ -50,22 +47,18 @@ public class Building0 extends BuildingCard {
} }
@Override @Override
public void applyEffect(Player player) { public void applyEffect(Player player) {
HashMap<CharacterType,Integer> map = new HashMap<CharacterType,Integer>(); int min_temp=player.getNType(CharacterType.INVENTOR);
for(CharacterType type : CharacterType.values())
for(CharacterType t : CharacterType.values())
{ {
map.put(t, 0); if(player.getNType(type)<=min_temp)
min_temp=player.getNType(type);
} }
for(Character c : player.getCharacterCards()) if(min_temp<=numSet)
{
map.merge(c.getType(), 1, Integer::sum);
}
int temp = map.values().stream().min(Integer::compareTo).get();
if(temp<=numSet)
{ {
return; return;
} }
player.addFood(5*(temp-numSet)); player.addFood(5*(min_temp-numSet));
numSet=min_temp;
}; };
} }
@@ -22,17 +22,14 @@ public class Building10 extends BuildingCard {
public void applyEffect(Player player) { public void applyEffect(Player player) {
HashMap<CharacterType,Integer> map = new HashMap<CharacterType,Integer>(); HashMap<CharacterType,Integer> map = new HashMap<CharacterType,Integer>();
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);
} }
} }
@@ -27,8 +27,6 @@ public class Building11 extends BuildingCard {
} }
@Override @Override
public void applyEffect(Player player) { public void applyEffect(Player player) {
int Count = (int) player.getCharacterCards().stream() player.addPrestige(player.getNType(getIcon()) * this.getPrestigeMul());
.filter(x -> x.getType().equals(this.getIcon())).count();
player.addPrestige(Count * this.getPrestigeMul());
} }
} }
@@ -29,13 +29,9 @@ public class Building4 extends BuildingCard {
{ {
map.put(i,0); map.put(i,0);
} }
for(Inventor inv : player.inventors)
for(Character c : player.getCharacterCards())
{ {
if(c instanceof Inventor inv) map.merge(inv.Icon(),1,Integer::sum);
{
map.merge(inv.Icon(),1,Integer::sum);
}
} }
numPair=0; numPair=0;
for(Integer i : map.values()) for(Integer i : map.values())
@@ -56,13 +52,9 @@ public class Building4 extends BuildingCard {
{ {
map.put(i,0); map.put(i,0);
} }
for(Inventor inv : player.inventors)
for(Character c : player.getCharacterCards())
{ {
if(c instanceof Inventor inv) map.merge(inv.Icon(),1,Integer::sum);
{
map.merge(inv.Icon(),1,Integer::sum);
}
} }
int temp=0; int temp=0;
for(Integer i : map.values()) for(Integer i : map.values())
@@ -21,12 +21,8 @@ public class Building8 extends BuildingCard {
} }
@Override @Override
public void applyEffect(Player player) { public void applyEffect(Player player) {
ArrayList<Builder> 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); player.addPrestige(builder.getPrestigeValue() * 2);
} }
} }
@@ -3,7 +3,11 @@ package it.polimi.ingsw.gc14.Model.Cards;
import it.polimi.ingsw.gc14.Model.PlayableCard; import it.polimi.ingsw.gc14.Model.PlayableCard;
public abstract class TribeCard extends 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); super(Era);
} }
} }
@@ -11,7 +11,7 @@ public abstract class Character extends TribeCard implements Cloneable {
} }
public Character(int Era, CharacterType type){ public Character(int Era, CharacterType type){
super(Era); super(Era,false );
this.type = type; this.type = type;
} }
@@ -14,7 +14,7 @@ public abstract class EventCard extends TribeCard {
// Constructors // Constructors
public EventCard(int Era, EventType type) { public EventCard(int Era, EventType type) {
super(Era); super(Era,true);
this.type = type; this.type = type;
} }
// End Constructors // End Constructors
@@ -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.BuildingCard;
import it.polimi.ingsw.gc14.Model.Cards.TribeCard; 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.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.Characters.Artist;
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventType;
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventCard; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventCard;
@@ -25,16 +26,10 @@ public class CavePaintings extends EventCard {
@Override @Override
public void activateEvent (ArrayList <Player> playerList){ public void activateEvent (ArrayList <Player> playerList){
for (Player player : playerList){ for (Player player : playerList){
int NArtists = 0; int NArtists = player.getNType(CharacterType.ARTIST);
int NBuildings = 0; int NBuildings = 0;
ArrayList<Character> charCards = player.getCharacterCards();
ArrayList<BuildingCard> buildingCards = player.getBuildingCards(); ArrayList<BuildingCard> buildingCards = player.getBuildingCards();
for (Character card : charCards){
if(card instanceof Artist){
NArtists++;
}
}
for(BuildingCard card : buildingCards){ for(BuildingCard card : buildingCards){
if(card.getEffectId() == 9){ if(card.getEffectId() == 9){
NBuildings++; NBuildings++;
@@ -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.BuildingCard;
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Character; 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.Characters.Hunter;
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventType;
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventCard; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventCard;
@@ -20,15 +21,8 @@ public class Hunt extends EventCard {
@Override @Override
public void activateEvent (ArrayList <Player> playerList){ public void activateEvent (ArrayList <Player> playerList){
for (Player player : playerList) { for (Player player : playerList) {
ArrayList <Character> characterList= player.getCharacterCards();
ArrayList <BuildingCard> buildingList = player.getBuildingCards(); ArrayList <BuildingCard> buildingList = player.getBuildingCards();
int hunterCounter=0; int hunterCounter=player.getNType(CharacterType.HUNTER);
for (Character character : characterList) {
if (character instanceof Hunter) {
hunterCounter++;
}
}
for (BuildingCard buildingCard : buildingList) { for (BuildingCard buildingCard : buildingList) {
if (buildingCard.getEffectId() == 7) { if (buildingCard.getEffectId() == 7) {
@@ -15,7 +15,7 @@ public class ShamanicRitual extends EventCard {
} }
// TODO // TODO è completamente scorretto... da controllare numero icone sciamani
@Override @Override
public void activateEvent (ArrayList <Player> playerList){ public void activateEvent (ArrayList <Player> playerList){
int maxPrestige = playerList.get(0).getPrestigeValue(); int maxPrestige = playerList.get(0).getPrestigeValue();
@@ -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.BuildingCard;
import it.polimi.ingsw.gc14.Model.Cards.TribeCard; 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 it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import static java.lang.Math.abs; import static java.lang.Math.abs;
@@ -16,20 +19,20 @@ public class Player {
return UserName; return UserName;
} }
private ArrayList <Character> CharacterCards; public int getTotCharacters() {
public ArrayList <Character> getCharacterCards() { return Arrays.stream(CharacterType.values())
ArrayList <Character> copy = new ArrayList <>(); .mapToInt(this::getNType)
ArrayList<Character> temp = new ArrayList <>(); .sum();
temp.addAll(artists); }
temp.addAll(builders); public int getNType(CharacterType type) {
temp.addAll(gatherers); return switch (type) {
temp.addAll(inventors); case ARTIST -> artists.size();
temp.addAll(shamans); case INVENTOR -> inventors.size();
temp.addAll(hunters); case HUNTER -> hunters.size();
for(Character character:CharacterCards){ case BUILDER -> builders.size();
copy.add(character.clone()); case SHAMAN -> shamans.size();
} case GATHERERS -> gatherers.size();
return copy; };
} }
private ArrayList <BuildingCard> BuildingCards; private ArrayList <BuildingCard> BuildingCards;
@@ -71,9 +74,7 @@ public class Player {
this.FoodValue += Value; this.FoodValue += Value;
} }
// TODO, chiedere prof (throws IllegalArgument)
public Boolean removeFood(int Value){ public Boolean removeFood(int Value){
// Value = abs(Value); chiedere prof
if(Value > this.FoodValue){ if(Value > this.FoodValue){
return false; return false;
} }
@@ -95,8 +96,15 @@ public class Player {
// Constructors // Constructors
public Player(String UserName){ public Player(String UserName){
this.UserName = UserName; this.UserName = UserName;
this.CharacterCards = new ArrayList<Character>();
this.BuildingCards = new ArrayList<BuildingCard>(); 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.FoodValue = 0;
this.PrestigeValue = 0; this.PrestigeValue = 0;
} }