mirror of
https://github.com/Cpt-Adok/SNAKE.git
synced 2026-01-25 12:34:07 +00:00
ajout des fichiers necessaires
This commit is contained in:
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 IA.QTable;
|
||||
import environnement.*;
|
||||
import game.Terminal;
|
||||
import game.environnement.*;
|
||||
import personnage.*;
|
||||
import personnage.IAQLearning.QTable;
|
||||
import tests.IATest;
|
||||
|
||||
public class Main {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -1,4 +1,4 @@
|
||||
package connexion;
|
||||
package game.connexion;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@@ -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 {
|
||||
/**
|
||||
@@ -1,10 +1,10 @@
|
||||
package environnement;
|
||||
package game.environnement;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Random;
|
||||
|
||||
import personnage.*;
|
||||
import types.*;
|
||||
import personnage.types.*;
|
||||
|
||||
|
||||
/**
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package types;
|
||||
package personnage.types;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
@@ -9,7 +9,7 @@ public enum Item implements Grid {
|
||||
/**
|
||||
* Mur impassable.
|
||||
* 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),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package types;
|
||||
package personnage.types;
|
||||
|
||||
/**
|
||||
* 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 {
|
||||
HEAD(Effect.IMPASSABLE, " \u25CF "),
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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 +
|
||||
|
||||
Reference in New Issue
Block a user