From cb2173d717d3a3d13195624cc45c966aaff908a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20GUEZO?= Date: Wed, 14 Aug 2024 21:19:32 +0200 Subject: [PATCH] ajustement sur les fichiers de configurations --- src/Main.java | 12 +-- src/conf.xml | 6 +- src/configuration/ConfigGame.java | 143 +++++++++++++++++++++++++++ src/configuration/ConfigXml.java | 86 ---------------- src/configuration/FileReaderXml.java | 4 - src/personnage/IA.java | 2 +- src/personnage/Player.java | 3 +- src/personnage/Robot.java | 4 +- src/tests/XmlReaderTest.java | 9 +- 9 files changed, 160 insertions(+), 109 deletions(-) create mode 100644 src/configuration/ConfigGame.java delete mode 100644 src/configuration/ConfigXml.java diff --git a/src/Main.java b/src/Main.java index a14bf8a..2540970 100644 --- a/src/Main.java +++ b/src/Main.java @@ -2,7 +2,7 @@ import java.io.File; import java.io.ObjectInputFilter.Config; import java.util.ArrayList; -import configuration.ConfigXml; +import configuration.ConfigGame; import game.Terminal; import game.environnement.*; import personnage.*; @@ -36,11 +36,11 @@ public class Main { */ public static void main(String[] args) { - ConfigXml configXml = new ConfigXml(null); - Personnage[] personnages = configXml.getCharacters(); - Map map = configXml.getMap(); - - Personnage.n = 4; + ConfigGame config = new ConfigGame(null); + + Personnage[] personnages = config.getPersonnages(); + Map map = config.getMap(); + Personnage.n = config.getN(); if (args.length < 1) { new Terminal(map, personnages).run(); } // lancer en local else if (args.length == 2) { new Terminal(map, personnages).run(args[0], args[1]); } // lancer en ligne diff --git a/src/conf.xml b/src/conf.xml index 61d3e7a..a322037 100644 --- a/src/conf.xml +++ b/src/conf.xml @@ -2,7 +2,7 @@ - + @@ -15,8 +15,8 @@ - + - + \ No newline at end of file diff --git a/src/configuration/ConfigGame.java b/src/configuration/ConfigGame.java new file mode 100644 index 0000000..f280eb5 --- /dev/null +++ b/src/configuration/ConfigGame.java @@ -0,0 +1,143 @@ +package configuration; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; + +import javax.xml.parsers.ParserConfigurationException; + +import org.xml.sax.SAXException; + +import game.environnement.Map; +import personnage.IA; +import personnage.Personnage; +import personnage.Player; +import personnage.Robot; +import personnage.IAQLearning.QTable; +import personnage.types.Item; + +public class ConfigGame { + private HashMap>> data; + + public ConfigGame(String path) { + try { + FileReaderXml fileReaderXml = new FileReaderXml(path); + this.data = fileReaderXml.getElements(); + } catch (IOException | SAXException | ParserConfigurationException e) { + e.printStackTrace(); + } + } + + public Map getMap() { + ArrayList> mapList = data.get("Map.Coordinate"); + + if (data.get("Configuration.Map") == null) { + System.err.println("Erreur: La balise Map est introuvable."); + System.exit(-1); + } + + if (mapList.size() != 1) { + System.err.println("Erreur: Plusieurs Coordonnées trouvées."); + System.exit(-1); + } + + Map map = new Map( + Integer.parseInt(mapList.get(0).get("x")), + Integer.parseInt(mapList.get(0).get("y")) + ); + + addItems(map); + + return map; + } + + public int getN() { + ArrayList> n; + + if ((n = data.get("Configuration.Size")) == null) { + return 4; + } + + return Integer.parseInt(n.get(0).get("n")); + } + + public Personnage[] getPersonnages() { + String[] personnagesList = new String[] {"Player", "Robot", "IA"}; + Personnage[] personnages = new Personnage[2]; + int index = 0; + + if (data.get("Configuration.Personnage") == null) { + System.err.println("Erreur: La balise Personnage est introuvable."); + System.exit(-1); + } + + for (String personnage : personnagesList) { + ArrayList> informations = data.get("Personnage."+personnage); + if (informations != null) { + for(HashMap information : informations) { + if (index > 2) { + System.err.println("Erreur: Il doit y avoir au ]0; 3[ personnages"); + System.exit(-1); + } + + personnages[index++] = choosePersonnage(personnage, information); + } + } + } + + return personnages; + } + + private Personnage choosePersonnage(String name, HashMap information) throws Error { + int[] coordinate = new int[] { + Integer.parseInt(information.get("x")), + Integer.parseInt(information.get("y")), + }; + + switch (name.toLowerCase()) { + case "player": return new Player(coordinate, information.get("name")); + case "robot": return new Robot(information.get("name"), coordinate); + case "ia": { + String path = information.get("QTable"); + return new IA(coordinate, (path.equals("")) ? new QTable("res/save/") : new QTable(path), name); + } + + default: { + System.err.println("Erreur: Il n'existe aucun personnage jouable dans la balise Personnage"); + System.exit(-1); + return null; + } + } + } + + private void addItems(Map map) { + String[] itemList = new String[]{"Wall", "Fraise"}; + + for(String item : itemList) { + ArrayList> informations = data.get("Map."+item); + + if(informations != null) { + for(HashMap information : informations) { + map.addObjects( + chooseItem(item, information), + Integer.parseInt(information.get("x")), + Integer.parseInt(information.get("y")) + ); + } + } + } + } + + private Item chooseItem(String name, HashMap information) { + switch (name.toLowerCase()) { + case "wall": return Item.WALL; + case "fraise": return Item.FRAISE; + + default: { + System.err.println("Erreur: Il n'existe aucun item valide dans la balise Map"); + System.exit(-1); + return null; + } + } + } +} diff --git a/src/configuration/ConfigXml.java b/src/configuration/ConfigXml.java deleted file mode 100644 index 0879a60..0000000 --- a/src/configuration/ConfigXml.java +++ /dev/null @@ -1,86 +0,0 @@ -package configuration; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import javax.xml.parsers.ParserConfigurationException; - -import org.xml.sax.SAXException; - -import game.environnement.Map; -import personnage.IA; -import personnage.Personnage; -import personnage.Player; -import personnage.Robot; -import personnage.IAQLearning.QTable; - -public class ConfigXml { - private HashMap>> informationConfig; - - public ConfigXml(String path) { - try { - FileReaderXml fileReader = new FileReaderXml(null); - informationConfig = fileReader.getElements(); - System.out.println(informationConfig); - - } catch (IOException | SAXException | ParserConfigurationException e) { - e.printStackTrace(); - } - } - - public Personnage[] getCharacters() throws Error { - String[] playableCharacters = new String[] {"Player", "Robot", "IA"}; - ArrayList personnages = new ArrayList<>(); - - if (informationConfig.get("Configuration.Personnage") == null) { - throw new Error("Pas de personnage !"); - } - - for (String character : playableCharacters) { - ArrayList> hashMapChar = informationConfig.get("Personnage." + character); - - if(hashMapChar != null) { - for(int i = 0; i 2) { - throw new Error("Trop de personnage dans la partie !"); - } - - int[] coordinate = new int[] {Integer.parseInt(hashMapChar.get(i).get("x")), Integer.parseInt(hashMapChar.get(i).get("y"))}; - - if (character.toLowerCase().equals("player")) personnages.add(new Player(coordinate, hashMapChar.get(i).get("name"))); - if (character.toLowerCase().equals("robot")) personnages.add(new Robot(hashMapChar.get(i).get("name"), coordinate)); - - if (character.toLowerCase().equals("ia")){ - QTable qTable; - String path; - - if((path = hashMapChar.get(i).get("QTable")).equals("")) { - qTable = new QTable("res/save/"); - } else { - qTable = new QTable(path); - } - personnages.add(new IA(coordinate, qTable, hashMapChar.get(i).get("name"))); - } - } - } - } - - return new Personnage[] {personnages.get(0), personnages.get(1)}; - } - - public Map getMap() throws Error { - if (informationConfig.get("Configuration.Map") == null) { - throw new Error("Pas de Map !"); - } - - ArrayList> map = informationConfig.get("Map.Coordinate"); - - if (map.size() != 1) { - throw new Error("problème de coordonnée"); - } - - return new Map(Integer.parseInt(map.get(0).get("x")), Integer.parseInt(map.get(0).get("y"))); - } -} \ No newline at end of file diff --git a/src/configuration/FileReaderXml.java b/src/configuration/FileReaderXml.java index 02eea41..3ab0a70 100644 --- a/src/configuration/FileReaderXml.java +++ b/src/configuration/FileReaderXml.java @@ -1,7 +1,6 @@ package configuration; import org.w3c.dom.Document; -import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -13,10 +12,7 @@ import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; import java.util.HashMap; -import java.util.List; public class FileReaderXml { private String pathname = "src" + File.separator + "conf.xml"; diff --git a/src/personnage/IA.java b/src/personnage/IA.java index bb4d5d7..344c4e2 100644 --- a/src/personnage/IA.java +++ b/src/personnage/IA.java @@ -29,7 +29,7 @@ public class IA extends Personnage { this.qLearning = new QLearning(qTable, alpha, gamma, epsilon); // Attribution d'un nom unique à l'IA. - this.name = (name == null) ? "IA : " + UUID.randomUUID() : name; + super.name = (name == null) ? "IA : " + UUID.randomUUID() : name; } /** diff --git a/src/personnage/Player.java b/src/personnage/Player.java index b3322de..b2f9789 100644 --- a/src/personnage/Player.java +++ b/src/personnage/Player.java @@ -24,8 +24,7 @@ public class Player extends Personnage { */ public Player(int[] coordinate, String name) { super(coordinate); - - this.name = name; + super.name = name; } public boolean moveCoordinate(int keys) { diff --git a/src/personnage/Robot.java b/src/personnage/Robot.java index 69d7590..723ad38 100644 --- a/src/personnage/Robot.java +++ b/src/personnage/Robot.java @@ -8,14 +8,12 @@ import game.environnement.*; import personnage.types.*; public class Robot extends Personnage { - Map m; Mouvement move; - String name; public Robot(String name, int[] coordinate) { super(coordinate); - this.name = name; + super.name = name; } /**Fonction commune aux sous-classes de Personnage diff --git a/src/tests/XmlReaderTest.java b/src/tests/XmlReaderTest.java index 8c16d17..73a1aa9 100644 --- a/src/tests/XmlReaderTest.java +++ b/src/tests/XmlReaderTest.java @@ -1,11 +1,12 @@ package tests; -import configuration.ConfigXml; -import configuration.FileReaderXml; +import configuration.ConfigGame; public class XmlReaderTest { public static void main(String[] args) { - ConfigXml configXml = new ConfigXml(null); - System.out.println(configXml.getCharacters()); + ConfigGame configXml = new ConfigGame(null); + System.out.println(configXml.getPersonnages()); + System.out.println(configXml.getN()); + System.out.println(configXml.getMap()); } }