From c8a70585f4a0fb262ea2c71d847e5da8599c8a60 Mon Sep 17 00:00:00 2001
From: Camille Okubo <camille.okubo.etu@univ-lille.fr>
Date: Thu, 5 Sep 2024 11:17:19 +0200
Subject: [PATCH] =?UTF-8?q?algo=20main=20d=C3=A9fense?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/main/java/bitFight/Action.java     |  3 +++
 src/main/java/bitFight/ActionType.java |  6 ++++++
 src/main/java/bitFight/Attack.java     |  4 ++++
 src/main/java/bitFight/Defense.java    |  4 ++++
 src/main/java/bitFight/Level.java      |  2 +-
 src/main/java/bitFight/Main.java       | 24 +++++++++++++++++++-----
 6 files changed, 37 insertions(+), 6 deletions(-)
 create mode 100644 src/main/java/bitFight/ActionType.java

diff --git a/src/main/java/bitFight/Action.java b/src/main/java/bitFight/Action.java
index 3dbfbac..5110614 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 0000000..45b06eb
--- /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 d551dfd..1d881f8 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 659643d..73dbcf3 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 97abb66..e8a6cc8 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 5271d23..9f3da34 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é
                 
                 
-- 
GitLab