Merge pull request #7 from rubenpirreram/OptionalCard-Management

OptionalCard-Management
This commit is contained in:
rubenpirreram
2026-04-02 17:58:00 +02:00
committed by GitHub
3 changed files with 96 additions and 60 deletions
@@ -27,28 +27,21 @@ public class Game {
private OrderLogicCard orderLogicCard;
private Board board;
public List<TribeCard>getUpperListTribeCards() {
List<TribeCard> cards = new ArrayList<>();
board.upperListTribe.forEach(x->cards.add(x.clone()));
return cards;
}
public CurrentState getCurrentState() {
return currentState;
};
public Player getPlayerByIndex(int playerIndex) throws IndexOutOfBoundsException {
if(playerIndex >= playersList.size())
throw new IndexOutOfBoundsException("Player index out of bounds");
return playersList.get(playerIndex);
}
/*
public TribeCard getUpperTribeCardByIndex(int playerIndex) throws IndexOutOfBoundsException
{
}
public TribeCard getLowerTribeCardByIndex()
{
}
public BuildingCard getUpperBuildingCardByIndex(int playerIndex) throws IndexOutOfBoundsException
{
}
public BuildingCard getLowerBuildingCardByIndex(int playerIndex) throws IndexOutOfBoundsException
{
}
*/
public int getNPlayers() {
return nPlayers;
@@ -69,14 +62,14 @@ public class Game {
public boolean addPlayer(Player player) {
if(currentState.getGameStage()!= GameStages.WAITING)
return false;
if(playersList.contains(player))
return false;
playersList.add(player);
if(playersList.size()>=nPlayers)
{
init();
return true;
}
return false;
return true;
}
public void init() {
@@ -99,7 +92,9 @@ public class Game {
}
//region Cotroller Methods
public boolean SlotChoice(Player player, Slot slot) {
public boolean SlotChoiceByIndex(Player player, int slotIndex) {
if(slotIndex<0 || slotIndex>=slotMap.size())
return false;
if(currentState.getGameStage()!= GameStages.SLOT_CHOICE)
{
return false;
@@ -108,23 +103,21 @@ public class Game {
{
return false;
}
if(slotMap.get(slot)!=null)
Map.Entry<Slot, Player> slotPlayerEntry = new ArrayList<>(slotMap.entrySet()).get(slotIndex);
if(slotPlayerEntry.getValue()!=null)
{
return false;
}
if(!board.getSlotList().contains(slot))
{
return false;
}
slotMap.put(slot,player);
slotMap.put(slotPlayerEntry.getKey(),player);
nextPlayerSetup();
return true;
}
//region Drawing Methods
public boolean DrawUpperTribeCard(Player player,TribeCard tribeCard) {
public boolean DrawUpperTribeCardByIndex(Player player,int cardIndex) {
if( cardIndex<0 || cardIndex >=board.upperListTribe.size())
return false;
if(currentState.getGameStage()!= GameStages.RESOLVING_ACTIONS)
{
return false;
@@ -133,11 +126,10 @@ public class Game {
{
return false;
}
if(!board.containsUpperTribeCard(tribeCard))
return false;
if(currentState.getNUpper() <1)
return false;
if(!tribeCard.IsEventCard())
TribeCard tribeCard = board.upperListTribe.get(cardIndex);
if(tribeCard.IsEventCard())
return false;
Character tempCard = (Character) tribeCard;
@@ -149,7 +141,9 @@ public class Game {
return true;
}
public boolean DrawLowerTribeCard(Player player,TribeCard tribeCard) {
public boolean DrawLowerTribeCardByIndex(Player player, int cardIndex) {
if( cardIndex<0 || cardIndex >=board.lowerListTribe.size())
return false;
if(currentState.getGameStage()!= GameStages.RESOLVING_ACTIONS)
{
return false;
@@ -158,10 +152,11 @@ public class Game {
{
return false;
}
if(!board.containsLowerTribeCard(tribeCard))
return false;
if(currentState.getNLower() <1)
return false;
TribeCard tribeCard = board.lowerListTribe.get(cardIndex);
if(!tribeCard.IsEventCard())
return false;
@@ -175,7 +170,9 @@ public class Game {
}
public boolean DrawUpperBuildingCard(Player player,BuildingCard buildingCard) {
public boolean DrawUpperBuildingCardByIndex(Player player,int cardIndex) {
if( cardIndex<0 || cardIndex >=board.upperListBuilding.size())
return false;
if(currentState.getGameStage()!= GameStages.RESOLVING_ACTIONS)
{
return false;
@@ -184,10 +181,7 @@ public class Game {
{
return false;
}
if(!board.containsUpperBuildingCard(buildingCard))
{
return false;
}
BuildingCard buildingCard = board.upperListBuilding.get(cardIndex);
if(currentState.getNUpper() <1)
return false;
if(buildingCard.buy(player))
@@ -202,19 +196,19 @@ public class Game {
return true;
}
public boolean DrawLowerBuildingCard(Player player,BuildingCard buildingCard) {
public boolean DrawLowerBuildingCardByIndex(Player player,int cardIndex) {
if( cardIndex<0 || cardIndex >=board.lowerListBuilding.size())
return false;
if(currentState.getGameStage()!= GameStages.RESOLVING_ACTIONS)
{
return false;
}
if(!player.equals(currentState.getCurrentPlayer()))
{
return false;
}
if(!board.containsLowerBuildingCard(buildingCard))
{
return false;
}
BuildingCard buildingCard = board.lowerListBuilding.get(cardIndex);
if(currentState.getNLower() <1)
return false;
if(buildingCard.buy(player))
@@ -234,7 +228,6 @@ public class Game {
//endregion
//region Optional Card Methods
// TODO fare mappa per contare più volte lo stesso player
public boolean PickOptionalTribeCard(Player player,TribeCard tribeCard) {
if(currentState.getGameStage() != GameStages.OPTIONAL_CARD_EFFECT){
return false;
@@ -242,7 +235,7 @@ public class Game {
if(!player.equals(currentState.getCurrentPlayer())){
return false;
}
if(!board.containsUpperTribeCard(tribeCard)){
if(!board.upperListTribe.contains(tribeCard)){
return false;
}
if(tribeCard.IsEventCard()){
@@ -262,7 +255,7 @@ public class Game {
if(!player.equals(currentState.getCurrentPlayer())){
return false;
}
if(!board.containsUpperBuildingCard(buildingCard)){
if(!board.upperListBuilding.contains(buildingCard)){
return false;
}
if(buildingCard.buy(player)) {
@@ -283,6 +276,8 @@ public class Game {
if(!player.equals(currentState.getCurrentPlayer())){
return false;
}
OptionalCardQueue.removeIf(x->x.equals(player));
nextPlayerSetup();
return true;
}
//endregion
@@ -291,11 +286,21 @@ public class Game {
private void nextPlayerSetup() {
if(GameStages.SLOT_CHOICE==currentState.getGameStage()) {
currentState.PlayerUpdate(orderLogicCard.pull(), null);
if(currentState.getCurrentPlayer()==null)
{
currentState.GameStageUpdate(GameStages.RESOLVING_ACTIONS);
Player tempPlayer = orderLogicCard.pull();
if(tempPlayer!=null) {
currentState.PlayerUpdate(tempPlayer, null);
return;
}
currentState.GameStageUpdate(GameStages.RESOLVING_ACTIONS);
for (Map.Entry<Slot,Player> s : slotMap.entrySet()) {
if (s.getValue()!=null) {
currentState.PlayerUpdate(s.getValue(), s.getKey());
return;
}
}
return;
}
if(GameStages.RESOLVING_ACTIONS==currentState.getGameStage()) {
orderLogicCard.push(currentState.getCurrentPlayer());
@@ -308,7 +313,19 @@ public class Game {
if(slotMap.values().stream().allMatch(v -> v == null))
{
currentState.GameStageUpdate(GameStages.OPTIONAL_CARD_EFFECT);
OptionalCardQueue=(playersList.stream().filter(x->x.buildingCards.stream().anyMatch(y->y.getEffectId()==12)).collect(Collectors.toCollection(LinkedList::new)));
HashMap<Player,Integer> optional=new LinkedHashMap<>();
for (Player p : playersList) {
int tempCount=(int)p.buildingCards.stream().filter(x->x.getEffectId()==12).count();
if(tempCount>0)
{
optional.put(p,tempCount);
}
}
OptionalCardQueue=new LinkedList<>();
for(Map.Entry<Player,Integer> e : optional.entrySet())
{
OptionalCardQueue.add(e.getKey());
}
currentState.PlayerUpdate(OptionalCardQueue.remove(), null);
if(currentState.getCurrentPlayer()==null)
{
@@ -373,7 +390,6 @@ public class Game {
}
// TODO pulire game ?
private void endGame() {
playersList.forEach(
p -> p.buildingCards.stream().filter(x -> x.getEffectType() == EffectType.FINAL).
@@ -1,5 +1,6 @@
package it.polimi.ingsw.gc14.Model;
import it.polimi.ingsw.gc14.Controller.GameController;
import it.polimi.ingsw.gc14.Model.Cards.BuildingCard;
import it.polimi.ingsw.gc14.Model.Cards.TribeCard;
import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.Inventor;
@@ -8,9 +9,6 @@ import java.util.*;
public class Main {
public static void main(String[] args) {
Inventor inventor= new Inventor(1,0);
System.out.println(inventor);
List<TribeCard>cards= DecksCreator.loadTribeDeck("/Cards/tribe_era1.json");
List<BuildingCard> buildingCards = DecksCreator.loadBuildingDeck("/Cards/buildingCards.json");
}
}
@@ -1,10 +1,18 @@
package it.polimi.ingsw.gc14.Model;
import it.polimi.ingsw.gc14.Model.GamePackage.GameStages;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class GameTest {
@Test void Game()
{
int nPlayers = 3;
Game game=new Game(nPlayers);
assertEquals(nPlayers,game.getNPlayers());
assertEquals(GameStages.WAITING,game.getCurrentState().getGameStage());
}
@Test
void getUpperListTribeCards() {
@@ -24,10 +32,27 @@ class GameTest {
@Test
void addPlayer() {
Game game=new Game(3);
Player p1=new Player("p1");
Player p2=new Player("p2");
Player p3=new Player("p3");
Player p4=new Player("p3");
assertTrue(game.addPlayer(p1));
assertTrue(game.addPlayer(p2));
assertFalse(game.addPlayer(p2));
assertTrue(game.addPlayer(p3));
assertEquals(GameStages.SLOT_CHOICE,game.getCurrentState().getGameStage());
assertFalse(game.addPlayer(p4));
}
@Test
void init() {
}
@Test
@@ -49,15 +74,12 @@ class GameTest {
@Test
void drawLowerBuildingCardByIndex() {
}
//Ruben
@Test
void pickOptionalTribeCard() {
}
//Ruben
@Test
void pickOptionalBuildingCard() {
}
//Ruben
@Test
void noOptionalCard() {
}