diff --git a/conf.xml b/conf.xml new file mode 100644 index 0000000..f963780 --- /dev/null +++ b/conf.xml @@ -0,0 +1,63 @@ + + + + + 22 + 22 + + + + + 1 + 2 + + + 3 + 4 + + + + + + + + + + + + + 2 + 2 + + true + + + + 19 + 19 + + true + + + + + + + 2 + 2 + + false + + + + + + + 2 + 2 + + res/save/ + false + + + \ No newline at end of file diff --git a/src/Configuration.java b/src/Configuration.java new file mode 100644 index 0000000..4c49591 --- /dev/null +++ b/src/Configuration.java @@ -0,0 +1,7 @@ +import javax.xml.*; + +public class Configuration { + public Configuration() { + + } +} diff --git a/src/Main.java b/src/Main.java index 6c881d0..ccf7660 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,9 +1,9 @@ import java.io.File; -import IA.QTable; -import environnement.*; import game.Terminal; +import game.environnement.*; import personnage.*; +import personnage.IAQLearning.QTable; import tests.IATest; public class Main { diff --git a/src/display/Display.java b/src/display/Display.java index e0ceb2a..7e822df 100644 --- a/src/display/Display.java +++ b/src/display/Display.java @@ -1,8 +1,8 @@ package display; -import environnement.Grid; +import game.environnement.Grid; import personnage.Personnage; -import types.Item; +import personnage.types.Item; public class Display { private static int round = 0; diff --git a/src/game/Terminal.java b/src/game/Terminal.java index 08d957f..839dde8 100644 --- a/src/game/Terminal.java +++ b/src/game/Terminal.java @@ -1,8 +1,8 @@ package game; -import connexion.Channel; import display.Display; -import environnement.Map; +import game.connexion.Channel; +import game.environnement.Map; import personnage.Personnage; diff --git a/src/connexion/Channel.java b/src/game/connexion/Channel.java similarity index 97% rename from src/connexion/Channel.java rename to src/game/connexion/Channel.java index 02d0082..b563c4c 100644 --- a/src/connexion/Channel.java +++ b/src/game/connexion/Channel.java @@ -1,8 +1,8 @@ -package connexion; +package game.connexion; -import types.Mouvement; -import environnement.*; +import game.environnement.*; import personnage.Personnage; +import personnage.types.Mouvement; public class Channel extends Personnage { private Reseau reseau; diff --git a/src/connexion/Reseau.java b/src/game/connexion/Reseau.java similarity index 99% rename from src/connexion/Reseau.java rename to src/game/connexion/Reseau.java index ca8bf80..03ec422 100644 --- a/src/connexion/Reseau.java +++ b/src/game/connexion/Reseau.java @@ -1,4 +1,4 @@ -package connexion; +package game.connexion; import java.io.IOException; import java.io.InputStream; diff --git a/src/environnement/Grid.java b/src/game/environnement/Grid.java similarity index 95% rename from src/environnement/Grid.java rename to src/game/environnement/Grid.java index 1c6e88d..320e6e3 100644 --- a/src/environnement/Grid.java +++ b/src/game/environnement/Grid.java @@ -1,7 +1,8 @@ -package environnement; +package game.environnement; import java.io.Serializable; -import types.Effect; + +import personnage.types.Effect; public interface Grid extends Serializable { /** diff --git a/src/environnement/Map.java b/src/game/environnement/Map.java similarity index 99% rename from src/environnement/Map.java rename to src/game/environnement/Map.java index a189ef3..d46d5a1 100644 --- a/src/environnement/Map.java +++ b/src/game/environnement/Map.java @@ -1,10 +1,10 @@ -package environnement; +package game.environnement; import java.util.ArrayList; import java.util.Random; import personnage.*; -import types.*; +import personnage.types.*; /** diff --git a/src/personnage/IAQLearning.java b/src/personnage/IA.java similarity index 86% rename from src/personnage/IAQLearning.java rename to src/personnage/IA.java index f5c8b77..bb4d5d7 100644 --- a/src/personnage/IAQLearning.java +++ b/src/personnage/IA.java @@ -2,17 +2,17 @@ package personnage; import java.util.UUID; -import IA.*; -import connexion.Channel; -import environnement.Grid; -import environnement.Map; -import types.Mouvement; +import game.connexion.Channel; +import game.environnement.Grid; +import game.environnement.Map; +import personnage.IAQLearning.*; +import personnage.types.Mouvement; /** * La classe IAQLearning représente un joueur contrôlé par une Intelligence Artificielle * utilisant l'algorithme de Q-learning pour prendre des décisions dans un jeu. */ -public class IAQLearning extends Personnage { +public class IA extends Personnage { private QLearning qLearning; // L'algorithme de Q-learning utilisé par l'IA. /** @@ -22,14 +22,14 @@ public class IAQLearning extends Personnage { * @param gamma Le facteur de récompense future de l'algorithme de Q-learning. * @param epsilon Le taux d'exploration de l'algorithme de Q-learning. */ - public IAQLearning(int[] coordinate, QTable qTable, double alpha, double gamma, double epsilon) { + public IA(int[] coordinate, QTable qTable, double alpha, double gamma, double epsilon, String name) { super(coordinate); // Appel au constructeur de la classe mère. // Initialisation de l'algorithme de Q-learning avec les paramètres spécifiés. this.qLearning = new QLearning(qTable, alpha, gamma, epsilon); // Attribution d'un nom unique à l'IA. - this.name = "IA : " + UUID.randomUUID(); + this.name = (name == null) ? "IA : " + UUID.randomUUID() : name; } /** @@ -38,10 +38,10 @@ public class IAQLearning extends Personnage { * @param coordinate * @param qTable */ - public IAQLearning(int[] coordinate, QTable qTable) { + public IA(int[] coordinate, QTable qTable, String name) { super(coordinate); // Appel au constructeur de la classe mère. this.qLearning = new QLearning(qTable, 0.0, 0.0, 0.0); - this.name = "IA : " + UUID.randomUUID(); + this.name = (name == null) ? "IA : " + UUID.randomUUID() : name; } /** diff --git a/src/IA/Actions.java b/src/personnage/IAQLearning/Actions.java similarity index 97% rename from src/IA/Actions.java rename to src/personnage/IAQLearning/Actions.java index 23d0124..c6ab389 100644 --- a/src/IA/Actions.java +++ b/src/personnage/IAQLearning/Actions.java @@ -1,9 +1,9 @@ -package IA; +package personnage.IAQLearning; import java.io.Serializable; import java.util.Objects; -import types.Mouvement; +import personnage.types.Mouvement; /** * Cette classe permet de sauvegarder chaque action que l'IA diff --git a/src/IA/QLearning.java b/src/personnage/IAQLearning/QLearning.java similarity index 98% rename from src/IA/QLearning.java rename to src/personnage/IAQLearning/QLearning.java index 8f0f224..d30baa0 100644 --- a/src/IA/QLearning.java +++ b/src/personnage/IAQLearning/QLearning.java @@ -1,6 +1,6 @@ -package IA; +package personnage.IAQLearning; -import types.Mouvement; +import personnage.types.Mouvement; /** * Cette classe représente un algorithme d'apprentissage par renforcement diff --git a/src/IA/QTable.java b/src/personnage/IAQLearning/QTable.java similarity index 97% rename from src/IA/QTable.java rename to src/personnage/IAQLearning/QTable.java index 575e7f2..9678d76 100644 --- a/src/IA/QTable.java +++ b/src/personnage/IAQLearning/QTable.java @@ -1,10 +1,10 @@ -package IA; +package personnage.IAQLearning; import java.io.*; import java.util.HashMap; import java.util.Map; -import types.Mouvement; +import personnage.types.Mouvement; /** * cette classe permet de sauvegarder chaque action que l'IA diff --git a/src/IA/State.java b/src/personnage/IAQLearning/State.java similarity index 97% rename from src/IA/State.java rename to src/personnage/IAQLearning/State.java index 35bef72..19ba9a1 100644 --- a/src/IA/State.java +++ b/src/personnage/IAQLearning/State.java @@ -1,11 +1,11 @@ -package IA; +package personnage.IAQLearning; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Objects; -import environnement.Grid; +import game.environnement.Grid; /** * La classe Etats est cruciale pour le Q-Learning car c'est elle diff --git a/src/personnage/Personnage.java b/src/personnage/Personnage.java index 6aba2cb..264d324 100644 --- a/src/personnage/Personnage.java +++ b/src/personnage/Personnage.java @@ -2,8 +2,8 @@ package personnage; import java.util.ArrayList; -import environnement.*; -import types.*; +import game.environnement.*; +import personnage.types.*; /** * Cette classe est la primitive des classes diff --git a/src/personnage/Player.java b/src/personnage/Player.java index 99cf99a..b3322de 100644 --- a/src/personnage/Player.java +++ b/src/personnage/Player.java @@ -2,9 +2,9 @@ package personnage; import java.util.Scanner; -import connexion.Channel; -import environnement.Map; -import types.*; +import game.connexion.Channel; +import game.environnement.Map; +import personnage.types.*; /** * la classe Player a comme classe parent {@link Personnage} diff --git a/src/personnage/Robot.java b/src/personnage/Robot.java index 8e4179c..69d7590 100644 --- a/src/personnage/Robot.java +++ b/src/personnage/Robot.java @@ -3,9 +3,9 @@ package personnage; import java.util.ArrayList; import java.util.Random; -import types.*; -import connexion.*; -import environnement.*; +import game.connexion.*; +import game.environnement.*; +import personnage.types.*; public class Robot extends Personnage { diff --git a/src/types/Effect.java b/src/personnage/types/Effect.java similarity index 94% rename from src/types/Effect.java rename to src/personnage/types/Effect.java index f384e06..670fc99 100644 --- a/src/types/Effect.java +++ b/src/personnage/types/Effect.java @@ -1,4 +1,4 @@ -package types; +package personnage.types; /** * cette enumérateur {@link Effects} contient tout les effets diff --git a/src/types/Item.java b/src/personnage/types/Item.java similarity index 91% rename from src/types/Item.java rename to src/personnage/types/Item.java index f20faa5..cbd9f89 100644 --- a/src/types/Item.java +++ b/src/personnage/types/Item.java @@ -1,6 +1,6 @@ -package types; +package personnage.types; -import environnement.Grid; +import game.environnement.Grid; /** * cette enum représente différents types d'objets dans le jeu. @@ -9,7 +9,7 @@ public enum Item implements Grid { /** * Mur impassable. * Effet associé :
{@code types.Effect.IMPASSABLE}
- * utf : null car c'est un autre programme qui gère le mur. + * utf : null car c'est une autre fonction qui gère le mur. */ WALL(Effect.IMPASSABLE, null), diff --git a/src/types/Mouvement.java b/src/personnage/types/Mouvement.java similarity index 98% rename from src/types/Mouvement.java rename to src/personnage/types/Mouvement.java index 2583f1e..83dc11c 100644 --- a/src/types/Mouvement.java +++ b/src/personnage/types/Mouvement.java @@ -1,4 +1,4 @@ -package types; +package personnage.types; /** * Cet enumerateur prend en charge tout les mouvements possible diff --git a/src/types/SnakePart.java b/src/personnage/types/SnakePart.java similarity index 91% rename from src/types/SnakePart.java rename to src/personnage/types/SnakePart.java index 6ee7305..15d2e14 100644 --- a/src/types/SnakePart.java +++ b/src/personnage/types/SnakePart.java @@ -1,6 +1,6 @@ -package types; +package personnage.types; -import environnement.Grid; +import game.environnement.Grid; public enum SnakePart implements Grid { HEAD(Effect.IMPASSABLE, " \u25CF "), diff --git a/src/tests/IATest.java b/src/tests/IATest.java index f116e32..6e35995 100644 --- a/src/tests/IATest.java +++ b/src/tests/IATest.java @@ -3,14 +3,14 @@ package tests; import java.io.File; import java.util.Arrays; -import IA.QTable; -import IA.State; import display.Display; -import environnement.Grid; -import environnement.Map; -import personnage.IAQLearning; +import game.environnement.Grid; +import game.environnement.Map; +import personnage.IA; import personnage.Personnage; -import types.Mouvement; +import personnage.IAQLearning.QTable; +import personnage.IAQLearning.State; +import personnage.types.Mouvement; public class IATest { private final static String path1 = "res" + File.separator + @@ -34,7 +34,7 @@ public class IATest { for(int episode = 0; episode < totalEpisodes; episode++) { QTable qTable = new QTable(); - IAQLearning iaqLearning = new IAQLearning(new int[] {2, 2}, qTable, alpha, gamma, epsilon); + IA iaqLearning = new IA(new int[] {2, 2}, qTable, alpha, gamma, epsilon, null); Map map = new Map(12, 22); qTable.getValues(path1); @@ -93,19 +93,19 @@ public class IATest { for (int episode = 0; episode < maxEpisode; episode++) { Map map = new Map(12, 22); - IAQLearning[] iaqLearnings = new IAQLearning[] { - new IAQLearning(new int[] {2, 2}, qTable1, alpha, gamma, epsilon), - new IAQLearning(new int[] {9, 19}, qTable2, alpha, gamma, epsilon), + IA[] iaqLearnings = new IA[] { + new IA(new int[] {2, 2}, qTable1, alpha, gamma, epsilon, null), + new IA(new int[] {9, 19}, qTable2, alpha, gamma, epsilon, null), }; boolean isGameOver = false; while(true) { for (int personnages = 0; personnages < iaqLearnings.length; personnages++) { - IAQLearning iaqLearning = iaqLearnings[personnages]; + IA iaqLearning = iaqLearnings[personnages]; Map mapIA = new Map(map.getGrid()[0].length, map.getGrid().length); - for (IAQLearning value : iaqLearnings) { + for (IA value : iaqLearnings) { map.placePersonnages(value); } diff --git a/src/tests/MapTest.java b/src/tests/MapTest.java index 12aa357..2fca9df 100644 --- a/src/tests/MapTest.java +++ b/src/tests/MapTest.java @@ -1,9 +1,9 @@ package tests; import display.Display; -import environnement.Map; +import game.environnement.Map; import personnage.Player; -import types.Item; +import personnage.types.Item; public class MapTest { public static void creationMap() { diff --git a/src/tests/PersonnageTest.java b/src/tests/PersonnageTest.java index 6756762..d1be4a7 100644 --- a/src/tests/PersonnageTest.java +++ b/src/tests/PersonnageTest.java @@ -2,8 +2,8 @@ package tests; import personnage.Personnage; import personnage.Player; -import types.Effect; -import types.Mouvement; +import personnage.types.Effect; +import personnage.types.Mouvement; public class PersonnageTest { public static void avancerPersonnage() { diff --git a/src/tests/QTableTest.java b/src/tests/QTableTest.java index a05751b..f6eb48d 100644 --- a/src/tests/QTableTest.java +++ b/src/tests/QTableTest.java @@ -4,10 +4,10 @@ import java.io.File; import java.util.ArrayList; import java.util.Arrays; -import IA.QTable; -import IA.State; -import environnement.Grid; -import types.Mouvement; +import game.environnement.Grid; +import personnage.IAQLearning.QTable; +import personnage.IAQLearning.State; +import personnage.types.Mouvement; public class QTableTest { private final static String path = "res" + File.separator +