mirror of
https://github.com/Cpt-Adok/SNAKE.git
synced 2026-01-25 14:34:07 +00:00
Ajout du fichier de sauvegarde
This commit is contained in:
63
conf.xml
63
conf.xml
@@ -1,63 +0,0 @@
|
|||||||
<!-- Configuration de la map du jeu -->
|
|
||||||
<Map>
|
|
||||||
<!-- coordonnées de la map du jeu -->
|
|
||||||
<Coordinate>
|
|
||||||
<x>22</x>
|
|
||||||
<y>22</y>
|
|
||||||
</Coordinate>
|
|
||||||
<!-- coordonnées des murs qu'on doit rajouter -->
|
|
||||||
<Wall>
|
|
||||||
<Coordinate>
|
|
||||||
<x>1</x>
|
|
||||||
<y>2</y>
|
|
||||||
</Coordinate>
|
|
||||||
<Coordinate>
|
|
||||||
<x>3</x>
|
|
||||||
<y>4</y>
|
|
||||||
</Coordinate>
|
|
||||||
</Wall>
|
|
||||||
<!-- coordonnées des fraises qu'on doit rajouter -->
|
|
||||||
<Fraise>
|
|
||||||
</Fraise>
|
|
||||||
</Map>
|
|
||||||
<!-- configuration des personnages du jeu -->
|
|
||||||
<Personnage>
|
|
||||||
<!-- configuration des player du jeu -->
|
|
||||||
<Player>
|
|
||||||
<Philippe_Etchebest>
|
|
||||||
<Coordinate>
|
|
||||||
<x>2</x>
|
|
||||||
<y>2</y>
|
|
||||||
</Coordinate>
|
|
||||||
<IsPlaying>true</IsPlaying>
|
|
||||||
</Philippe_Etchebest>
|
|
||||||
<Luke_Skywalker>
|
|
||||||
<Coordinate>
|
|
||||||
<x>19</x>
|
|
||||||
<y>19</y>
|
|
||||||
</Coordinate>
|
|
||||||
<IsPlaying>true</IsPlaying>
|
|
||||||
</Luke_Skywalker>
|
|
||||||
</Player>
|
|
||||||
<!-- configuration des Robot du jeu -->
|
|
||||||
<Robot>
|
|
||||||
<Robot_1>
|
|
||||||
<Coordinate>
|
|
||||||
<x>2</x>
|
|
||||||
<y>2</y>
|
|
||||||
</Coordinate>
|
|
||||||
<IsPlaying>false</IsPlaying>
|
|
||||||
</Robot_1>
|
|
||||||
</Robot>
|
|
||||||
<!-- configuration des IA du jeu -->
|
|
||||||
<IA>
|
|
||||||
<IA_1>
|
|
||||||
<Coordinate>
|
|
||||||
<x>2</x>
|
|
||||||
<y>2</y>
|
|
||||||
</Coordinate>
|
|
||||||
<Path>res/save/</Path>
|
|
||||||
<IsPlaying>false</IsPlaying>
|
|
||||||
</IA_1>
|
|
||||||
</IA>
|
|
||||||
</Personnage>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
import javax.xml.*;
|
|
||||||
|
|
||||||
public class Configuration {
|
|
||||||
public Configuration() {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.ObjectInputFilter.Config;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import configuration.ConfigXml;
|
||||||
import game.Terminal;
|
import game.Terminal;
|
||||||
import game.environnement.*;
|
import game.environnement.*;
|
||||||
import personnage.*;
|
import personnage.*;
|
||||||
@@ -7,8 +10,6 @@ import personnage.IAQLearning.QTable;
|
|||||||
import tests.IATest;
|
import tests.IATest;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
private static Map map = new Map(12, 22);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dans ce jeu, il y a 3 types de personnage disponible :
|
* Dans ce jeu, il y a 3 types de personnage disponible :
|
||||||
* - Les Joueurs (Player)
|
* - Les Joueurs (Player)
|
||||||
@@ -33,12 +34,12 @@ public class Main {
|
|||||||
* QTable qtable = new QTable();
|
* QTable qtable = new QTable();
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static Personnage[] personnages = new Personnage[] {
|
|
||||||
new Player(new int[] {2, 2}, "Philippe Etchebest"),
|
|
||||||
new Player(new int[] {map.getGrid()[0].length - 3, map.getGrid().length - 3}, "Luke Skywalker")
|
|
||||||
};
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
ConfigXml configXml = new ConfigXml(null);
|
||||||
|
Personnage[] personnages = configXml.getCharacters();
|
||||||
|
Map map = configXml.getMap();
|
||||||
|
|
||||||
Personnage.n = 4;
|
Personnage.n = 4;
|
||||||
|
|
||||||
if (args.length < 1) { new Terminal(map, personnages).run(); } // lancer en local
|
if (args.length < 1) { new Terminal(map, personnages).run(); } // lancer en local
|
||||||
|
|||||||
22
src/conf.xml
Normal file
22
src/conf.xml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!-- Configuration globale -->
|
||||||
|
<Configuration>
|
||||||
|
<Size n="4"/>
|
||||||
|
<!-- Configuration de la map -->
|
||||||
|
<Map>
|
||||||
|
<Coordinate x="22" y="22"/>
|
||||||
|
|
||||||
|
<Wall x="1" y="2"/>
|
||||||
|
<Wall x="3" y="4"/>
|
||||||
|
<Fraise x="5" y="6"/>
|
||||||
|
</Map>
|
||||||
|
|
||||||
|
<!-- Configuration des personnages -->
|
||||||
|
<Personnage>
|
||||||
|
<Player name="Philippe_Etchebest" x="2" y="2"/>
|
||||||
|
<Player name="Luke Skywalker" x="19" y="19"/>
|
||||||
|
<!-- <IA name="" x="19" y="19" QTable=""/> -->
|
||||||
|
<!-- <Robot name="R2D2" x="19" y="19"/> -->
|
||||||
|
</Personnage>
|
||||||
|
</Configuration>
|
||||||
86
src/configuration/ConfigXml.java
Normal file
86
src/configuration/ConfigXml.java
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
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<String, ArrayList<HashMap<String, String>>> 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<Personnage> personnages = new ArrayList<>();
|
||||||
|
|
||||||
|
if (informationConfig.get("Configuration.Personnage") == null) {
|
||||||
|
throw new Error("Pas de personnage !");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String character : playableCharacters) {
|
||||||
|
ArrayList<HashMap<String, String>> hashMapChar = informationConfig.get("Personnage." + character);
|
||||||
|
|
||||||
|
if(hashMapChar != null) {
|
||||||
|
for(int i = 0; i<hashMapChar.size(); i++) {
|
||||||
|
if (personnages.size() > 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<HashMap<String,String>> 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")));
|
||||||
|
}
|
||||||
|
}
|
||||||
96
src/configuration/FileReaderXml.java
Normal file
96
src/configuration/FileReaderXml.java
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
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;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
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";
|
||||||
|
private Document document;
|
||||||
|
private File path;
|
||||||
|
|
||||||
|
protected FileReaderXml(String pathname) throws IOException, SAXException, ParserConfigurationException {
|
||||||
|
initXML(pathname);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void initXML(String pathname) throws SAXException, IOException, ParserConfigurationException {
|
||||||
|
if(!(pathname == null || pathname.equals(""))) this.pathname = pathname;
|
||||||
|
path = new File(this.pathname);
|
||||||
|
if (!path.exists()) throw new IOException(path.getAbsolutePath() + " : le pathname n'est pas valide.");
|
||||||
|
|
||||||
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||||
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||||
|
document = builder.parse(path);
|
||||||
|
document.getDocumentElement().normalize();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected HashMap<String, ArrayList<HashMap<String, String>>> getElements() {
|
||||||
|
HashMap<String, ArrayList<HashMap<String, String>>> elementsMap = new HashMap<>();
|
||||||
|
NodeList nodeList = document.getDocumentElement().getChildNodes();
|
||||||
|
|
||||||
|
readElements(elementsMap, nodeList);
|
||||||
|
|
||||||
|
return elementsMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void readElements(HashMap<String, ArrayList<HashMap<String, String>>> elementsMap, NodeList nodeList) {
|
||||||
|
for (int i = 0; i < nodeList.getLength(); i++) {
|
||||||
|
Node childNodeList = nodeList.item(i);
|
||||||
|
|
||||||
|
if (childNodeList.getNodeType() == Node.ELEMENT_NODE) {
|
||||||
|
HashMap<String, String> attributeMap = new HashMap<>();
|
||||||
|
NamedNodeMap attributes = childNodeList.getAttributes();
|
||||||
|
for (int j = 0; j < attributes.getLength(); j++) {
|
||||||
|
Node attribute = attributes.item(j);
|
||||||
|
attributeMap.put(attribute.getNodeName(), attribute.getNodeValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
String fullNodeName = childNodeList.getParentNode().getNodeName() + "." + childNodeList.getNodeName();
|
||||||
|
|
||||||
|
if (!elementsMap.containsKey(fullNodeName)) {
|
||||||
|
elementsMap.put(fullNodeName, new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
elementsMap.get(fullNodeName).add(attributeMap);
|
||||||
|
|
||||||
|
if (childNodeList.hasChildNodes()) {
|
||||||
|
readElements(elementsMap, childNodeList.getChildNodes());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void printHashMap() {
|
||||||
|
HashMap<String, ArrayList<HashMap<String, String>>> file = getElements();
|
||||||
|
|
||||||
|
for (Object objectName : file.keySet()) {
|
||||||
|
System.out.println("name=" + objectName + " value="+file.get(objectName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void printHashMap(String path) {
|
||||||
|
try {
|
||||||
|
FileReaderXml fileReader = new FileReaderXml(null);
|
||||||
|
fileReader.printHashMap();
|
||||||
|
|
||||||
|
} catch (IOException | SAXException | ParserConfigurationException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -28,6 +28,15 @@ public class QTable {
|
|||||||
qValues = new HashMap<>();
|
qValues = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur de la classe QTable cree le HashMap qValues et mets dans la liste
|
||||||
|
* les informations du fichier dans le path.
|
||||||
|
*/
|
||||||
|
public QTable(String pathFile) {
|
||||||
|
qValues = new HashMap<>();
|
||||||
|
getValues(pathFile);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cette fonction renvoie soit la valeur associé à l'action de l'etat
|
* cette fonction renvoie soit la valeur associé à l'action de l'etat
|
||||||
* et du mouvement ou la crée dans le hashmap.
|
* et du mouvement ou la crée dans le hashmap.
|
||||||
|
|||||||
11
src/tests/XmlReaderTest.java
Normal file
11
src/tests/XmlReaderTest.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package tests;
|
||||||
|
|
||||||
|
import configuration.ConfigXml;
|
||||||
|
import configuration.FileReaderXml;
|
||||||
|
|
||||||
|
public class XmlReaderTest {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ConfigXml configXml = new ConfigXml(null);
|
||||||
|
System.out.println(configXml.getCharacters());
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user