mirror of
https://github.com/Cpt-Adok/SNAKE.git
synced 2026-01-25 16:34:08 +00:00
ajout des fichiers necessaires
This commit is contained in:
63
conf.xml
Normal file
63
conf.xml
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<!-- 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>
|
||||||
7
src/Configuration.java
Normal file
7
src/Configuration.java
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import javax.xml.*;
|
||||||
|
|
||||||
|
public class Configuration {
|
||||||
|
public Configuration() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import IA.QTable;
|
|
||||||
import environnement.*;
|
|
||||||
import game.Terminal;
|
import game.Terminal;
|
||||||
|
import game.environnement.*;
|
||||||
import personnage.*;
|
import personnage.*;
|
||||||
|
import personnage.IAQLearning.QTable;
|
||||||
import tests.IATest;
|
import tests.IATest;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package display;
|
package display;
|
||||||
|
|
||||||
import environnement.Grid;
|
import game.environnement.Grid;
|
||||||
import personnage.Personnage;
|
import personnage.Personnage;
|
||||||
import types.Item;
|
import personnage.types.Item;
|
||||||
|
|
||||||
public class Display {
|
public class Display {
|
||||||
private static int round = 0;
|
private static int round = 0;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package game;
|
package game;
|
||||||
|
|
||||||
import connexion.Channel;
|
|
||||||
import display.Display;
|
import display.Display;
|
||||||
import environnement.Map;
|
import game.connexion.Channel;
|
||||||
|
import game.environnement.Map;
|
||||||
import personnage.Personnage;
|
import personnage.Personnage;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package connexion;
|
package game.connexion;
|
||||||
|
|
||||||
import types.Mouvement;
|
import game.environnement.*;
|
||||||
import environnement.*;
|
|
||||||
import personnage.Personnage;
|
import personnage.Personnage;
|
||||||
|
import personnage.types.Mouvement;
|
||||||
|
|
||||||
public class Channel extends Personnage {
|
public class Channel extends Personnage {
|
||||||
private Reseau reseau;
|
private Reseau reseau;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package connexion;
|
package game.connexion;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
package environnement;
|
package game.environnement;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import types.Effect;
|
|
||||||
|
import personnage.types.Effect;
|
||||||
|
|
||||||
public interface Grid extends Serializable {
|
public interface Grid extends Serializable {
|
||||||
/**
|
/**
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package environnement;
|
package game.environnement;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import personnage.*;
|
import personnage.*;
|
||||||
import types.*;
|
import personnage.types.*;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2,17 +2,17 @@ package personnage;
|
|||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import IA.*;
|
import game.connexion.Channel;
|
||||||
import connexion.Channel;
|
import game.environnement.Grid;
|
||||||
import environnement.Grid;
|
import game.environnement.Map;
|
||||||
import environnement.Map;
|
import personnage.IAQLearning.*;
|
||||||
import types.Mouvement;
|
import personnage.types.Mouvement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* La classe IAQLearning représente un joueur contrôlé par une Intelligence Artificielle
|
* 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.
|
* 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.
|
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 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.
|
* @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.
|
super(coordinate); // Appel au constructeur de la classe mère.
|
||||||
|
|
||||||
// Initialisation de l'algorithme de Q-learning avec les paramètres spécifiés.
|
// Initialisation de l'algorithme de Q-learning avec les paramètres spécifiés.
|
||||||
this.qLearning = new QLearning(qTable, alpha, gamma, epsilon);
|
this.qLearning = new QLearning(qTable, alpha, gamma, epsilon);
|
||||||
|
|
||||||
// Attribution d'un nom unique à l'IA.
|
// 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 coordinate
|
||||||
* @param qTable
|
* @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.
|
super(coordinate); // Appel au constructeur de la classe mère.
|
||||||
this.qLearning = new QLearning(qTable, 0.0, 0.0, 0.0);
|
this.qLearning = new QLearning(qTable, 0.0, 0.0, 0.0);
|
||||||
this.name = "IA : " + UUID.randomUUID();
|
this.name = (name == null) ? "IA : " + UUID.randomUUID() : name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package IA;
|
package personnage.IAQLearning;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import types.Mouvement;
|
import personnage.types.Mouvement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cette classe permet de sauvegarder chaque action que l'IA
|
* Cette classe permet de sauvegarder chaque action que l'IA
|
||||||
@@ -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
|
* Cette classe représente un algorithme d'apprentissage par renforcement
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package IA;
|
package personnage.IAQLearning;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import types.Mouvement;
|
import personnage.types.Mouvement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cette classe permet de sauvegarder chaque action que l'IA
|
* cette classe permet de sauvegarder chaque action que l'IA
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package IA;
|
package personnage.IAQLearning;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import environnement.Grid;
|
import game.environnement.Grid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* La classe Etats est cruciale pour le Q-Learning car c'est elle
|
* La classe Etats est cruciale pour le Q-Learning car c'est elle
|
||||||
@@ -2,8 +2,8 @@ package personnage;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import environnement.*;
|
import game.environnement.*;
|
||||||
import types.*;
|
import personnage.types.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cette classe est la primitive des classes
|
* Cette classe est la primitive des classes
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ package personnage;
|
|||||||
|
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
import connexion.Channel;
|
import game.connexion.Channel;
|
||||||
import environnement.Map;
|
import game.environnement.Map;
|
||||||
import types.*;
|
import personnage.types.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* la classe Player a comme classe parent {@link Personnage}
|
* la classe Player a comme classe parent {@link Personnage}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package personnage;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import types.*;
|
import game.connexion.*;
|
||||||
import connexion.*;
|
import game.environnement.*;
|
||||||
import environnement.*;
|
import personnage.types.*;
|
||||||
|
|
||||||
public class Robot extends Personnage {
|
public class Robot extends Personnage {
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package types;
|
package personnage.types;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cette enumérateur {@link Effects} contient tout les effets
|
* cette enumérateur {@link Effects} contient tout les effets
|
||||||
@@ -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.
|
* cette enum représente différents types d'objets dans le jeu.
|
||||||
@@ -9,7 +9,7 @@ public enum Item implements Grid {
|
|||||||
/**
|
/**
|
||||||
* Mur impassable.
|
* Mur impassable.
|
||||||
* Effet associé : <pre>{@code types.Effect.IMPASSABLE}</pre>
|
* Effet associé : <pre>{@code types.Effect.IMPASSABLE}</pre>
|
||||||
* 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),
|
WALL(Effect.IMPASSABLE, null),
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package types;
|
package personnage.types;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cet enumerateur prend en charge tout les mouvements possible
|
* Cet enumerateur prend en charge tout les mouvements possible
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package types;
|
package personnage.types;
|
||||||
|
|
||||||
import environnement.Grid;
|
import game.environnement.Grid;
|
||||||
|
|
||||||
public enum SnakePart implements Grid {
|
public enum SnakePart implements Grid {
|
||||||
HEAD(Effect.IMPASSABLE, " \u25CF "),
|
HEAD(Effect.IMPASSABLE, " \u25CF "),
|
||||||
@@ -3,14 +3,14 @@ package tests;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import IA.QTable;
|
|
||||||
import IA.State;
|
|
||||||
import display.Display;
|
import display.Display;
|
||||||
import environnement.Grid;
|
import game.environnement.Grid;
|
||||||
import environnement.Map;
|
import game.environnement.Map;
|
||||||
import personnage.IAQLearning;
|
import personnage.IA;
|
||||||
import personnage.Personnage;
|
import personnage.Personnage;
|
||||||
import types.Mouvement;
|
import personnage.IAQLearning.QTable;
|
||||||
|
import personnage.IAQLearning.State;
|
||||||
|
import personnage.types.Mouvement;
|
||||||
|
|
||||||
public class IATest {
|
public class IATest {
|
||||||
private final static String path1 = "res" + File.separator +
|
private final static String path1 = "res" + File.separator +
|
||||||
@@ -34,7 +34,7 @@ public class IATest {
|
|||||||
|
|
||||||
for(int episode = 0; episode < totalEpisodes; episode++) {
|
for(int episode = 0; episode < totalEpisodes; episode++) {
|
||||||
QTable qTable = new QTable();
|
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);
|
Map map = new Map(12, 22);
|
||||||
|
|
||||||
qTable.getValues(path1);
|
qTable.getValues(path1);
|
||||||
@@ -93,19 +93,19 @@ public class IATest {
|
|||||||
for (int episode = 0; episode < maxEpisode; episode++) {
|
for (int episode = 0; episode < maxEpisode; episode++) {
|
||||||
Map map = new Map(12, 22);
|
Map map = new Map(12, 22);
|
||||||
|
|
||||||
IAQLearning[] iaqLearnings = new IAQLearning[] {
|
IA[] iaqLearnings = new IA[] {
|
||||||
new IAQLearning(new int[] {2, 2}, qTable1, alpha, gamma, epsilon),
|
new IA(new int[] {2, 2}, qTable1, alpha, gamma, epsilon, null),
|
||||||
new IAQLearning(new int[] {9, 19}, qTable2, alpha, gamma, epsilon),
|
new IA(new int[] {9, 19}, qTable2, alpha, gamma, epsilon, null),
|
||||||
};
|
};
|
||||||
|
|
||||||
boolean isGameOver = false;
|
boolean isGameOver = false;
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
for (int personnages = 0; personnages < iaqLearnings.length; personnages++) {
|
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);
|
Map mapIA = new Map(map.getGrid()[0].length, map.getGrid().length);
|
||||||
|
|
||||||
for (IAQLearning value : iaqLearnings) {
|
for (IA value : iaqLearnings) {
|
||||||
map.placePersonnages(value);
|
map.placePersonnages(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package tests;
|
package tests;
|
||||||
|
|
||||||
import display.Display;
|
import display.Display;
|
||||||
import environnement.Map;
|
import game.environnement.Map;
|
||||||
import personnage.Player;
|
import personnage.Player;
|
||||||
import types.Item;
|
import personnage.types.Item;
|
||||||
|
|
||||||
public class MapTest {
|
public class MapTest {
|
||||||
public static void creationMap() {
|
public static void creationMap() {
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package tests;
|
|||||||
|
|
||||||
import personnage.Personnage;
|
import personnage.Personnage;
|
||||||
import personnage.Player;
|
import personnage.Player;
|
||||||
import types.Effect;
|
import personnage.types.Effect;
|
||||||
import types.Mouvement;
|
import personnage.types.Mouvement;
|
||||||
|
|
||||||
public class PersonnageTest {
|
public class PersonnageTest {
|
||||||
public static void avancerPersonnage() {
|
public static void avancerPersonnage() {
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import java.io.File;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import IA.QTable;
|
import game.environnement.Grid;
|
||||||
import IA.State;
|
import personnage.IAQLearning.QTable;
|
||||||
import environnement.Grid;
|
import personnage.IAQLearning.State;
|
||||||
import types.Mouvement;
|
import personnage.types.Mouvement;
|
||||||
|
|
||||||
public class QTableTest {
|
public class QTableTest {
|
||||||
private final static String path = "res" + File.separator +
|
private final static String path = "res" + File.separator +
|
||||||
|
|||||||
Reference in New Issue
Block a user