From fd621e90c7544dda53f2cc14039358bf437269f1 Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Mon, 23 Mar 2026 17:53:50 +0100 Subject: [PATCH] Add: Board Implementation --- .../java/it/polimi/ingsw/gc14/Model/Game.java | 99 ++++------- .../ingsw/gc14/Model/GamePackage/Board.java | 168 ++++++++++++++++++ .../java/it/polimi/ingsw/gc14/Model/Slot.java | 6 +- 3 files changed, 204 insertions(+), 69 deletions(-) create mode 100644 src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java index c23be19..289ad1c 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java @@ -6,6 +6,7 @@ import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventCard; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events.ShamanicRitual; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events.Sustenance; +import it.polimi.ingsw.gc14.Model.GamePackage.Board; import it.polimi.ingsw.gc14.Model.GamePackage.CurrentState; import it.polimi.ingsw.gc14.Model.Orders.Order2; import it.polimi.ingsw.gc14.Model.Orders.Order3; @@ -18,44 +19,26 @@ import java.util.*; import java.util.stream.Collectors; public class Game { - private List slotList; - private Queue tribeDeck; - private List upperListTribe; - private List lowerListTribe; - private List upperListBuilding; - private List lowerListBuilding; private ArrayList playersList; - private OrderLogicCard orderLogicCard; - private CurrentState currentState; private HashMap slotMap; private int nPlayers; - - + private OrderLogicCard orderLogicCard; + private Board board; public Game(int nPlayers) { this.nPlayers = nPlayers; - this.slotList = DecksCreator.loadSlotDeck().stream().filter(x->x.getNMinPlayer()<=nPlayers).sorted().toList(); - slotMap = new LinkedHashMap<>(); - for(Slot s :DecksCreator.loadSlotDeck().stream().filter(x->x.getNMinPlayer()<=nPlayers).sorted().toList()) + board=new Board(nPlayers); + slotMap = new LinkedHashMap<>(); + for(Slot s :board.getSlotList()) { slotMap.put(s,null); } - - this.tribeDeck= getTribeDeck(nPlayers); - ArrayList buildingDeck = new ArrayList<>(DecksCreator.loadBuildingDeckByEra(1)); - Collections.shuffle(buildingDeck); - if(nPlayers==2) - this.upperListBuilding= buildingDeck.subList(0,1); - else - this.upperListBuilding= buildingDeck.subList(0,2); currentState= new CurrentState(); - upperListTribe = new ArrayList<>(); - lowerListTribe = new ArrayList<>(); - lowerListBuilding = new ArrayList<>(); playersList = new ArrayList<>(); } public void init() { + switch (nPlayers) { case 2: orderLogicCard=new Order2(playersList); @@ -70,27 +53,8 @@ public class Game { orderLogicCard=new Order5(playersList); break; } - - for(int i=0;i events; - events=lowerListTribe.stream().filter(TribeCard::IsEventCard).map(x->(EventCard)x).collect(Collectors.toCollection(LinkedList::new)); - - + events=board.getPendingEvents(); ArrayListsustenance=events.stream().filter(x->x.getType().equals(EventType.SUSTENANCE)).collect(Collectors.toCollection(ArrayList::new)); events.removeAll(sustenance); for(EventCard event:events) @@ -250,26 +218,21 @@ public class Game { private void nextRound() { EventResolution(); + if(currentState.getRound()==10) + { + currentState.GameStageUpdate(GameStages.ENDING); + endGame(); + } + if(currentState.getEra()!= board.nextRound()) + currentState.EraUpdate(); + currentState.RoundUpdate(); } private void endGame() { + //DO SOMETHING THEN + currentState.GameStageUpdate(GameStages.ENDED); + } - } - private Queue getTribeDeck(int nPlayers) { - ArrayList era1= DecksCreator.loadTribeDeckByEra(1).stream().filter(x->x.getNMin()<=nPlayers).collect(Collectors.toCollection(ArrayList::new)); - List era2= DecksCreator.loadTribeDeckByEra(2).stream().filter(x->x.getNMin()<=nPlayers).collect(Collectors.toCollection(ArrayList::new)); - List era3= DecksCreator.loadTribeDeckByEra(3).stream().filter(x->x.getNMin()<=nPlayers).collect(Collectors.toCollection(ArrayList::new)); - Collections.shuffle(era1); - Collections.shuffle(era2); - Collections.shuffle(era3); - Queue tribeDeck_temp=new LinkedList<>(); - tribeDeck_temp.addAll(era1); - tribeDeck_temp.addAll(era2); - tribeDeck_temp.addAll(era3); - tribeDeck_temp.add(new Sustenance(3,3)); - tribeDeck_temp.add(new ShamanicRitual(3,15,7)); - return tribeDeck_temp; - } diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java b/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java new file mode 100644 index 0000000..bf92af5 --- /dev/null +++ b/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java @@ -0,0 +1,168 @@ +package it.polimi.ingsw.gc14.Model.GamePackage; + +import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; +import it.polimi.ingsw.gc14.Model.Cards.TribeCard; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventCard; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events.ShamanicRitual; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events.Sustenance; +import it.polimi.ingsw.gc14.Model.DecksCreator; +import it.polimi.ingsw.gc14.Model.OrderLogicCard; +import it.polimi.ingsw.gc14.Model.Orders.Order2; +import it.polimi.ingsw.gc14.Model.Orders.Order3; +import it.polimi.ingsw.gc14.Model.Orders.Order4; +import it.polimi.ingsw.gc14.Model.Orders.Order5; +import it.polimi.ingsw.gc14.Model.Slot; + +import java.util.*; +import java.util.stream.Collectors; + +public class Board { + private List slotList; + private Queue tribeDeck; + private List upperListTribe; + private List lowerListTribe; + private List upperListBuilding; + private List lowerListBuilding; + private int nTotem; + private int era; + public List getSlotList(){//Da chiedere + return slotList.stream().map(x->new Slot(x.getSlotId())).collect(Collectors.toList()); + } + + public Board(int nTotem) { + this.nTotem = nTotem; + this.slotList = DecksCreator.loadSlotDeck().stream().filter(x->x.getNMinPlayer()<=nTotem).sorted(Comparator.comparingInt(Slot::getSlotId)).toList(); + upperListTribe=new ArrayList<>(); + lowerListTribe=new ArrayList<>(); + lowerListBuilding=new ArrayList<>(); + tribeDeck=getTribeDeck(nTotem); + era=1; + for(int i=0;i buildingDeck = new ArrayList<>(DecksCreator.loadBuildingDeckByEra(1)); + Collections.shuffle(buildingDeck); + if(nTotem==2) + upperListBuilding= buildingDeck.subList(0,1); + else + upperListBuilding= buildingDeck.subList(0,2); + + } + + private Queue getTribeDeck(int nPlayers) { + ArrayList era1= DecksCreator.loadTribeDeckByEra(1).stream().filter(x->x.getNMin()<=nPlayers).collect(Collectors.toCollection(ArrayList::new)); + List era2= DecksCreator.loadTribeDeckByEra(2).stream().filter(x->x.getNMin()<=nPlayers).collect(Collectors.toCollection(ArrayList::new)); + List era3= DecksCreator.loadTribeDeckByEra(3).stream().filter(x->x.getNMin()<=nPlayers).collect(Collectors.toCollection(ArrayList::new)); + Collections.shuffle(era1); + Collections.shuffle(era2); + Collections.shuffle(era3); + Queue tribeDeck_temp=new LinkedList<>(); + tribeDeck_temp.addAll(era1); + tribeDeck_temp.addAll(era2); + tribeDeck_temp.addAll(era3); + tribeDeck_temp.add(new Sustenance(3,3)); + tribeDeck_temp.add(new ShamanicRitual(3,15,7)); + return tribeDeck_temp; + } + + public Queue getPendingEvents(){ + return lowerListTribe.stream().filter(TribeCard::IsEventCard).map(x->(EventCard)x).collect(Collectors.toCollection(LinkedList::new)); + } + + public boolean containsUpperTribeCard(TribeCard tribeCard) { + return upperListTribe.contains(tribeCard); + } + public boolean removeUpperTribeCard(TribeCard tribeCard) { + return upperListTribe.remove(tribeCard); + } + public boolean containsLowerTribeCard(TribeCard tribeCard) { + return upperListTribe.contains(tribeCard); + } + public boolean removeLowerTribeCard(TribeCard tribeCard) { + return upperListTribe.remove(tribeCard); + } + public boolean containsUpperBuildingCard(BuildingCard buildingCard) { + return upperListTribe.contains(buildingCard); + } + public boolean removeUpperBuildingCard(BuildingCard buildingCard) { + return upperListTribe.remove(buildingCard); + } + public boolean containsLowerBuildingCard(BuildingCard buildingCard) { + return upperListTribe.contains(buildingCard); + } + public boolean removeLowerBuildingCard(BuildingCard buildingCard) { + return upperListTribe.remove(buildingCard); + } + public int nextRound() + { + lowerListTribe.clear(); + lowerListTribe.addAll(upperListTribe); + + for(int i=0;i buildingCards=DecksCreator.loadBuildingDeckByEra(era); + Collections.shuffle(buildingCards); + if(era==2) + { + if(nTotem<=3) + { + upperListBuilding.addAll(buildingCards.subList(0,2)); + } + else + { + upperListBuilding.addAll( buildingCards.subList(0,3)); + } + } + else if(era==3) + { + if(nTotem==2) + { + upperListBuilding.addAll( buildingCards.subList(0,3)); + }else if(nTotem==5) + { + upperListBuilding.addAll( buildingCards.subList(0,5)); + } + else { + upperListBuilding.addAll(buildingCards.subList(0,4)); + } + } + } +} diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Slot.java b/src/main/java/it/polimi/ingsw/gc14/Model/Slot.java index 36fe3b9..43ae32b 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Slot.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Slot.java @@ -2,6 +2,10 @@ package it.polimi.ingsw.gc14.Model; public class Slot { // Getters + private char slotId; + public char getSlotId() { + return slotId; + } private int NUpper; public int getNUpper(){ return NUpper; @@ -21,7 +25,7 @@ public class Slot { return Food; } // End getters - private char slotId; + // Setters // End setters // Constructors