diff --git a/design_pattern/src/modele/DPCommand/Command.java b/design_pattern/src/modele/DPCommand/Command.java new file mode 100644 index 0000000000000000000000000000000000000000..58ebb151bee8f3943809d5ab81b5031524970749 --- /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 0000000000000000000000000000000000000000..6f4cb32be85e573c6157d16e26c79ff07580ed54 --- /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 0000000000000000000000000000000000000000..47fcd2726dcba62ce01f3e44751bd9bab8b90405 --- /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 0000000000000000000000000000000000000000..8089ca09f87e09ee57449f8b47f48ab9dc3f3366 --- /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 0000000000000000000000000000000000000000..fb5c99e948cf81f028246bddd88c3f6cabc41ca1 --- /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 0000000000000000000000000000000000000000..ba3d8d88a7b21b0a829a99fbe040e720c9ce3a55 --- /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 0000000000000000000000000000000000000000..998d03c94f9265c9b7fef3692c9ef730edd8509b --- /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 8e41788b61bd5fd2e388962fdabb4f525629d6af..04f70479c8b98a4d0b9eaf2a39e48670d42b976b 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 8f6d71a3472b22a50fe7ea1fc9b82fdd2455ded0..1eaa11c358724e8e6500c803eac26446b6641cac 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 ed1523d305cef1d55788e6d3494cdd7a0ee79124..ab5408e5b5c34877290147df69fb3caf5544bcd0 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;