From b5f74874a231c6fef98c516c88a3893eda044f20 Mon Sep 17 00:00:00 2001
From: rosier8u <basile.rosier6@etu.univ-lorraine>
Date: Tue, 14 Nov 2023 13:25:19 +0100
Subject: [PATCH] V1

---
 design_pattern/src/{ => modele}/Arme.java     |  6 ++
 .../src/{ => modele}/BaguetteMagique.java     |  2 +
 .../src/{ => modele}/BatonDeSorcier.java      |  2 +
 design_pattern/src/modele/DegatVisiteur.java  | 23 +++++++
 design_pattern/src/{ => modele}/Epee.java     |  2 +
 .../src/{ => modele}/Guerisseur.java          |  6 ++
 design_pattern/src/{ => modele}/Guerrier.java |  6 ++
 design_pattern/src/modele/NiveauVisiteur.java | 23 +++++++
 .../src/{ => modele}/Personnage.java          |  8 +++
 design_pattern/src/{ => modele}/Roi.java      |  6 ++
 design_pattern/src/{ => modele}/Sorcier.java  |  6 ++
 design_pattern/src/modele/VisiteurPers.java   |  9 +++
 .../src/tests/DegatVisiteurTest.java          | 62 +++++++++++++++++++
 .../src/tests/NiveauVisiteurTest.java         | 61 ++++++++++++++++++
 14 files changed, 222 insertions(+)
 rename design_pattern/src/{ => modele}/Arme.java (85%)
 rename design_pattern/src/{ => modele}/BaguetteMagique.java (95%)
 rename design_pattern/src/{ => modele}/BatonDeSorcier.java (95%)
 create mode 100644 design_pattern/src/modele/DegatVisiteur.java
 rename design_pattern/src/{ => modele}/Epee.java (95%)
 rename design_pattern/src/{ => modele}/Guerisseur.java (76%)
 rename design_pattern/src/{ => modele}/Guerrier.java (76%)
 create mode 100644 design_pattern/src/modele/NiveauVisiteur.java
 rename design_pattern/src/{ => modele}/Personnage.java (84%)
 rename design_pattern/src/{ => modele}/Roi.java (84%)
 rename design_pattern/src/{ => modele}/Sorcier.java (79%)
 create mode 100644 design_pattern/src/modele/VisiteurPers.java
 create mode 100644 design_pattern/src/tests/DegatVisiteurTest.java
 create mode 100644 design_pattern/src/tests/NiveauVisiteurTest.java

diff --git a/design_pattern/src/Arme.java b/design_pattern/src/modele/Arme.java
similarity index 85%
rename from design_pattern/src/Arme.java
rename to design_pattern/src/modele/Arme.java
index ef77a22..d689d4e 100644
--- a/design_pattern/src/Arme.java
+++ b/design_pattern/src/modele/Arme.java
@@ -1,3 +1,5 @@
+package modele;
+
 public abstract class Arme {
     protected int degat;
     protected String nom;
@@ -9,6 +11,10 @@ public abstract class Arme {
         this.poids = poids;
     }
 
+    public void augmenterDegat(int augmentation){
+        this.degat += augmentation;
+    }
+
     public void setNom(String nom) {
         this.nom = nom;
     }
diff --git a/design_pattern/src/BaguetteMagique.java b/design_pattern/src/modele/BaguetteMagique.java
similarity index 95%
rename from design_pattern/src/BaguetteMagique.java
rename to design_pattern/src/modele/BaguetteMagique.java
index 097bcb5..f01f567 100644
--- a/design_pattern/src/BaguetteMagique.java
+++ b/design_pattern/src/modele/BaguetteMagique.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class BaguetteMagique extends Arme{
     private int soin;
 
diff --git a/design_pattern/src/BatonDeSorcier.java b/design_pattern/src/modele/BatonDeSorcier.java
similarity index 95%
rename from design_pattern/src/BatonDeSorcier.java
rename to design_pattern/src/modele/BatonDeSorcier.java
index 5862fdc..1d959a8 100644
--- a/design_pattern/src/BatonDeSorcier.java
+++ b/design_pattern/src/modele/BatonDeSorcier.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class BatonDeSorcier extends Arme{
     private String pouvoir;
 
diff --git a/design_pattern/src/modele/DegatVisiteur.java b/design_pattern/src/modele/DegatVisiteur.java
new file mode 100644
index 0000000..9beb578
--- /dev/null
+++ b/design_pattern/src/modele/DegatVisiteur.java
@@ -0,0 +1,23 @@
+package modele;
+
+public class DegatVisiteur implements VisiteurPers{
+    @Override
+    public void visiterGuerrier(Guerrier guerrier) {
+        guerrier.getArme().augmenterDegat(10);
+    }
+
+    @Override
+    public void visiterRoi(Roi roi) {
+        roi.getArme().augmenterDegat(10);
+    }
+
+    @Override
+    public void visiterSorcier(Sorcier sorcier) {
+        sorcier.getArme().augmenterDegat(10);
+    }
+
+    @Override
+    public void visiterGuerisseur(Guerisseur guerisseur) {
+        guerisseur.getArme().augmenterDegat(10);
+    }
+}
diff --git a/design_pattern/src/Epee.java b/design_pattern/src/modele/Epee.java
similarity index 95%
rename from design_pattern/src/Epee.java
rename to design_pattern/src/modele/Epee.java
index 189817f..4354b13 100644
--- a/design_pattern/src/Epee.java
+++ b/design_pattern/src/modele/Epee.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class Epee extends Arme{
     private int longueur;
 
diff --git a/design_pattern/src/Guerisseur.java b/design_pattern/src/modele/Guerisseur.java
similarity index 76%
rename from design_pattern/src/Guerisseur.java
rename to design_pattern/src/modele/Guerisseur.java
index 673b6cd..ef1be41 100644
--- a/design_pattern/src/Guerisseur.java
+++ b/design_pattern/src/modele/Guerisseur.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class Guerisseur extends Personnage{
     private int sagesse;
 
@@ -13,4 +15,8 @@ public class Guerisseur extends Personnage{
     public int getSagesse() {
         return sagesse;
     }
+
+    public void accepter(VisiteurPers visiteur) {
+        visiteur.visiterGuerisseur(this);
+    }
 }
diff --git a/design_pattern/src/Guerrier.java b/design_pattern/src/modele/Guerrier.java
similarity index 76%
rename from design_pattern/src/Guerrier.java
rename to design_pattern/src/modele/Guerrier.java
index 1c47ae8..746e056 100644
--- a/design_pattern/src/Guerrier.java
+++ b/design_pattern/src/modele/Guerrier.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class Guerrier extends Personnage{
     private int force;
 
@@ -13,4 +15,8 @@ public class Guerrier extends Personnage{
     public int getForce() {
         return force;
     }
+
+    public void accepter(VisiteurPers visiteur) {
+        visiteur.visiterGuerrier(this);
+    }
 }
diff --git a/design_pattern/src/modele/NiveauVisiteur.java b/design_pattern/src/modele/NiveauVisiteur.java
new file mode 100644
index 0000000..9af9f75
--- /dev/null
+++ b/design_pattern/src/modele/NiveauVisiteur.java
@@ -0,0 +1,23 @@
+package modele;
+
+public class NiveauVisiteur implements VisiteurPers{
+    @Override
+    public void visiterGuerrier(Guerrier guerrier) {
+        guerrier.augmenterNiveau(1);
+    }
+
+    @Override
+    public void visiterRoi(Roi roi) {
+        roi.augmenterNiveau(1);
+    }
+
+    @Override
+    public void visiterSorcier(Sorcier sorcier) {
+        sorcier.augmenterNiveau(1);
+    }
+
+    @Override
+    public void visiterGuerisseur(Guerisseur guerisseur) {
+        guerisseur.augmenterNiveau(1);
+    }
+}
diff --git a/design_pattern/src/Personnage.java b/design_pattern/src/modele/Personnage.java
similarity index 84%
rename from design_pattern/src/Personnage.java
rename to design_pattern/src/modele/Personnage.java
index 018f7e8..ddb0161 100644
--- a/design_pattern/src/Personnage.java
+++ b/design_pattern/src/modele/Personnage.java
@@ -1,3 +1,5 @@
+package modele;
+
 public abstract class Personnage {
     protected int pointsDeVie;
     protected int niveau;
@@ -11,6 +13,10 @@ public abstract class Personnage {
         this.arme = arme;
     }
 
+    public void augmenterNiveau(int augmentation){
+        this.niveau += augmentation;
+    }
+
     public void setNom(String nom) {
         this.nom = nom;
     }
@@ -42,4 +48,6 @@ public abstract class Personnage {
     public Arme getArme() {
         return arme;
     }
+    public abstract void accepter(VisiteurPers visiteur);
+
 }
diff --git a/design_pattern/src/Roi.java b/design_pattern/src/modele/Roi.java
similarity index 84%
rename from design_pattern/src/Roi.java
rename to design_pattern/src/modele/Roi.java
index f802e36..c23d4d5 100644
--- a/design_pattern/src/Roi.java
+++ b/design_pattern/src/modele/Roi.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class Roi extends Personnage{
     private int force;
     private String royaume;
@@ -23,4 +25,8 @@ public class Roi extends Personnage{
     public String getRoyaume() {
         return royaume;
     }
+
+    public void accepter(VisiteurPers visiteur) {
+        visiteur.visiterRoi(this);
+    }
 }
diff --git a/design_pattern/src/Sorcier.java b/design_pattern/src/modele/Sorcier.java
similarity index 79%
rename from design_pattern/src/Sorcier.java
rename to design_pattern/src/modele/Sorcier.java
index 8b229fe..4807797 100644
--- a/design_pattern/src/Sorcier.java
+++ b/design_pattern/src/modele/Sorcier.java
@@ -1,3 +1,5 @@
+package modele;
+
 public class Sorcier extends Personnage{
     private int intelligence;
 
@@ -13,4 +15,8 @@ public class Sorcier extends Personnage{
     public int getIntelligence() {
         return intelligence;
     }
+
+    public void accepter(VisiteurPers visiteur) {
+        visiteur.visiterSorcier(this);
+    }
 }
diff --git a/design_pattern/src/modele/VisiteurPers.java b/design_pattern/src/modele/VisiteurPers.java
new file mode 100644
index 0000000..50e74f0
--- /dev/null
+++ b/design_pattern/src/modele/VisiteurPers.java
@@ -0,0 +1,9 @@
+package modele;
+
+public interface VisiteurPers {
+
+    void visiterGuerrier(Guerrier guerrier);
+    void visiterRoi(Roi roi);
+    void visiterSorcier(Sorcier sorcier);
+    void visiterGuerisseur(Guerisseur guerisseur);
+}
diff --git a/design_pattern/src/tests/DegatVisiteurTest.java b/design_pattern/src/tests/DegatVisiteurTest.java
new file mode 100644
index 0000000..4b4e83a
--- /dev/null
+++ b/design_pattern/src/tests/DegatVisiteurTest.java
@@ -0,0 +1,62 @@
+package tests;
+
+import modele.*;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class DegatVisiteurTest {
+    private DegatVisiteur degatVisiteur;
+    private Epee epee;
+    private BaguetteMagique baguetteMagique;
+    private BatonDeSorcier batonDeSorcier;
+    private Roi roi;
+    private Guerrier guerrier;
+    private Guerisseur guerisseur;
+    private Sorcier sorcier;
+    @BeforeEach
+    void setUp() {
+        degatVisiteur = new DegatVisiteur();
+        epee = new Epee(20, "epee", 2.0, 10);
+        baguetteMagique = new BaguetteMagique(10, "baguette", 1.0,10);
+        batonDeSorcier = new BatonDeSorcier(15, "baton", 1.5, "pouvoir");
+        roi = new Roi(100, 1, "roi", epee, 20, "royaume");
+        guerrier = new Guerrier(80, 1, "guerrier", epee, 30);
+        guerisseur = new Guerisseur(50, 1, "gueisseur", baguetteMagique, 40);
+        sorcier = new Sorcier(40, 1, "sorcier", batonDeSorcier, 20);
+    }
+
+    @Test
+    void testVisiterGuerrier() {
+        int degat_avant = guerrier.getArme().getDegat();
+        guerrier.accepter(degatVisiteur);
+        int degat_apres = guerrier.getArme().getDegat();
+        assertNotEquals(degat_avant, degat_apres);
+    }
+
+    @Test
+    void testVisiterRoi() {
+        int degat_avant = roi.getArme().getDegat();
+        roi.accepter(degatVisiteur);
+        int degat_apres = roi.getArme().getDegat();
+        assertNotEquals(degat_avant, degat_apres);
+    }
+
+    @Test
+    void testVisiterSorcier() {
+        int degat_avant = sorcier.getArme().getDegat();
+        sorcier.accepter(degatVisiteur);
+        int degat_apres = sorcier.getArme().getDegat();
+        assertNotEquals(degat_avant, degat_apres);
+    }
+
+    @Test
+    void testVisiterGuerisseur() {
+        int degat_avant = guerisseur.getArme().getDegat();
+        guerisseur.accepter(degatVisiteur);
+        int degat_apres = guerisseur.getArme().getDegat();
+        assertNotEquals(degat_avant, degat_apres);
+    }
+}
\ No newline at end of file
diff --git a/design_pattern/src/tests/NiveauVisiteurTest.java b/design_pattern/src/tests/NiveauVisiteurTest.java
new file mode 100644
index 0000000..d6c6f27
--- /dev/null
+++ b/design_pattern/src/tests/NiveauVisiteurTest.java
@@ -0,0 +1,61 @@
+package tests;
+
+import modele.*;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class NiveauVisiteurTest {
+    private NiveauVisiteur niveauVisiteur;
+    private Epee epee;
+    private BaguetteMagique baguetteMagique;
+    private BatonDeSorcier batonDeSorcier;
+    private Roi roi;
+    private Guerrier guerrier;
+    private Guerisseur guerisseur;
+    private Sorcier sorcier;
+    @BeforeEach
+    void setUp() {
+        niveauVisiteur = new NiveauVisiteur();
+        epee = new Epee(20, "epee", 2.0, 10);
+        baguetteMagique = new BaguetteMagique(10, "baguette", 1.0,10);
+        batonDeSorcier = new BatonDeSorcier(15, "baton", 1.5, "pouvoir");
+        roi = new Roi(100, 1, "roi", epee, 20, "royaume");
+        guerrier = new Guerrier(80, 1, "guerrier", epee, 30);
+        guerisseur = new Guerisseur(50, 1, "gueisseur", baguetteMagique, 40);
+        sorcier = new Sorcier(40, 1, "sorcier", batonDeSorcier, 20);
+    }
+
+    @Test
+    void visiterGuerrier() {
+        int niveau_avant = guerrier.getNiveau();
+        guerrier.accepter(niveauVisiteur);
+        int niveau_apres = guerrier.getNiveau();
+        assertNotEquals(niveau_avant, niveau_apres);
+    }
+
+    @Test
+    void visiterRoi() {
+        int niveau_avant = roi.getNiveau();
+        roi.accepter(niveauVisiteur);
+        int niveau_apres = roi.getNiveau();
+        assertNotEquals(niveau_avant, niveau_apres);
+    }
+
+    @Test
+    void visiterSorcier() {
+        int niveau_avant = sorcier.getNiveau();
+        sorcier.accepter(niveauVisiteur);
+        int niveau_apres = sorcier.getNiveau();
+        assertNotEquals(niveau_avant, niveau_apres);
+    }
+
+    @Test
+    void visiterGuerisseur() {
+        int niveau_avant = guerisseur.getNiveau();
+        guerisseur.accepter(niveauVisiteur);
+        int niveau_apres = guerisseur.getNiveau();
+        assertNotEquals(niveau_avant, niveau_apres);
+    }
+}
\ No newline at end of file
-- 
GitLab