diff --git a/res/ASCII-Table.svg b/lib/ASCII-Table.svg
similarity index 100%
rename from res/ASCII-Table.svg
rename to lib/ASCII-Table.svg
diff --git a/res/ProjetL12024.pdf b/lib/ProjetL12024.pdf
similarity index 100%
rename from res/ProjetL12024.pdf
rename to lib/ProjetL12024.pdf
diff --git a/src/Characters/Mouvements.java b/src/Characters/Mouvements.java
new file mode 100644
index 0000000..56b8748
--- /dev/null
+++ b/src/Characters/Mouvements.java
@@ -0,0 +1,63 @@
+package Characters;
+
+/**
+ * Cet enumerateur prend en charge tout les mouvements possible
+ * pour le serpent, il a uniquement la possibilité de se déplacer
+ * grâce a {@link Mouvements} pour la classe Player et Robot.
+ */
+public enum Mouvements {
+ /**
+ * HAUT prend comme coordonnée (0, -1) pour se déplacer.
+ * @param x = 0
+ * @param y = -1
+ */
+ HAUT(0, -1),
+
+ /**
+ * BAS prend comme coordonnée (0, 1) pour se déplacer.
+ * @param x = 0
+ * @param y = 1
+ */
+ BAS(0, 1),
+
+ /**
+ * GAUCHE prend comme coordonnée (1, 0) pour se déplacer.
+ * @param x = 1
+ * @param y = 0
+ */
+ GAUCHE(1, 0),
+
+ /**
+ * @DROITE prend comme coordonnée (-1, 0) pour se déplacer.
+ * @param x = -1
+ * @param y = 0
+ */
+ DROITE(-1, 0);
+
+ private final int deltaX;
+ private final int deltaY;
+
+ Mouvements(int deltaX, int deltaY) {
+ this.deltaX = deltaX;
+ this.deltaY = deltaY;
+ }
+
+ /**
+ * Cette fonction prend les coordonnées mis en paramètre et
+ * modifie avec les coordonnées de l'enum.
+ * @param coordinate prend principalement les coordonnées du
+ * personnage
+ */
+ public void editCoordinate(int[] coordinate) {
+ coordinate[0] += this.deltaX;
+ coordinate[1] += this.deltaY;
+ }
+
+ /**
+ * Cette fonction retourne les coordonnées des valeurs du mouvement.
+ * @return la liste qui contient [0] = x et [1] = y
+ */
+ public int[] getCoordinate() {
+ return new int[] {this.deltaX, this.deltaY};
+ }
+}
diff --git a/src/Characters/Personnage.java b/src/Characters/Personnage.java
new file mode 100644
index 0000000..820df2e
--- /dev/null
+++ b/src/Characters/Personnage.java
@@ -0,0 +1,136 @@
+package Characters;
+
+import java.util.ArrayList;
+
+import Objects.Snake;
+
+/**
+ * Cet classe est la classe precurseur de tout les heritage pour creer un
+ * personnage jouable.
+ */
+public class Personnage {
+ private int n;
+ private int round;
+ private int size = 0;
+ private Snake head = Snake.HEAD;
+
+ /**
+ *
la liste de toute les coordonnées en fonction de N. Si N = 2,
+ * tout les deux tours, la taille du serpent augmente de 1. Si N = 3,
+ * tous les 3 tours, ça va augmenter de 1. On peut l'ecrire comme
+ * Round/N (les deux variables en int).
+ *
Le premier index est la coordonnée de la tête et les autres
+ * sont les coordonnées de son corps.
+ */
+ private ArrayList coordinate;
+
+ /**
+ *
le constructor definie un arrayList pour {@link #coordinate}
+ * et defini n.
+ *
+ * @param name est le nom du personnage.
+ * @param n est une variable qui contient le nombre de tour avant
+ * l'augmentation de taille.
+ * @param coordinate est la variable qui contient les coordonnées
+ * qui sont placé par la suite dans {@link #coordinate}[0]
+ */
+ protected Personnage(int n, int[] coordinate) {
+ this.coordinate = new ArrayList();
+ this.coordinate.add(coordinate);
+
+ this.n = n;
+ }
+
+ /**
+ * cette fonction retourne la premiere coordonnée de la liste {@link
+ * #coordinate} qui la tête du personnage
+ * @return la tête du personnage.
+ */
+ public int[] getPrimaryCoordinate() {
+ return coordinate.get(0);
+ }
+
+ /**
+ * cette fonction retourne toute la liste {@link #coordinate} de
+ * coordonnée du serpent.
+ * @return toute la liste des coordonnées du serpent
+ */
+ public ArrayList getCoordinate() {
+ return coordinate;
+ }
+
+ /**
+ * @return augmente le tour après que le personnage a jouer
+ */
+ public int incrementRound() {
+ return ++this.round;
+ }
+
+ /**
+ * @return retourn un bool pour savoir si la taille s'est
+ * aggrandi
+ */
+ public boolean isIncreaseSize() {
+ int size = this.round/n;
+ if (this.size < size) {
+ this.size = size;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @return retourn un bool pour savoir si la taille s'est
+ * retreci.
+ */
+ public boolean isDecreaseSize() {
+ int size = this.round/n;
+ if (this.size > size) {
+ this.size = size;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ *
cette fonction est très pratique aggrandir le serpent
+ * car elle garde la derniere coordonnée et si on la fusionne
+ * avec {@link #moveToLatestCoordinate()}, on peut l'utiliser
+ * ajouter la coordonnée pour justement l'aggrandir.
+ * @return garde la derniere coordonnée du serpent (sa queue)
+ */
+ public int[] keepLatestCoordinate() {
+ return this.coordinate.get(getCoordinate().size()-1);
+ }
+
+ /**
+ *
ajoute au dernier index, la valeur en parametre, très utile
+ * en combinant avec {@link #keepLatestCoordinate()} pour aggrandir
+ * le serpent.
+ * @param coordinate ajout de la nouvelle coordonnée
+ */
+ public void moveToLatestCoordinate(int[] coordinate) {
+ this.coordinate.add(coordinate);
+ }
+
+ /**
+ *
modifie toute la liste {@link #coordinate} pour deplacer tout le
+ * serpent.
+ * @param mouvements le mouvement utilisé pour deplacer le serpent
+ */
+ protected void moveSnake(Mouvements mouvements) {
+ for (int[] coordinate : this.coordinate) {
+ mouvements.editCoordinate(coordinate);
+ }
+ }
+
+ public Mouvements getMouvement(int keys) {
+ switch (keys) {
+ case 0x77: return Mouvements.HAUT; // w
+ case 0x73: return Mouvements.BAS; // s
+ case 0x61: return Mouvements.GAUCHE; // a
+ case 0x64: return Mouvements.DROITE; // d
+ default: return null;
+ }
+ }
+}
diff --git a/src/Characters/Players.java b/src/Characters/Players.java
new file mode 100644
index 0000000..7e69f35
--- /dev/null
+++ b/src/Characters/Players.java
@@ -0,0 +1,23 @@
+package Characters;
+
+public class Players extends Personnage {
+ public Players(int[] coordinate, int n) {
+ super(n, coordinate);
+ }
+
+ public Integer changeCoordinate(String input) {
+ if (input.length() > 0) {
+ return (int)input.charAt(0);
+ }
+ return null;
+ }
+
+ public boolean moveCoordinate(int keys) {
+ Mouvements value = getMouvement(keys);
+ if (value != null) {
+ moveSnake(value);
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/Characters/Robot.java b/src/Characters/Robot.java
new file mode 100644
index 0000000..ddc6640
--- /dev/null
+++ b/src/Characters/Robot.java
@@ -0,0 +1,9 @@
+package Characters;
+
+public class Robot extends Personnage {
+
+ protected Robot(int[] coordinate, int n) {
+ super(n, coordinate);
+ }
+
+}
diff --git a/src/Reseau.java b/src/Connexion/Reseau.java
similarity index 99%
rename from src/Reseau.java
rename to src/Connexion/Reseau.java
index c54b61c..6d4d397 100644
--- a/src/Reseau.java
+++ b/src/Connexion/Reseau.java
@@ -1,3 +1,5 @@
+package Connexion;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
diff --git a/src/Environnement/Map.java b/src/Environnement/Map.java
new file mode 100644
index 0000000..3677c7c
--- /dev/null
+++ b/src/Environnement/Map.java
@@ -0,0 +1,145 @@
+package Environnement;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+import Characters.Personnage;
+import Objects.*;
+
+/**
+ *
cette classe est la classe qui cree et genere
+ * tout ce qui est important pour la Map du jeu
+ */
+public class Map {
+ /**
+ *
cette variable est toute la grille où se
+ * passe tout le jeu.
+ */
+ private Object[][] grid;
+
+ /**
+ *
cette variable recupere tout les objects stockés
+ */
+ private ArrayList