From d83fdf9337d67bac016e8db396a043627d91b46e Mon Sep 17 00:00:00 2001
From: rosier8u <basile.rosier6@etu.univ-lorraine>
Date: Sun, 17 Dec 2023 14:51:43 +0100
Subject: [PATCH] ajout du dp Command

---
 .../src/modele/DPCommand/Command.java         |  7 +++++
 .../DPCommand/CommandCreerGuerisseur.java     | 13 ++++++++
 .../DPCommand/CommandCreerGuerrier.java       | 14 +++++++++
 .../src/modele/DPCommand/CommandCreerRoi.java | 13 ++++++++
 .../modele/DPCommand/CommandCreerSorcier.java | 12 +++++++
 .../src/modele/DPCommand/Invoker.java         | 31 +++++++++++++++++++
 .../src/modele/DPCommand/Receiver.java        | 23 ++++++++++++++
 .../{ => DPVisiteur}/DegatVisiteur.java       |  3 +-
 .../src/modele/DialogueTerminal.java          | 29 ++++++++---------
 .../src/tests/DegatVisiteurTest.java          |  1 +
 10 files changed, 129 insertions(+), 17 deletions(-)
 create mode 100644 design_pattern/src/modele/DPCommand/Command.java
 create mode 100644 design_pattern/src/modele/DPCommand/CommandCreerGuerisseur.java
 create mode 100644 design_pattern/src/modele/DPCommand/CommandCreerGuerrier.java
 create mode 100644 design_pattern/src/modele/DPCommand/CommandCreerRoi.java
 create mode 100644 design_pattern/src/modele/DPCommand/CommandCreerSorcier.java
 create mode 100644 design_pattern/src/modele/DPCommand/Invoker.java
 create mode 100644 design_pattern/src/modele/DPCommand/Receiver.java
 rename design_pattern/src/modele/{ => DPVisiteur}/DegatVisiteur.java (94%)

diff --git a/design_pattern/src/modele/DPCommand/Command.java b/design_pattern/src/modele/DPCommand/Command.java
new file mode 100644
index 0000000..58ebb15
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/Command.java
@@ -0,0 +1,7 @@
+package modele.DPCommand;
+
+import modele.Jeu;
+
+public interface Command {
+    void execute(Jeu jeu);
+}
\ No newline at end of file
diff --git a/design_pattern/src/modele/DPCommand/CommandCreerGuerisseur.java b/design_pattern/src/modele/DPCommand/CommandCreerGuerisseur.java
new file mode 100644
index 0000000..6f4cb32
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/CommandCreerGuerisseur.java
@@ -0,0 +1,13 @@
+package modele.DPCommand;
+
+import modele.DPFabrique.ConstructeurGuerisseur;
+import modele.DPFabrique.ConstructeurSorcier;
+import modele.Jeu;
+
+public class CommandCreerGuerisseur implements Command{
+    @Override
+    public void execute(Jeu jeu) {
+        jeu.setConstructeur(new ConstructeurGuerisseur());
+        jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+    }
+}
diff --git a/design_pattern/src/modele/DPCommand/CommandCreerGuerrier.java b/design_pattern/src/modele/DPCommand/CommandCreerGuerrier.java
new file mode 100644
index 0000000..47fcd27
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/CommandCreerGuerrier.java
@@ -0,0 +1,14 @@
+package modele.DPCommand;
+
+import modele.DPFabrique.ConstructeurGuerisseur;
+import modele.DPFabrique.ConstructeurGuerrier;
+import modele.DPFabrique.ConstructeurSorcier;
+import modele.Jeu;
+
+public class CommandCreerGuerrier implements Command{
+    @Override
+    public void execute(Jeu jeu) {
+        jeu.setConstructeur(new ConstructeurGuerrier());
+        jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+    }
+}
diff --git a/design_pattern/src/modele/DPCommand/CommandCreerRoi.java b/design_pattern/src/modele/DPCommand/CommandCreerRoi.java
new file mode 100644
index 0000000..8089ca0
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/CommandCreerRoi.java
@@ -0,0 +1,13 @@
+package modele.DPCommand;
+
+import modele.DPFabrique.ConstructeurRoi;
+import modele.DPFabrique.ConstructeurSorcier;
+import modele.Jeu;
+
+public class CommandCreerRoi implements Command{
+    @Override
+    public void execute(Jeu jeu) {
+        jeu.setConstructeur(new ConstructeurRoi());
+        jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+    }
+}
diff --git a/design_pattern/src/modele/DPCommand/CommandCreerSorcier.java b/design_pattern/src/modele/DPCommand/CommandCreerSorcier.java
new file mode 100644
index 0000000..fb5c99e
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/CommandCreerSorcier.java
@@ -0,0 +1,12 @@
+package modele.DPCommand;
+
+import modele.DPFabrique.ConstructeurSorcier;
+import modele.Jeu;
+
+public class CommandCreerSorcier implements Command{
+    @Override
+    public void execute(Jeu jeu) {
+        jeu.setConstructeur(new ConstructeurSorcier());
+        jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+    }
+}
diff --git a/design_pattern/src/modele/DPCommand/Invoker.java b/design_pattern/src/modele/DPCommand/Invoker.java
new file mode 100644
index 0000000..ba3d8d8
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/Invoker.java
@@ -0,0 +1,31 @@
+package modele.DPCommand;
+
+import modele.Jeu;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Invoker {
+    private List<Command> commandHistory = new ArrayList<>();
+    private Jeu jeu;
+
+    public Invoker(Jeu jeu){
+        this.jeu= jeu;
+    }
+    public void executeCommand(Command command) {
+        command.execute(jeu);
+        commandHistory.add(command);
+    }
+
+    public void executeLastCommand(){
+        commandHistory.get(commandHistory.size()).execute(jeu);
+    }
+
+    public void undoLastCommand() {
+        if (!commandHistory.isEmpty()) {
+            Command lastCommand = commandHistory.remove(commandHistory.size() - 1);
+
+        }
+    }
+}
+
diff --git a/design_pattern/src/modele/DPCommand/Receiver.java b/design_pattern/src/modele/DPCommand/Receiver.java
new file mode 100644
index 0000000..998d03c
--- /dev/null
+++ b/design_pattern/src/modele/DPCommand/Receiver.java
@@ -0,0 +1,23 @@
+package modele.DPCommand;
+
+import modele.DPStrategie.ConcreteStrategieAgressif;
+import modele.DPStrategie.ConcreteStrategieDefensif;
+import modele.DPStrategie.ConcreteStrategieNeutre;
+import modele.Personnage;
+
+public class Receiver {
+    public void actionStrategie(Personnage personnage, int strat) {
+        switch (strat) {
+            case 1:
+                personnage.setStrategie(new ConcreteStrategieNeutre());
+                break;
+            case 2:
+                personnage.setStrategie(new ConcreteStrategieAgressif());
+                break;
+            case 3:
+                personnage.setStrategie(new ConcreteStrategieDefensif());
+                break;
+        }
+    }
+
+}
diff --git a/design_pattern/src/modele/DegatVisiteur.java b/design_pattern/src/modele/DPVisiteur/DegatVisiteur.java
similarity index 94%
rename from design_pattern/src/modele/DegatVisiteur.java
rename to design_pattern/src/modele/DPVisiteur/DegatVisiteur.java
index 8e41788..04f7047 100644
--- a/design_pattern/src/modele/DegatVisiteur.java
+++ b/design_pattern/src/modele/DPVisiteur/DegatVisiteur.java
@@ -1,5 +1,6 @@
-package modele;
+package modele.DPVisiteur;
 
+import modele.*;
 import modele.DPVisiteur.VisiteurGroupe;
 
 public class DegatVisiteur implements VisiteurGroupe {
diff --git a/design_pattern/src/modele/DialogueTerminal.java b/design_pattern/src/modele/DialogueTerminal.java
index 8f6d71a..1eaa11c 100644
--- a/design_pattern/src/modele/DialogueTerminal.java
+++ b/design_pattern/src/modele/DialogueTerminal.java
@@ -1,10 +1,10 @@
 package modele;
 
+import modele.DPCommand.*;
 import modele.DPFabrique.*;
 import modele.DPStrategie.ConcreteStrategieAgressif;
 import modele.DPStrategie.ConcreteStrategieDefensif;
 import modele.DPStrategie.ConcreteStrategieNeutre;
-import modele.Jeu;
 
 import java.util.ArrayList;
 import java.util.Scanner;
@@ -12,10 +12,12 @@ import java.util.Scanner;
 public class DialogueTerminal {
     private Jeu jeu;
     private int finDePartie;
+    private Invoker invoker;
 
     public DialogueTerminal(Jeu jeu){
         this.jeu = jeu;
         this.finDePartie = 0;
+        invoker = new Invoker(jeu);
     }
     public void debutPartie(){
         Scanner scan = new Scanner(System.in);
@@ -102,20 +104,16 @@ public class DialogueTerminal {
     private void ajouterPersonnage(int choix){
         switch (choix){
             case 1:
-                jeu.setConstructeur(new ConstructeurGuerrier());
-                jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+                invoker.executeCommand(new CommandCreerGuerrier());
                 break;
             case 2:
-                jeu.setConstructeur(new ConstructeurRoi());
-                jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+                invoker.executeCommand(new CommandCreerRoi());
                 break;
             case 3:
-                jeu.setConstructeur(new ConstructeurGuerisseur());
-                jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+                invoker.executeCommand(new CommandCreerGuerisseur());
                 break;
             case 4:
-                jeu.setConstructeur(new ConstructeurSorcier());
-                jeu.getEquipe().ajouter(jeu.getConstructeur().creerPersonnage());
+                invoker.executeCommand(new CommandCreerSorcier());
                 break;
         }
     }
@@ -144,20 +142,19 @@ public class DialogueTerminal {
         while (strat < 0 || strat > 2) {
             System.out.println("Votre personnage : " + jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()) + " va attaquer" +
                     "le personnage ennemi : " + jeu.getEquipeEnnemi().getPersonnage(jeu.getNbAttaqueEquipe()));
-            System.out.println("Choisissez votre stratégie pour ce tour :\n0: La même que précédement\n1: Neutre\n2: Agressif\n3: Défensif");
+            System.out.println("Choisissez votre stratégie pour ce tour :\n0: Neutre\n1: Agressif\n2: Défensif");
             strat = Integer.parseInt(scan.nextLine());
         }
+        Personnage personnage = jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe());
         switch (strat) {
             case 0:
-
+                 personnage.setStrategie(new ConcreteStrategieNeutre());
+                break;
             case 1:
-                jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()).setStrategie(new ConcreteStrategieNeutre());
+                personnage.setStrategie(new ConcreteStrategieAgressif());
                 break;
             case 2:
-                jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()).setStrategie(new ConcreteStrategieAgressif());
-                break;
-            case 3:
-                jeu.getEquipe().getPersonnage(jeu.getNbAttaqueEquipe()).setStrategie(new ConcreteStrategieDefensif());
+                personnage.setStrategie(new ConcreteStrategieDefensif());
                 break;
         }
     }
diff --git a/design_pattern/src/tests/DegatVisiteurTest.java b/design_pattern/src/tests/DegatVisiteurTest.java
index ed1523d..ab5408e 100644
--- a/design_pattern/src/tests/DegatVisiteurTest.java
+++ b/design_pattern/src/tests/DegatVisiteurTest.java
@@ -1,6 +1,7 @@
 package tests;
 
 import modele.*;
+import modele.DPVisiteur.DegatVisiteur;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-- 
GitLab