diff --git a/src/main/java/client/DeckGridAppFX.java b/src/main/java/client/DeckGridAppFX.java index 0c6ea40..d7e8085 100644 --- a/src/main/java/client/DeckGridAppFX.java +++ b/src/main/java/client/DeckGridAppFX.java @@ -94,8 +94,9 @@ public class DeckGridAppFX extends Application { } catch ( IOException e) { throw new RuntimeException(e); } - //File fileCsv = new File(getClass().getResource("/files/cards.csv").toURI()); - game.newGame(csvStream); + + // using false for Testing purpose + game.newGame(csvStream, false); game.setEventListener(notification -> { Platform.runLater(() -> { @@ -150,9 +151,6 @@ public class DeckGridAppFX extends Application { playersArea.setAlignment(Pos.CENTER); playersArea.setPadding(new Insets(20)); - - - VBox tableArea = new VBox(20, new Label(" "), topRow, new Label(" "), centerRow, diff --git a/src/main/java/client/DeckViewerEventFX.java b/src/main/java/client/DeckViewerEventFX.java new file mode 100644 index 0000000..bfa69f0 --- /dev/null +++ b/src/main/java/client/DeckViewerEventFX.java @@ -0,0 +1,346 @@ +package client; + +import javafx.application.Application; +import javafx.embed.swing.SwingFXUtils; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.ScrollPane; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.stage.FileChooser; +import javafx.stage.Stage; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.rendering.PDFRenderer; +import server.Era; +import server.Player; +import server.TotemColor; +import server.automaton.Game; +import server.cards.*; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class DeckViewerEventFX extends Application { + + private PDDocument document; + private PDFRenderer pdfRenderer; + private int currentIndex = 0; + private int totalCards = 0; + + private ImageView cardImageView; + private Label pageLabel; + private Button btnPrev; + private Button btnNext; + + @Override + public void start(Stage primaryStage) { + + List players = new ArrayList<>(); + players.add(new Player("Yoshi", TotemColor.YELLOW)); + players.add(new Player("Pippo", TotemColor.PURPLE)); + players.add(new Player("John", TotemColor.RED)); + players.add(new Player("Baggio", TotemColor.BLUE)); + players.add(new Player("Gino", TotemColor.GREEN)); + + Game game = new Game(players); + InputStream csvStream = getClass().getResourceAsStream("/files/cards.csv"); + game.newGame(csvStream, false); + + primaryStage.setTitle("Visualizzatore Mazzo di Carte (PDF)"); + + // Componente per mostrare la carta + cardImageView = new ImageView(); + cardImageView.setFitHeight(500); // Altezza fissa, larghezza in proporzione + cardImageView.setPreserveRatio(true); + cardImageView.setStyle("-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.5), 10, 0, 0, 0);"); + + // Controlli UI + btnPrev = new Button("⬅ Carta Precedente"); + btnNext = new Button("Carta Successiva ➡"); + pageLabel = new Label("Nessun mazzo caricato"); + Button btnLoad = new Button("Carica PDF Mazzo"); + Button btnGrid = new Button("Grid View"); + Button btnGridEv = new Button("Grid Event"); + + Button btnGridBu = new Button("Grid Building"); + // Azioni dei pulsanti + btnLoad.setOnAction(e -> loadPdf(primaryStage)); + btnPrev.setOnAction(e -> showCard(currentIndex - 1)); + btnNext.setOnAction(e -> showCard(currentIndex + 1)); + btnGrid.setOnAction(e -> showAllCardsGrouped(game)); + btnGridEv.setOnAction(e -> showEventCardsGrouped(game)); + btnGridBu.setOnAction(e -> showBuildingCardsGrouped(game)); + + updateButtons(); +//showAllCardsGrouped(Game game) + // Layout + HBox controls = new HBox(15, btnGridEv, btnGridBu, btnGrid, btnPrev, pageLabel, btnNext); + controls.setAlignment(Pos.CENTER); + + VBox topBox = new VBox(10, btnLoad); + topBox.setAlignment(Pos.CENTER); + topBox.setPadding(new Insets(10)); + + BorderPane root = new BorderPane(); + root.setTop(topBox); + root.setCenter(cardImageView); + root.setBottom(controls); + BorderPane.setMargin(cardImageView, new Insets(20)); + BorderPane.setMargin(controls, new Insets(20)); + + Scene scene = new Scene(root, 600, 700); + primaryStage.setScene(scene); + primaryStage.show(); + } + + private void loadPdf(Stage stage) { + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("Seleziona il PDF del mazzo di carte"); + fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("File PDF", "*.pdf")); + File file = fileChooser.showOpenDialog(stage); + + if (file != null) { + try { + // Chiude il documento precedente se esiste + if (document != null) { + document.close(); + } + + // Carica il nuovo PDF + document = PDDocument.load(file); + pdfRenderer = new PDFRenderer(document); + totalCards = document.getNumberOfPages(); + + // Mostra la prima carta + showCard(0); + } catch (IOException e) { + e.printStackTrace(); + pageLabel.setText("Errore nel caricamento del file!"); + } + } + } + + private void showCard(int index) { + if (document == null || index < 0 || index >= totalCards) return; + + try { + // Renderizza la pagina del PDF in un'immagine BufferedImage (DPI 150 per buona qualità) + BufferedImage bim = pdfRenderer.renderImageWithDPI(index, 150); + + // Converte l'immagine di AWT (Swing) in un'immagine JavaFX + Image fxImage = SwingFXUtils.toFXImage(bim, null); + + cardImageView.setImage(fxImage); + currentIndex = index; + pageLabel.setText("Carta " + (currentIndex + 1) + " di " + totalCards); + + updateButtons(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private ImageView loadCardImage(int index, int height) { + if (document == null || index < 0 || index >= totalCards) return null; + + try { + BufferedImage bim = pdfRenderer.renderImageWithDPI(index, 150); + Image fxImage = SwingFXUtils.toFXImage(bim, null); + + ImageView imageView = new ImageView(fxImage); + imageView.setPreserveRatio(true); + imageView.setFitHeight(height); + + return imageView; + + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + private void updateButtons() { + btnPrev.setDisable(document == null || currentIndex == 0); + btnNext.setDisable(document == null || currentIndex == totalCards - 1); + } + + @Override + public void stop() throws Exception { + // Importante: chiudere il documento per liberare la memoria quando l'app si chiude + if (document != null) { + document.close(); + } + super.stop(); + } + + private void showAllCardsGrouped(Game game) { + if (document == null || pdfRenderer == null) return; + + VBox rootBox = new VBox(30); + rootBox.setPadding(new Insets(20)); + + // Group cards by type + //Card ctop = gameBoard.getTopRow().stream().filter(s -> s instanceof CharacterCard + Map> cardsByType = + game.getGameBoard() + .getCardDeck() + .getTribeDeck() + .stream() + .filter(s -> s instanceof CharacterCard) + .map(s -> (CharacterCard) s) + .collect(Collectors.groupingBy(CharacterCard::getCharacterType)); + + for (Map.Entry> entry : cardsByType.entrySet()) { + + CharacterType type = entry.getKey(); + List cards = entry.getValue(); + + // Title for the group + Label typeLabel = new Label("Tipo: " + type); + typeLabel.setStyle("-fx-font-size: 20px; -fx-font-weight: bold;"); + + // Grid for cards (4 columns = 4 cards per row) + GridPane grid = new GridPane(); + grid.setHgap(10); + grid.setVgap(10); + + for (int i = 0; i < cards.size(); i++) { + Card card = cards.get(i); + + int col = i % 4; + int row = i / 4; + + ImageView imageView = loadCardImage(card.getCardId(), 200); + + grid.add(imageView, col, row); + } + + rootBox.getChildren().addAll(typeLabel, grid); + } + + ScrollPane scrollPane = new ScrollPane(rootBox); + scrollPane.setFitToWidth(true); + + Stage stage = new Stage(); + stage.setTitle("Tutte le carte per tipo"); + + stage.setScene(new Scene(scrollPane, 1200, 900)); + stage.show(); + } + + private void showEventCardsGrouped(Game game) { + if (document == null || pdfRenderer == null) return; + + VBox rootBox = new VBox(30); + rootBox.setPadding(new Insets(20)); + + // Group cards by type + //Card ctop = gameBoard.getTopRow().stream().filter(s -> s instanceof CharacterCard + Map> cardsByType = + game.getGameBoard() + .getCardDeck() + .getTribeDeck() + .stream() + .filter(s -> s instanceof EventCard) + .map(s -> (EventCard) s) + .collect(Collectors.groupingBy(EventCard::getEvent)); + + for (Map.Entry> entry : cardsByType.entrySet()) { + + Event type = entry.getKey(); + List cards = entry.getValue(); + + // Title for the group + Label typeLabel = new Label("Tipo: " + type); + typeLabel.setStyle("-fx-font-size: 20px; -fx-font-weight: bold;"); + + // Grid for cards (4 columns = 4 cards per row) + GridPane grid = new GridPane(); + grid.setHgap(10); + grid.setVgap(10); + + for (int i = 0; i < cards.size(); i++) { + Card card = cards.get(i); + + int col = i % 4; + int row = i / 4; + + ImageView imageView = loadCardImage(card.getCardId(), 200); + + grid.add(imageView, col, row); + } + + rootBox.getChildren().addAll(typeLabel, grid); + } + + ScrollPane scrollPane = new ScrollPane(rootBox); + scrollPane.setFitToWidth(true); + + Stage stage = new Stage(); + stage.setTitle("Tutte le carte per tipo"); + + stage.setScene(new Scene(scrollPane, 1200, 900)); + stage.show(); + } + private void showBuildingCardsGrouped(Game game) { + if (document == null || pdfRenderer == null) return; + + VBox rootBox = new VBox(30); + rootBox.setPadding(new Insets(20)); + + + Map> cardsByType =game.getGameBoard().getCardDeck().getBuildingDeckMap(); + for (Map.Entry> entry : cardsByType.entrySet()) { + + server.Era type = entry.getKey(); + List cards = entry.getValue(); + + // Title for the group + Label typeLabel = new Label("Tipo: " + type); + typeLabel.setStyle("-fx-font-size: 20px; -fx-font-weight: bold;"); + + // Grid for cards (4 columns = 4 cards per row) + GridPane grid = new GridPane(); + grid.setHgap(10); + grid.setVgap(10); + + for (int i = 0; i < cards.size(); i++) { + Card card = cards.get(i); + + int col = i % 4; + int row = i / 4; + + ImageView imageView = loadCardImage(card.getCardId(), 200); + + grid.add(imageView, col, row); + } + + rootBox.getChildren().addAll(typeLabel, grid); + } + + ScrollPane scrollPane = new ScrollPane(rootBox); + scrollPane.setFitToWidth(true); + + Stage stage = new Stage(); + stage.setTitle("Tutte le carte per tipo"); + + stage.setScene(new Scene(scrollPane, 1200, 900)); + stage.show(); + } + public static void main(String[] args) { + launch(args); + } +} \ No newline at end of file diff --git a/src/main/java/client/DeckViewerFX.java b/src/main/java/client/DeckViewerFX.java index cc80fa7..67572f5 100644 --- a/src/main/java/client/DeckViewerFX.java +++ b/src/main/java/client/DeckViewerFX.java @@ -51,7 +51,7 @@ public class DeckViewerFX extends Application { Game game = new Game(players); InputStream csvStream = getClass().getResourceAsStream("/files/cards.csv"); - game.newGame(csvStream); + game.newGame(csvStream, false); primaryStage.setTitle("Visualizzatore Mazzo di Carte (PDF)"); diff --git a/src/main/java/server/automaton/Game.java b/src/main/java/server/automaton/Game.java index 5f820ed..e6d0411 100644 --- a/src/main/java/server/automaton/Game.java +++ b/src/main/java/server/automaton/Game.java @@ -97,12 +97,12 @@ public class Game { * Initial food (rulebook setup step 10): * Slot 1 -> 2 food, slots 2-3 -> 3 food, slots 4-5 -> 4 food. */ - public void newGame(InputStream csvStream) { + public void newGame(InputStream csvStream, boolean shuffle) { try { logger.info(" ---- STARTING NEW GAME ----- "); CardDeck deck = new CardDeck(); - deck.setForNPlayer(csvStream, players.size()); + deck.setForNPlayer(csvStream, players.size(), shuffle); gameBoard = new GameBoard(Era.I, deck, players.size()); gameBoard.initOfferingTiles(players.size()); @@ -617,11 +617,11 @@ public class Game { } private void resolveOneEvent(EventCard event) { - logger.info(">>"+gameBoard.getTurnTile()); + logger.info(">> before event "+gameBoard.getTurnTile()); notify( GameState.EVENT_RESOLUTION, event.toString()); logger.info("SOLVE EVENT: " + event.getEvent() +" - " +event.getCardId() +" (Era " + event.getEra() + ")"); EventsSolver.solveEvents(Collections.singletonList(event), players); - logger.info("<<"+gameBoard.getTurnTile()); + logger.info("<< after event "+gameBoard.getTurnTile()); } private void startNewRound() { diff --git a/src/main/java/server/cards/CardDeck.java b/src/main/java/server/cards/CardDeck.java index a446a7f..1c20b25 100644 --- a/src/main/java/server/cards/CardDeck.java +++ b/src/main/java/server/cards/CardDeck.java @@ -27,6 +27,10 @@ public class CardDeck { return buildingDeck.get(era); } + public Map> getBuildingDeckMap() { + return buildingDeck; + } + public void setForNPlayerPathTest(String path, int n) throws LoadingCardsException { List tribe = new ArrayList<>(); @@ -74,7 +78,7 @@ public class CardDeck { - public void setForNPlayer(InputStream csvStream, int n) throws LoadingCardsException { + public void setForNPlayer(InputStream csvStream, int n, boolean shuffle) throws LoadingCardsException { List tribe = new ArrayList<>(); List building = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(csvStream))) { @@ -106,13 +110,13 @@ public class CardDeck { throw new LoadingCardsException("file not found"); } - building = CardDeck.shuffle(building); + if (shuffle) building = CardDeck.shuffle(building); this.tribeDeck = tribe.stream() .filter(card -> card.getForMinPlayer() <= n) .collect(Collectors.toCollection(ArrayList::new)); - this.tribeDeck = CardDeck.shuffle(this.tribeDeck); + if (shuffle) this.tribeDeck = CardDeck.shuffle(this.tribeDeck); this.buildingDeck = building.stream().collect(Collectors.groupingBy(Card::getEra)); } diff --git a/src/test/java/server/BuildingManagerTest.java b/src/test/java/server/BuildingManagerTest.java index 448db39..7c316cc 100644 --- a/src/test/java/server/BuildingManagerTest.java +++ b/src/test/java/server/BuildingManagerTest.java @@ -62,7 +62,7 @@ class BuildingManagerTest { CardDeck cardDeck = new CardDeck(); //cardDeck.setForNPlayerPath("./src/test/resources/files/only_building_deck.csv", 5); - cardDeck.setForNPlayer(BuildingManagerTest.class.getResourceAsStream("/files/only_building_deck.csv"), 4); + cardDeck.setForNPlayer(BuildingManagerTest.class.getResourceAsStream("/files/only_building_deck.csv"), 4, true); //for(BuildingCard c: cardDeck.drawBuilding(30)){ // buildingManager.addActiveBuilding(c, players.getFirst()); //} diff --git a/src/test/java/server/EventsSolverTest.java b/src/test/java/server/EventsSolverTest.java index 54613ff..8bf1aa0 100644 --- a/src/test/java/server/EventsSolverTest.java +++ b/src/test/java/server/EventsSolverTest.java @@ -79,7 +79,7 @@ class EventsSolverTest { void solveEvents() { CardDeck cardDeck = new CardDeck(); //cardDeck.setForNPlayerPath("./src/test/resources/files/only_event_deck.csv", 5); - cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/only_event_deck.csv"), 5); + cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/only_event_deck.csv"), 5, true); List events = new ArrayList<>(); for(Card c: cardDeck.getTribeDeck()){ diff --git a/src/test/java/server/GameBoardTest.java b/src/test/java/server/GameBoardTest.java index e3e8e1a..ce3121c 100644 --- a/src/test/java/server/GameBoardTest.java +++ b/src/test/java/server/GameBoardTest.java @@ -27,7 +27,7 @@ class GameBoardTest { players.add(player4); players.add(player5); //deck.setForNPlayerPath(".\\src\\test\\resources\\files\\test_gameboard.csv",5); - deck.setForNPlayer(getClass().getResourceAsStream("/files/test_gameboard.csv"), 5); + deck.setForNPlayer(getClass().getResourceAsStream("/files/test_gameboard.csv"), 5, true); } @@ -48,7 +48,7 @@ class GameBoardTest { //test that a hunter card has been added to the player CardDeck deck2 = new CardDeck(); //deck2.setForNPlayerPath("./src/test/resources/files/test_gameboard_characters.csv",5); - deck2.setForNPlayer(getClass().getResourceAsStream("/files/test_gameboard_characters.csv"), 5); + deck2.setForNPlayer(getClass().getResourceAsStream("/files/test_gameboard_characters.csv"), 5, true); GameBoard gameBoard = new GameBoard(Era.I,deck2,players.size()); Player player = new Player("Lucy", TotemColor.BLUE); @@ -62,7 +62,7 @@ class GameBoardTest { //tests that a hunter card has been added to the player CardDeck deck2 = new CardDeck(); //deck2.setForNPlayerPath("./src/test/resources/files/test_gameboard_characters.csv",5); - deck2.setForNPlayer(getClass().getResourceAsStream("/files/test_gameboard_characters.csv"), 5); + deck2.setForNPlayer(getClass().getResourceAsStream("/files/test_gameboard_characters.csv"), 5, true); GameBoard gameBoard = new GameBoard(Era.I,deck2,players.size()); Player player = new Player("Lucy", TotemColor.BLUE); @@ -77,7 +77,7 @@ class GameBoardTest { //tests that the result is a list of event cards CardDeck deck2 = new CardDeck(); //deck2.setForNPlayerPath(".\\src\\test\\resources\\files\\test_gameboard_events.csv",5); - deck2.setForNPlayer(getClass().getResourceAsStream("/files/test_gameboard_events.csv"), 5); + deck2.setForNPlayer(getClass().getResourceAsStream("/files/test_gameboard_events.csv"), 5, true); GameBoard gameBoard = new GameBoard(Era.I,deck2,players.size()); @@ -120,7 +120,7 @@ class GameBoardTest { //tests that with era change the top row of building is of era II CardDeck deck2 = new CardDeck(); //deck2.setForNPlayerPath(".\\src\\test\\resources\\files\\only_building_deck.csv",5); - deck2.setForNPlayer(getClass().getResourceAsStream("/files/only_building_deck.csv"), 5); + deck2.setForNPlayer(getClass().getResourceAsStream("/files/only_building_deck.csv"), 5, true); GameBoard gameBoard = new GameBoard(Era.II,deck2,players.size()); diff --git a/src/test/java/server/automaton/GameTest.java b/src/test/java/server/automaton/GameTest.java index 8201217..7c504d9 100644 --- a/src/test/java/server/automaton/GameTest.java +++ b/src/test/java/server/automaton/GameTest.java @@ -27,7 +27,7 @@ class GameTest { game = new Game(players); - game.newGame(getClass().getResourceAsStream("/files/cards.csv")); + game.newGame(getClass().getResourceAsStream("/files/cards.csv"), false); System.out.println("Current Player " +game.getCurrentPlayer()); } diff --git a/src/test/java/server/cards/CardDeckTest.java b/src/test/java/server/cards/CardDeckTest.java index 9e1f9fa..80814aa 100644 --- a/src/test/java/server/cards/CardDeckTest.java +++ b/src/test/java/server/cards/CardDeckTest.java @@ -13,7 +13,7 @@ class CardDeckTest { @Test void loadOnlyCharacter(){ CardDeck cardDeck = new CardDeck(); - cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/only_character_deck.csv"), 4); + cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/only_character_deck.csv"), 4, true); assertEquals(2, cardDeck.getTribeDeck().size()); } @@ -25,14 +25,14 @@ class CardDeckTest { CardDeck cardDeck = new CardDeck(); //cardDeck.setForNPlayer("./src/test/resources/files/only_building_deck.csv", 4); - cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/only_building_deck.csv"), 4); + cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/only_building_deck.csv"), 4, true); assertEquals(0, cardDeck.getTribeDeck().size()); assertEquals(6, cardDeck.getBuildingDeck(Era.I).size()); assertEquals(7, cardDeck.getBuildingDeck(Era.II).size()); assertEquals(8, cardDeck.getBuildingDeck(Era.III).size()); //cardDeck.setForNPlayer("./src/test/resources/files/only_event_deck.csv", 4); - cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/only_event_deck.csv"), 4); + cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/only_event_deck.csv"), 4, true); assertEquals(3, cardDeck.getTribeDeck().size()); assertEquals(0, cardDeck.getBuildingDeck(Era.I).size()); assertEquals(0, cardDeck.getBuildingDeck(Era.II).size()); @@ -50,7 +50,7 @@ class CardDeckTest { CardDeck cardDeck = new CardDeck(); //cardDeck.setForNPlayer("./src/test/resources/files/test_deck.csv", 5); - cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/test_deck.csv"), 5); + cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/test_deck.csv"), 5, true); //int deckSize = cardDeck.getTribeDeck().size() + cardDeck.getBuildingDeck().size(); @@ -68,7 +68,7 @@ class CardDeckTest { void drawTribe() { CardDeck cardDeck = new CardDeck(); //cardDeck.setForNPlayer("./src/test/resources/files/test_deck.csv", 5); - cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/test_deck.csv"), 5); + cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/test_deck.csv"), 5, true); List cards = cardDeck.drawTribe(5); assertEquals(5, cards.size()); } @@ -78,7 +78,7 @@ class CardDeckTest { void drawBuilding() { CardDeck cardDeck = new CardDeck(); //cardDeck.setForNPlayer("./src/test/resources/files/test_deck.csv", 5); - cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/test_deck.csv"), 5); + cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/test_deck.csv"), 5, true); // List buildingCards = cardDeck.drawBuilding(3); // assertEquals(3, buildingCards.size()); @@ -90,7 +90,7 @@ class CardDeckTest { void drawTooManyCards() { CardDeck cardDeck = new CardDeck(); //cardDeck.setForNPlayer("./src/test/resources/files/only_character_deck.csv", 5); - cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/only_character_deck.csv"), 5); + cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/only_character_deck.csv"), 5, true); List cards = cardDeck.drawTribe(5); assertEquals(3, cards.size()); @@ -101,7 +101,7 @@ class CardDeckTest { void shuffledDeck() { CardDeck cardDeck = new CardDeck(); // cardDeck.setForNPlayer("./src/test/resources/files/test_deck.csv", 5); - cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/test_deck.csv"), 5); + cardDeck.setForNPlayer(getClass().getResourceAsStream("/files/test_deck.csv"), 5, true); assertEquals(Era.I, cardDeck.drawTribe(1).getFirst().getEra()); assertEquals(Era.FINAL, cardDeck.drawTribe(100).getLast().getEra());