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 @@
-
+
\ 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());
}
}