Board: partially added JML

This commit is contained in:
2026-04-10 01:48:41 +02:00
parent 902e4ac729
commit 44f89add0c
@@ -6,29 +6,65 @@ 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;
/**
* 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<Slot> slotList;
/** tribeDeck is the deck from where you draw tribe cards as characters and events. */
private Queue<TribeCard> tribeDeck;
/** The upper row of tribe cards. There must be (num. of players + 4) character cards + Event cards */
public List<TribeCard> 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<TribeCard> lowerListTribe;
/** Contains all the building cards of the upper list. When a new era starts, all its building cards are placed here */
public List<BuildingCard> 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<BuildingCard> 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<Slot> getSlotList(){
return slotList.stream().map(x->new Slot(x.getSlotId())).collect(Collectors.toList());
}
/**
* 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();
@@ -37,7 +73,8 @@ public class Board {
lowerListBuilding=new ArrayList<>();
tribeDeck=getTribeDeck(nTotem);
era=1;
for(int i=0;i<nTotem+1;i++)
for(int i=0;i<nTotem+2;i++)
{
TribeCard tempCard = tribeDeck.remove();
if(tempCard.IsEventCard())
@@ -50,6 +87,7 @@ public class Board {
lowerListTribe.add(tempCard);
}
}
for(int i=upperListTribe.size();i<nTotem+5;i++)
{
TribeCard tempCard = tribeDeck.remove();
@@ -64,6 +102,17 @@ public class Board {
upperListBuilding= buildingDeck.subList(0,2);
}
/**
* 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<TribeCard> getTribeDeck(int nPlayers) {
ArrayList<TribeCard> era1= DecksCreator.loadTribeDeckByEra(1).stream().filter(x->x.getNMin()<=nPlayers).collect(Collectors.toCollection(ArrayList::new));
ArrayList<TribeCard> era2= DecksCreator.loadTribeDeckByEra(2).stream().filter(x->x.getNMin()<=nPlayers).collect(Collectors.toCollection(ArrayList::new));
@@ -81,22 +130,37 @@ public class Board {
return tribeDeck_temp;
}
/** @return the queue of events from the lower list that need to be activated */
public Queue<EventCard> getPendingEvents(){
return lowerListTribe.stream().filter(TribeCard::IsEventCard).map(x->(EventCard)x).collect(Collectors.toCollection(LinkedList::new));
}
// TODO chiedere a ruben che cazzo sono sti metodi
public boolean removeUpperTribeCard(TribeCard tribeCard) {
return upperListTribe.remove(tribeCard);
}
public boolean removeLowerTribeCard(TribeCard tribeCard) {
return upperListTribe.remove(tribeCard);
}
public boolean removeUpperBuildingCard(BuildingCard buildingCard) {
return upperListTribe.remove(buildingCard);
}
public boolean removeLowerBuildingCard(BuildingCard buildingCard) {
return upperListTribe.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
*
*/
// TODO chiedere a che serve il secondo for a ruben
public int nextRound() {
lowerListTribe.clear();
lowerListTribe.addAll(upperListTribe);
@@ -119,6 +183,8 @@ public class Board {
return era;
}
// TODO
private void nextEra() {
era=era+1;
lowerListBuilding.clear();