From 1e5037378d1172a783b717c57486c295e46a251d Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Thu, 2 Apr 2026 17:10:52 +0200 Subject: [PATCH 1/3] Fix: PickOptionalCard --- .../java/it/polimi/ingsw/gc14/Model/Game.java | 122 ++++++++++-------- 1 file changed, 69 insertions(+), 53 deletions(-) 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 776825f..304c414 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java @@ -27,28 +27,21 @@ public class Game { private OrderLogicCard orderLogicCard; private Board board; + + public ListgetUpperListTribeCards() { + List 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 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 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 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 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). From da7e65bd919f7f73ece416fba6a5436af177f2c1 Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Thu, 2 Apr 2026 17:11:34 +0200 Subject: [PATCH 2/3] Add: Constructor and addPlayer Test --- .../it/polimi/ingsw/gc14/Model/GameTest.java | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java index 6095c44..5c8d096 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java @@ -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() { } From e907c4d5a0518989dfa0dc124ddcee2f0c9ba1b7 Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Thu, 2 Apr 2026 17:56:56 +0200 Subject: [PATCH 3/3] Remove: Main.py --- src/main/java/it/polimi/ingsw/gc14/Model/Main.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Main.java b/src/main/java/it/polimi/ingsw/gc14/Model/Main.java index 2d87898..606af8f 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Main.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Main.java @@ -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); - Listcards= DecksCreator.loadTribeDeck("/Cards/tribe_era1.json"); - List buildingCards = DecksCreator.loadBuildingDeck("/Cards/buildingCards.json"); + } }