From c356064093bc451e3221c5a3ca903defeb780eaf Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Fri, 20 Mar 2026 18:28:53 +0100 Subject: [PATCH] Add: JsonCards , DecksCreator, Test:DecksCreator --- .../polimi/ingsw/gc14/Model/DecksCreator.java | 29 +- .../java/it/polimi/ingsw/gc14/Model/Main.java | 4 + src/main/java/module-info.java | 5 +- src/main/resources/Cards/cards_era1.json | 327 ++++++++++++++++-- src/main/resources/Cards/cards_era2.json | 285 +++++++++++++++ src/main/resources/Cards/cards_era3.json | 261 ++++++++++++++ .../ingsw/gc14/Model/DecksCreatorTest.java | 21 ++ 7 files changed, 892 insertions(+), 40 deletions(-) create mode 100644 src/main/resources/Cards/cards_era2.json create mode 100644 src/main/resources/Cards/cards_era3.json create mode 100644 src/test/java/it/polimi/ingsw/gc14/Model/DecksCreatorTest.java diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/DecksCreator.java b/src/main/java/it/polimi/ingsw/gc14/Model/DecksCreator.java index e2c5c92..2f728c7 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/DecksCreator.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/DecksCreator.java @@ -1,8 +1,15 @@ package it.polimi.ingsw.gc14.Model; import com.google.gson.*; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.*; import it.polimi.ingsw.gc14.Model.Cards.TribeCard; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventType; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events.CavePaintings; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events.Hunt; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events.ShamanicRitual; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events.Sustenance; + import java.io.*; import java.lang.reflect.Type; import java.util.*; @@ -14,17 +21,18 @@ public class DecksCreator { Gson gson = new Gson(); Type listType = new com.google.gson.reflect.TypeToken>(){}.getType(); - try (InputStream is = DecksCreator.class.getResourceAsStream(resourcePath); - Reader reader = new InputStreamReader(is)) { + InputStream is = DecksCreator.class.getResourceAsStream(resourcePath); + if (is == null) { + throw new RuntimeException("File non trovato: " + resourcePath); + } + try (Reader reader = new InputStreamReader(is)) { List definitions = gson.fromJson(reader, listType); List cards = new ArrayList<>(); - for (CardDefinition def : definitions) { cards.add(createCard(def)); } return cards; - } catch (IOException e) { throw new RuntimeException("Errore caricamento mazzo: " + resourcePath, e); } @@ -32,8 +40,18 @@ public class DecksCreator { private static TribeCard createCard(CardDefinition def) { int era = def.era; - int[] p = def.params.stream().mapToInt(d -> (int) Math.round((Float) d)).toArray(); + int[] p = def.params.stream().mapToInt(d -> ((Double) d).intValue()).toArray(); + if(def.isEvent) + { + return switch (def.type) { + case "Sustenance" -> new Sustenance(era,p[0]); + case "Hunt" -> new Hunt(era,p[0]); + case "CavePaintings" -> new CavePaintings(era,p[0],p[1],p[2]); + case "ShamanicRitual" -> new ShamanicRitual(era,p[0],p[1]); + default -> throw new IllegalArgumentException("Tipo sconosciuto: " + def.type); + }; + } return switch (def.type) { case "Hunter" -> p.length == 0 ? new Hunter(era, def.armed) @@ -71,6 +89,7 @@ public class DecksCreator { String type; int era; boolean armed; + boolean isEvent; List params; // Object per gestire boolean e int misti } } \ No newline at end of file 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 ff231bd..5a41bac 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Main.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Main.java @@ -1,11 +1,15 @@ package it.polimi.ingsw.gc14.Model; +import it.polimi.ingsw.gc14.Model.Cards.TribeCard; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType; import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.Inventor; +import java.util.*; + public class Main { public static void main(String[] args) { Inventor inventor= new Inventor(1,0); System.out.println(inventor); + Listcards= DecksCreator.loadDeck("/Cards/cards_era1.json"); } } diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 89164ac..558542c 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -1,12 +1,13 @@ module it.polimi.ingsw.gc14 { requires javafx.controls; requires javafx.fxml; - requires org.controlsfx.controls; requires java.rmi; requires java.smartcardio; requires com.google.gson; - opens it.polimi.ingsw.gc14 to javafx.fxml; + opens it.polimi.ingsw.gc14 to javafx.fxml, com.google.gson; + opens it.polimi.ingsw.gc14.Model to com.google.gson; + exports it.polimi.ingsw.gc14; } \ No newline at end of file diff --git a/src/main/resources/Cards/cards_era1.json b/src/main/resources/Cards/cards_era1.json index e7ea16c..3a63ef5 100644 --- a/src/main/resources/Cards/cards_era1.json +++ b/src/main/resources/Cards/cards_era1.json @@ -1,36 +1,297 @@ [ - {"type": "Hunter", "era": 1, "armed": true, "params": []}, - {"type": "Hunter", "era": 1, "armed": true, "params": []}, - {"type": "Hunter", "era": 1, "armed": false, "params": []}, - {"type": "Hunter", "era": 1, "armed": false, "params": [3]}, - {"type": "Hunter", "era": 1, "armed": false, "params": [3]}, + { + "isEvent": false, + "type": "Hunter", + "era": 1, + "armed": true, + "params": [] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 1, + "armed": true, + "params": [] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 1, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 1, + "armed": false, + "params": [ + 3 + ] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 1, + "armed": false, + "params": [ + 3 + ] + }, + { + "isEvent": false, + "type": "Builder", + "era": 1, + "armed": false, + "params": [ + 1, + 3 + ] + }, + { + "isEvent": false, + "type": "Builder", + "era": 1, + "armed": false, + "params": [ + 2, + 0 + ] + }, + { + "isEvent": false, + "type": "Builder", + "era": 1, + "armed": false, + "params": [ + 2, + 1, + 5 + ] + }, + { + "isEvent": false, + "type": "Builder", + "era": 1, + "armed": false, + "params": [ + 1, + 2 + ] + }, + { + "isEvent": false, + "type": "Gatherers", + "era": 1, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Gatherers", + "era": 1, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Gatherers", + "era": 1, + "armed": false, + "params": [ + 3 + ] + }, + { + "isEvent": false, + "type": "Gatherers", + "era": 1, + "armed": false, + "params": [ + 5 + ] + }, + { + "isEvent": false, + "type": "Artist", + "era": 1, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Artist", + "era": 1, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Artist", + "era": 1, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Artist", + "era": 1, + "armed": false, + "params": [ + 3 + ] + }, + { + "isEvent": false, + "type": "Artist", + "era": 1, + "armed": false, + "params": [ + 4 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 1, + "armed": false, + "params": [ + 8 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 1, + "armed": false, + "params": [ + 0 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 1, + "armed": false, + "params": [ + 2 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 1, + "armed": false, + "params": [ + 9 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 1, + "armed": false, + "params": [ + 5, + 4 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 1, + "armed": false, + "params": [ + 7, + 4 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 1, + "armed": false, + "params": [ + 4, + 4 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 1, + "armed": false, + "params": [ + 2, + 5 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 1, + "armed": false, + "params": [ + 2 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 1, + "armed": false, + "params": [ + 1 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 1, + "armed": false, + "params": [ + 1, + 4 + ] + }, + { + "isEvent": true, + "type": "Hunt", + "era": 1, + "armed": false, + "params": [ + 1 + ] + }, + { + "isEvent": true, + "type": "Sustenance", + "era": 1, + "armed": false, + "params": [ + 4 + ] + }, + { + "isEvent": true, + "type": "ShamanicRitual", + "era": 1, + "armed": false, + "params": [ + 5, + 3 + ] + }, + { + "isEvent": true, + "type": "CavePaintings", + "era": 1, + "armed": false, + "params": [ + 1, + 2, + 1 + ] + } - {"type": "Builder", "era": 1, "armed": false, "params": [1, 3]}, - {"type": "Builder", "era": 1, "armed": false, "params": [2, 0]}, - {"type": "Builder", "era": 1, "armed": false, "params": [2, 1, 5]}, - {"type": "Builder", "era": 1, "armed": false, "params": [1, 2]}, - - {"type": "Gatherers", "era": 1, "armed": false, "params": []}, - {"type": "Gatherers", "era": 1, "armed": false, "params": []}, - {"type": "Gatherers", "era": 1, "armed": false, "params": [3]}, - {"type": "Gatherers", "era": 1, "armed": false, "params": [5]}, - - {"type": "Artist", "era": 1, "armed": false, "params": []}, - {"type": "Artist", "era": 1, "armed": false, "params": []}, - {"type": "Artist", "era": 1, "armed": false, "params": []}, - {"type": "Artist", "era": 1, "armed": false, "params": [3]}, - {"type": "Artist", "era": 1, "armed": false, "params": [4]}, - - {"type": "Inventor", "era": 1, "armed": false, "params": [8]}, - {"type": "Inventor", "era": 1, "armed": false, "params": [0]}, - {"type": "Inventor", "era": 1, "armed": false, "params": [2]}, - {"type": "Inventor", "era": 1, "armed": false, "params": [9]}, - {"type": "Inventor", "era": 1, "armed": false, "params": [5, 4]}, - {"type": "Inventor", "era": 1, "armed": false, "params": [7, 4]}, - {"type": "Inventor", "era": 1, "armed": false, "params": [4, 4]}, - - {"type": "Shaman", "era": 1, "armed": false, "params": [2, 5]}, - {"type": "Shaman", "era": 1, "armed": false, "params": [2]}, - {"type": "Shaman", "era": 1, "armed": false, "params": [1]}, - {"type": "Shaman", "era": 1, "armed": false, "params": [1, 4]} ] \ No newline at end of file diff --git a/src/main/resources/Cards/cards_era2.json b/src/main/resources/Cards/cards_era2.json new file mode 100644 index 0000000..9927df9 --- /dev/null +++ b/src/main/resources/Cards/cards_era2.json @@ -0,0 +1,285 @@ +[ + { + "isEvent": false, + "type": "Hunter", + "era": 2, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 2, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 2, + "armed": true, + "params": [ + 3 + ] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 2, + "armed": true, + "params": [] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 2, + "armed": true, + "params": [4] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 2, + "armed": true, + "params": [ + 5 + ] + }, + { + "isEvent": false, + "type": "Builder", + "era": 2, + "armed": false, + "params": [ + 1, + 4 + ] + }, + { + "isEvent": false, + "type": "Builder", + "era": 2, + "armed": false, + "params": [ + 2, + 1 + ] + }, + { + "isEvent": false, + "type": "Builder", + "era": 2, + "armed": false, + "params": [ + 1, + 2, + 3 + ] + }, + { + "isEvent": false, + "type": "Builder", + "era": 2, + "armed": false, + "params": [ + 2, + 3 + ] + }, + { + "isEvent": false, + "type": "Gatherers", + "era": 2, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Gatherers", + "era": 2, + "armed": false, + "params": [ + 3 + ] + }, + { + "isEvent": false, + "type": "Gatherers", + "era": 2, + "armed": false, + "params": [ + 4 + ] + }, + { + "isEvent": false, + "type": "Gatherers", + "era": 2, + "armed": false, + "params": [ + 5 + ] + }, + { + "isEvent": false, + "type": "Artist", + "era": 2, + "armed": false, + "params": [ + 3 + ] + }, + { + "isEvent": false, + "type": "Artist", + "era": 2, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Artist", + "era": 2, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Artist", + "era": 2, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 2, + "armed": false, + "params": [ + 6 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 2, + "armed": false, + "params": [ + 2, + 4 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 2, + "armed": false, + "params": [ + 5 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 2, + "armed": false, + "params": [ + 7 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 2, + "armed": false, + "params": [ + 4 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 2, + "armed": false, + "params": [ + 8 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 2, + "armed": false, + "params": [ + 2 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 2, + "armed": false, + "params": [ + 2 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 2, + "armed": false, + "params": [ + 1, + 5 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 2, + "armed": false, + "params": [ + 2, + 5 + ] + }, + { + "isEvent": true, + "type": "Hunt", + "era": 2, + "armed": false, + "params": [ + 2 + ] + }, + { + "isEvent": true, + "type": "Sustenance", + "era": 2, + "armed": false, + "params": [ + 2 + ] + }, + { + "isEvent": true, + "type": "ShamanicRitual", + "era": 2, + "armed": false, + "params": [ + 10, + 5 + ] + }, + { + "isEvent": true, + "type": "CavePaintings", + "era": 2, + "armed": false, + "params": [ + 2, + 2, + 2 + ] + } +] \ No newline at end of file diff --git a/src/main/resources/Cards/cards_era3.json b/src/main/resources/Cards/cards_era3.json new file mode 100644 index 0000000..571556a --- /dev/null +++ b/src/main/resources/Cards/cards_era3.json @@ -0,0 +1,261 @@ +[ + { + "isEvent": false, + "type": "Hunter", + "era": 3, + "armed": true, + "params": [ + 5 + ] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 3, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 3, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Hunter", + "era": 3, + "armed": true, + "params": [] + }, + { + "isEvent": false, + "type": "Builder", + "era": 3, + "armed": false, + "params": [ + 1, + 5 + ] + }, + { + "isEvent": false, + "type": "Builder", + "era": 3, + "armed": false, + "params": [ + 2, + 3 + ] + }, + { + "isEvent": false, + "type": "Builder", + "era": 3, + "armed": false, + "params": [ + 1, + 4, + 5 + ] + }, + { + "isEvent": false, + "type": "Builder", + "era": 3, + "armed": false, + "params": [ + 2, + 2 + ] + }, + { + "isEvent": false, + "type": "Gatherers", + "era": 3, + "armed": false, + "params": [ + 5 + ] + }, + { + "isEvent": false, + "type": "Gatherers", + "era": 3, + "armed": false, + "params": [ + 4 + ] + }, + { + "isEvent": false, + "type": "Gatherers", + "era": 3, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Artist", + "era": 3, + "armed": false, + "params": [ + 5 + ] + }, + { + "isEvent": false, + "type": "Artist", + "era": 3, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Artist", + "era": 3, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Artist", + "era": 3, + "armed": false, + "params": [] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 3, + "armed": false, + "params": [ + 3, + 4 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 3, + "armed": false, + "params": [ + 0, + 3 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 3, + "armed": false, + "params": [ + 1, + 3 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 3, + "armed": false, + "params": [ + 6 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 3, + "armed": false, + "params": [ + 2 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 3, + "armed": false, + "params": [ + 3 + ] + }, + { + "isEvent": false, + "type": "Inventor", + "era": 3, + "armed": false, + "params": [ + 9 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 3, + "armed": false, + "params": [ + 2, + 3 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 3, + "armed": false, + "params": [ + 3 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 3, + "armed": false, + "params": [ + 2 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 3, + "armed": false, + "params": [ + 3 + ] + }, + { + "isEvent": false, + "type": "Shaman", + "era": 3, + "armed": false, + "params": [ + 2, + 4 + ] + }, + { + "isEvent": true, + "type": "Hunt", + "era": 3, + "armed": false, + "params": [ + 3 + ] + }, + { + "isEvent": true, + "type": "CavePaintings", + "era": 3, + "armed": false, + "params": [ + 3, + 2, + 3 + ] + } +] \ No newline at end of file diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/DecksCreatorTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/DecksCreatorTest.java new file mode 100644 index 0000000..9911362 --- /dev/null +++ b/src/test/java/it/polimi/ingsw/gc14/Model/DecksCreatorTest.java @@ -0,0 +1,21 @@ +package it.polimi.ingsw.gc14.Model; + +import it.polimi.ingsw.gc14.Model.Cards.TribeCard; +import org.junit.jupiter.api.Test; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; + +class DecksCreatorTest { + + @Test + void loadDeck() { + List cards = DecksCreator.loadDeck("/Cards/cards_era1.json"); + assertEquals(33,cards.size()); + List cards2 = DecksCreator.loadDeck("/Cards/cards_era2.json"); + assertEquals(32,cards2.size()); + List cards3 = DecksCreator.loadDeck("/Cards/cards_era3.json"); + assertEquals(29,cards3.size()); + } +} \ No newline at end of file