diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java
index 26d30bfd9073d59a8634ffedc948026f36e79f35..72bb08818518a646ca10eb6e2e107e83a92158e2 100644
--- a/MAVENProject/src/main/java/entity/Character.java
+++ b/MAVENProject/src/main/java/entity/Character.java
@@ -123,5 +123,8 @@ public class Character extends Entity{
     public double getEntityHEIGHT() {
         return this.characterHEIGHT;
     }
+    public int getAlpha() {
+        return alpha;
+    }
     
 }
diff --git a/MAVENProject/src/main/java/jeu/Controller.java b/MAVENProject/src/main/java/jeu/Controller.java
index 0f16ab1422c335ce15ec2113be16439308c7d4dd..625d8824ac734024b632ab623e0c417b2326822a 100644
--- a/MAVENProject/src/main/java/jeu/Controller.java
+++ b/MAVENProject/src/main/java/jeu/Controller.java
@@ -8,6 +8,7 @@ import java.util.HashMap;
 public class Controller implements GameController{
 
     private boolean isRightPressed, isLeftPressed, isSpacePressed;
+    private boolean isLeftCLickPressed;
     private HashMap<String,Boolean> cmd = new HashMap<String,Boolean>();
     /*
     * commande en cours
@@ -18,7 +19,8 @@ public class Controller implements GameController{
     */
 
     public Controller() {
-        isRightPressed = false; isLeftPressed = false; isSpacePressed = false;
+        isRightPressed = false; isLeftPressed = false; isSpacePressed = false; isLeftCLickPressed = false; // pour attaquer sur clique gauche
+        // pour l'instant faut appuyer sur Q mais c'est a changer
     }
     /**
      * getCommand retourne une liste de booleans sous la forme [isRightPressed, isLeftPressed, isSpacePressed]
@@ -28,6 +30,7 @@ public class Controller implements GameController{
         cmd.put("Right",isRightPressed);
         cmd.put("Left",isLeftPressed);
         cmd.put("Jump",isSpacePressed);
+        cmd.put("Attack",isLeftCLickPressed);
         return cmd;
     }
     @Override
@@ -39,6 +42,7 @@ public class Controller implements GameController{
             case KeyEvent.VK_RIGHT -> isRightPressed = true;
             case KeyEvent.VK_LEFT -> isLeftPressed = true;
             case KeyEvent.VK_SPACE -> isSpacePressed = true;
+            case KeyEvent.VK_Q -> isLeftCLickPressed = true;
         }
     }
     @Override
@@ -47,6 +51,7 @@ public class Controller implements GameController{
             case KeyEvent.VK_RIGHT -> isRightPressed = false;
             case KeyEvent.VK_LEFT -> isLeftPressed = false;
             case KeyEvent.VK_SPACE -> isSpacePressed = false;
+            case KeyEvent.VK_Q -> isLeftCLickPressed = false;
         }
     }
     @Override
diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java
index db3c886fc6995c1974ab9cce5fdd0f32f6ab6a35..18142087e64ca374daf0336bce04f562d02498c0 100644
--- a/MAVENProject/src/main/java/jeu/Jeu.java
+++ b/MAVENProject/src/main/java/jeu/Jeu.java
@@ -4,7 +4,9 @@ import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import entity.Character;
@@ -22,9 +24,12 @@ public class Jeu implements Game{
     String characterSkinPath; // jsp si c'est le jeu qui doit gerer ca, au pire vous pouvez changer
     final String beginPath;
     String movement;
+    String previousMovement;
     int numberOfMovement;
-    int nbIterationPerFrame = 100;
+    int nbIterationPerFrame = 50;
     int nbBeforeFramechgt = nbIterationPerFrame;
+    //private boolean characterNotMoving = true;
+    private boolean characterAttacking = false; //boolean necessaire pour rendre l'animation d'attaque prioritaire
     
 
     public Jeu(String source) {
@@ -35,6 +40,7 @@ public class Jeu implements Game{
         assert url != null;
         beginPath = url.toString().substring(6)+"/";
         movement = "Character_idle";
+        previousMovement = movement;
         numberOfMovement = 1;
         characterSkinPath = beginPath + movement + numberOfMovement + ".png"; // path premiere frame
         /*A = new ArrayList<Double>();
@@ -52,58 +58,83 @@ public class Jeu implements Game{
             System.out.println("Help not available");
         }
 
+        //on remplit la table de directions du jeu
         directionJeu = new HashMap<>();
         directionJeu.put("Right", false);
         directionJeu.put("Left", false);
         directionJeu.put("Jump", false);
+        directionJeu.put("Attack",false);
         
+        //on remplit la map des frames
+        Map<String,List<String>> tempMap = gameCharacterLoader.getPathTable();
+
+        tempMap.put(movement,new ArrayList<String>());
+        tempMap.get(movement).add("1");
+        tempMap.get(movement).add("2");
+
+        tempMap.put("Character_attack",new ArrayList<String>());
+        tempMap.get("Character_attack").add("1");
+        tempMap.get("Character_attack").add("2");
+        tempMap.get("Character_attack").add("3");
+
+        gameCharacterLoader.setPathTable(tempMap);
+
     }
 
     @Override
-    public void evolve(HashMap<String,Boolean> command) {  // command est sous la forme list de Boolean qui represente les touches préssées. Voir Controller pour la compositions de cet list.
-        /*System.out.println("Execute "+command);
-        System.out.println(gameCharacter.getCoord().getX());
-        System.out.println(gameCharacter.getCoord().getZ());*/
-        /*double comX,comZ;
-        int a = 1;
-        
-        comX = 0;
-        comZ = 0;*/
+    public void evolve(HashMap<String,Boolean> command) {  // command est sous la forme map de Boolean qui represente les touches préssées. Voir Controller pour la compositions de cet list.
+       
+        previousMovement = movement;
 
         directionJeu.replace("Right", command.get("Right"));
         directionJeu.replace("Left", command.get("Left"));
         directionJeu.replace("Jump", command.get("Jump"));
-        /*Boolean Right = command.get("Right");
+        directionJeu.replace("Attack",command.get("Attack"));
+        Boolean Right = command.get("Right");
         boolean Left = command.get("Left");
         boolean Jump = command.get("Jump");
+        boolean Attack = command.get("Attack");
 
-        if (Right && Left){}
-        else if (Right) {
-            comX = gameCharacter.getVitesseMax();
-        }
-        else if (Left) {
-            comX = -gameCharacter.getVitesseMax();
+       
+        //perso evolue dans le jeu
+        gameCharacter.evolveCharacter();
+
+        //animation du perso dans le jeu (definir la bonne frame a tel instant)
+        if (Attack) {
+            movement = "Character_attack";
+            characterAttacking = true;
         }
-        if (Jump) {
-            if (gameCharacter.getCoord().getZ() < coordSol.getZ())a = 0;
-        else if (gameCharacter.getVitesseActuZ() == 0){comZ = gameCharacter.getImpulsionSaut();/*A.add(gameCharacter.getCoord().getZ());n++;/}
+        if (!Right && !Left && (gameCharacter.getAlpha() == 1) && !characterAttacking){
+            movement = "Character_idle";
+            
         }
-        else {
-            if (gameCharacter.getCoord().getZ() < coordSol.getZ()) { //a retoucher, j'ai besoin d'autres choses pour avancer
-                a = 0; 
-            }
-            else{
-                a = 1;
+
+            //characterNotMoving = false;
+            
+        else{ // squelette pour futures implementations
+            if (!characterAttacking){ //animation d'attaque prioritaire
+                movement = "Character_idle"; //ca changera quand j'aurai les nouvelles frames
             }
+        }
+         
         
-        }*/
 
-        gameCharacter.evolveCharacter();
+        //si on a change de mouvement, le jeu doit redemarrer a la premiere frame correspondante
+        if (previousMovement != movement){numberOfMovement = 1;nbBeforeFramechgt = nbIterationPerFrame;}
+        if (numberOfMovement == gameCharacterLoader.getPathTable().get(movement).size()){
+            //characterNotMoving = true;
+            if (movement == "Character_attack"){
+                characterAttacking = false;
+            }
+        }
         if ((nbIterationPerFrame-nbBeforeFramechgt) == nbIterationPerFrame) { // timer pour changer de frame
-            numberOfMovement = numberOfMovement%2 + 1;
+            numberOfMovement = numberOfMovement%gameCharacterLoader.getPathTable().get(movement).size() + 1; //a revoir 
             nbBeforeFramechgt = nbIterationPerFrame;
         }
         else nbBeforeFramechgt--;
+        
+            
+        //actualisation de l'image a afficher
         characterSkinPath = beginPath + movement + numberOfMovement + ".png";
         gameCharacterLoader.setSkinPath(characterSkinPath);
         gameCharacterLoader.refreshImage();
diff --git a/MAVENProject/src/main/java/loaders/CharacterLoader.java b/MAVENProject/src/main/java/loaders/CharacterLoader.java
index 4ba4b8de82d622e1f62e53f806bd13d726674340..e33010a79180e35a1698142c9a1f72eb68396d64 100644
--- a/MAVENProject/src/main/java/loaders/CharacterLoader.java
+++ b/MAVENProject/src/main/java/loaders/CharacterLoader.java
@@ -2,6 +2,10 @@ package loaders;
 
 import entity.Character;
 import java.awt.Image;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
+
 import javax.swing.ImageIcon;
 
 public class CharacterLoader { // classe qui cree le perso
@@ -9,11 +13,14 @@ public class CharacterLoader { // classe qui cree le perso
     private String skinPath; // chemin du skin a l'instant t du jeu
     //private String nameImageOfSkin; // nom de l'image du skin (le truc fonctionne comme ca)
     private Image imageCharacter;
+    private Map<String,List<String>> pathTable; // objet utilise a revoir
 
     public CharacterLoader(String path,Character charac){
         gameCharacter = charac;
         skinPath = path;
         imageCharacter = new ImageIcon(path).getImage();
+        pathTable = new HashMap<String,List<String>>();
+        
     }
 
     public void refreshImage(){
@@ -37,5 +44,13 @@ public class CharacterLoader { // classe qui cree le perso
         this.skinPath = skinPath;
     }
 
+    public Map<String, List<String>> getPathTable() {
+        return pathTable;
+    }
+
+    public void setPathTable(Map<String, List<String>> pathTable) {
+        this.pathTable = pathTable;
+    }
+
     
 }