diff --git a/src/main/java/bitFight/Action.java b/src/main/java/bitFight/Action.java
index 3dbfbace10f235714fec2bda4108bb0225dab94e..5110614edefe2a3f51394f5255f7f060c7026f00 100644
--- a/src/main/java/bitFight/Action.java
+++ b/src/main/java/bitFight/Action.java
@@ -1,5 +1,8 @@
 package bitFight;
 
+
 public interface Action {
+    public ActionType getActionType();
     public String getAction();
+    public String getName();
 }
diff --git a/src/main/java/bitFight/ActionType.java b/src/main/java/bitFight/ActionType.java
new file mode 100644
index 0000000000000000000000000000000000000000..45b06eb375f11a57ec08abc008516d79208e7722
--- /dev/null
+++ b/src/main/java/bitFight/ActionType.java
@@ -0,0 +1,6 @@
+package bitFight;
+
+public enum ActionType {
+    DEFENSE,
+    ATTACK;
+}
diff --git a/src/main/java/bitFight/Attack.java b/src/main/java/bitFight/Attack.java
index d551dfd321d51145a2407649f9350d3b1754da91..1d881f8ce3256af0220357eba67e2e20c3f0733a 100644
--- a/src/main/java/bitFight/Attack.java
+++ b/src/main/java/bitFight/Attack.java
@@ -43,4 +43,8 @@ public enum Attack implements Action {
     public static boolean attackInTime(LocalDateTime timeBeforeAttack, int attackTime) {
         return (Duration.between(timeBeforeAttack, LocalDateTime.now()).toSeconds() > attackTime);
     }
+
+    public ActionType getActionType(){
+        return ActionType.ATTACK;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/bitFight/Defense.java b/src/main/java/bitFight/Defense.java
index 659643dc72ccf9adf92b0e7675ffb1eda3092696..73dbcf3c1cd66ff43944bdf10894a7fe1cff128f 100644
--- a/src/main/java/bitFight/Defense.java
+++ b/src/main/java/bitFight/Defense.java
@@ -24,4 +24,8 @@ public enum Defense implements Action {
     public String getAction() {
         return "Defense";
     }
+
+    public ActionType getActionType(){
+        return ActionType.DEFENSE;
+    }
 }
diff --git a/src/main/java/bitFight/Level.java b/src/main/java/bitFight/Level.java
index 97abb664a2bc11af16253b20a2ef2ec179b2723d..e8a6cc868c11f15ccb478a6064f9db2a156e7db2 100644
--- a/src/main/java/bitFight/Level.java
+++ b/src/main/java/bitFight/Level.java
@@ -175,7 +175,7 @@ public class Level{
         if(defense.getHeight() == attack.getHeight()){
             character.currentEnergy += 60;
             if(character.currentEnergy > character.maxEnergy) character.currentEnergy = character.maxEnergy;
-            System.out.println("The attack is blocked! 60 energy is gained");
+            System.out.println("The " + attack.getName() + " is blocked! 60 energy is gained");
         } else {
             character.currentEnergy += 30;
             character.currentHealth -= attack.getDamage();
diff --git a/src/main/java/bitFight/Main.java b/src/main/java/bitFight/Main.java
index 5271d2340a908b7f1baba108d7ff6f87619fcb2a..9f3da34cbad933b8e7617062fd9171bf5adbf66d 100644
--- a/src/main/java/bitFight/Main.java
+++ b/src/main/java/bitFight/Main.java
@@ -52,10 +52,13 @@ class Main {
         
         Display.goToUserInput();
         
-        // Récupère le nom de cahque attaque dans une ArrayList
+        ArrayList<Action> actionList = new ArrayList<>();
+        for (Attack a : Attack.values()) actionList.add(a);
+        for (Defense d : Defense.values()) actionList.add(d);
+
+        // Récupère le nom de chaque action dans une ArrayList
         ArrayList<String> actionNames = new ArrayList<>();
-        for (Attack a : Attack.values()) actionNames.add(a.getName());
-        for (Defense d : Defense.values()) actionNames.add(d.getName());
+        for (Action a : actionList) actionNames.add(a.getName());
         
         BufferedReader in= new BufferedReader( new InputStreamReader(System.in));
         
@@ -83,6 +86,7 @@ class Main {
                 
                 // Boucle tant que le joueur n'a pas taper de nom d'une attaque valide ou tape trop tard ou tape q
                 while ((!actionNames.contains(input.getInput()) || !Attack.attackInTime(timeBeforeAttack, attackTime)) && !input.getInput().equals("q")) {
+                    
                     //Si le joueur est trop lent, l'ennemi fait une attaque aléatoire
                     if(!Attack.attackInTime(timeBeforeAttack, attackTime)){
                         Display.clearDialogBox();
@@ -101,8 +105,18 @@ class Main {
                 
                 
                 if(!player.isExhausted() && !input.getInput().equals("q") ){
-                    Attack attack = Attack.valueOf(actionNames.get(actionNames.indexOf(input.getInput())).toUpperCase());
-                    level.playerHasEnergy(attack);
+                    ActionType type = null;
+                    for(Action a : actionList) if(a.getName().equals(input.getInput())) type = a.getActionType();
+                    if(type == ActionType.ATTACK) {
+                        Attack attack = (Attack) actionList.get(actionList.indexOf(input.getInput()));
+                        level.playerHasEnergy(attack);
+                    } else
+                    if(type == ActionType.DEFENSE) {
+                        Defense defense = (Defense) actionList.get(actionList.indexOf(input.getInput()));
+                        Attack randomEnemyAttack = Attack.values()[(int) rand.nextDouble()*Attack.values().length];
+                        level.defends(player, defense, randomEnemyAttack);
+                    }
+                    
                 } else {} //TODO ajouter display trop fatigué