From b94e6826269ce4185b0b39a80c96fcd494bcefed Mon Sep 17 00:00:00 2001 From: AleandroPagani Date: Sat, 11 Apr 2026 18:48:40 +0200 Subject: [PATCH] daje --- .../ingsw/gc14/Model/GamePackage/Board.java | 120 +++++++++++++++--- 1 file changed, 105 insertions(+), 15 deletions(-) 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 index 5eb8da9..764eb47 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/GamePackage/Board.java @@ -11,28 +11,69 @@ import it.polimi.ingsw.gc14.Model.Slot; import java.util.*; import java.util.stream.Collectors; +/** + * Board manages all the elements during the game as decks, upper and lower rows, totems, tiles... + */ public class Board { + /** + * slotList contains the ordered list of slots (tiles). These changes based on the number of players. + * Each slot (tile) has special action as drawing from the upper/lower row or taking food. + */ private List slotList; + + /** tribeDeck is the deck from where you draw tribe cards as characters and events. */ private Queue tribeDeck; + + /** The upper row of tribe cards. There must be (num. of players + 4) character cards + Event cards */ public List upperListTribe; + + /** + * The lower row of the tribe card. During the first round there will be (num. of players + 1) character cards. + * During the following rounds, lower row will be emptied and populated with upper row's cards. + * When an Event card get in the lower row, the event effect will be activated at the wnd of the round. + */ public List lowerListTribe; + + /** Contains all the building cards of the upper list. When a new era starts, all its building cards are placed here */ public List upperListBuilding; + + /** Contains all the building cards of the upper list. When a new era starts, the old era's buildings are moved from the upper to the lower list */ public List lowerListBuilding; + + /** Number of players */ private int nTotem; + + /** Current era of the game */ private int era; + + /** + * Creates and return a new list containing the slots (tiles) of the game + * + * @return a copy of the slot list + */ public List getSlotList(){ return slotList.stream().map(x->new Slot(x.getSlotId())).collect(Collectors.toList()); } - public Queue getTribeDeck() {return new LinkedList<>(tribeDeck);} + /** + * Creates and initialize a new board: + * - Generate the slotList using a method of DecksCreator + * - Generate the tribeDeck + * - Populate the lower list (if there is an event card, it's added to the upper list) + * - Populate the upper list + * - Generate the buildingDeck using a method of DecksCreator + * + * @param nTotem the number of players + */ 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=generateTribeDeck(nTotem); + tribeDeck=getTribeDeck(nTotem); era=1; + for(int i=0;i generateTribeDeck(int nPlayers) { + /** + * Creates the tribeDeck. Loads the cards from each era, shuffle them, and then join them in the final deck. + * In the end, two special events (Sustenance and ShamanicRitual) are added. + * + * @param nPlayers the number of players + * @return a queue containing the cards in this order: + * - Era 1 + * - Era 2 + * - Era 3 + * - Special events + */ + private Queue getTribeDeck(int nPlayers) { ArrayList era1= DecksCreator.loadTribeDeckByEra(1).stream().filter(x->x.getNMin()<=nPlayers).collect(Collectors.toCollection(ArrayList::new)); ArrayList era2= DecksCreator.loadTribeDeckByEra(2).stream().filter(x->x.getNMin()<=nPlayers).collect(Collectors.toCollection(ArrayList::new)); ArrayList era3= DecksCreator.loadTribeDeckByEra(3).stream().filter(x->x.getNMin()<=nPlayers).collect(Collectors.toCollection(ArrayList::new)); @@ -77,22 +130,58 @@ public class Board { return tribeDeck_temp; } + /** @return the queue of events from the lower list that need to be activated */ public Queue getPendingEvents(){ return lowerListTribe.stream().filter(TribeCard::IsEventCard).map(x->(EventCard)x).collect(Collectors.toCollection(LinkedList::new)); } + /** + * Take the selected card from the upper tribe list of the board + * + * @param tribeCard is the card to remove + * @return true if succeed in removing the card + */ public boolean removeUpperTribeCard(TribeCard tribeCard) { return upperListTribe.remove(tribeCard); } + + /** + * Take the selected card from the lower tribe list of the board + * + * @param tribeCard is the card to remove + * @return true if succeed in removing the card + */ public boolean removeLowerTribeCard(TribeCard tribeCard) { - return upperListTribe.remove(tribeCard); + return lowerListTribe.remove(tribeCard); } + + /** + * Take the selected card from the upper building list of the board + * + * @param buildingCard is the card to remove + * @return true if succeed in removing the card + */ public boolean removeUpperBuildingCard(BuildingCard buildingCard) { - return upperListTribe.remove(buildingCard); + return upperListBuilding.remove(buildingCard); } + + /** + * Take the selected card from the lower building list of the board + * + * @param buildingCard is the card to remove + * @return true if succeed in removing the card + */ public boolean removeLowerBuildingCard(BuildingCard buildingCard) { - return upperListTribe.remove(buildingCard); + return lowerListBuilding.remove(buildingCard); } + + /** + * Goes to the next round. + * - Clear the lower tribe row + * - Moves the upper tribe row to the lower one + * - Populate the upper tribe row + * + */ public int nextRound() { lowerListTribe.clear(); lowerListTribe.addAll(upperListTribe); @@ -106,22 +195,23 @@ public class Board { } upperListTribe.add(tempCard); } - for(int i=upperListTribe.size();i buildingCards=DecksCreator.loadBuildingDeckByEra(era); + ArrayList buildingCards= new ArrayList<>(DecksCreator.loadBuildingDeckByEra(era)); Collections.shuffle(buildingCards); if(era==2) {