From 845821d08960f40761f8665d73793f1227254376 Mon Sep 17 00:00:00 2001 From: Paul Gross Date: Wed, 22 Apr 2020 13:05:36 +0200 Subject: [PATCH] VampireTest --- src/carte/CarteCondition.java | 7 +- src/carte/CarteEffet.java | 7 +- src/condition/Condition.java | 1 - .../ActionAltererStatistiquesJoueur.java | 13 +-- src/main/Joueur.java | 7 +- src/main/Plateau.java | 3 + src/personnage/Allie.java | 4 +- src/personnage/Bob.java | 8 +- src/personnage/CartePersonnage.java | 9 +- src/personnage/Charles.java | 6 +- src/personnage/Daniel.java | 8 +- src/personnage/Emi.java | 6 +- src/personnage/Franklin.java | 1 - src/personnage/Georges.java | 7 -- src/personnage/LoupGarou.java | 6 +- src/personnage/Metamorphe.java | 5 +- src/personnage/Unique.java | 2 +- src/personnage/Vampire.java | 19 ++-- tests/personnage/AllieTest.java | 28 +++++- tests/personnage/VampireTest.java | 97 +++++++++++++++++++ 20 files changed, 168 insertions(+), 76 deletions(-) create mode 100644 tests/personnage/VampireTest.java diff --git a/src/carte/CarteCondition.java b/src/carte/CarteCondition.java index 78a0dd9..67ebea3 100644 --- a/src/carte/CarteCondition.java +++ b/src/carte/CarteCondition.java @@ -12,8 +12,11 @@ public abstract class CarteCondition extends CarteEffet{ private Condition condition; + @Override public void utiliser(Joueur j) { - super.utiliser(j); + if(this.condition.isTrue(j)) { + super.utiliser(j); + } } public Condition getCondition() { @@ -23,6 +26,4 @@ public abstract class CarteCondition extends CarteEffet{ public void setCondition(Condition condition) { this.condition = condition; } - - } diff --git a/src/carte/CarteEffet.java b/src/carte/CarteEffet.java index 91854d0..f3a235d 100644 --- a/src/carte/CarteEffet.java +++ b/src/carte/CarteEffet.java @@ -5,19 +5,18 @@ import effet.Effet; public abstract class CarteEffet extends Carte{ + private Effet effet; + public CarteEffet(String nom, String description) { super(nom, description); } - - private Effet effet; - /* * @param j Appel la méthode utiliser de effet sur le joueur j */ public void utiliser(Joueur j) { - effet.utiliser(j); + this.effet.utiliser(j); } public void setEffet(Effet e) { diff --git a/src/condition/Condition.java b/src/condition/Condition.java index 6553990..81e4628 100644 --- a/src/condition/Condition.java +++ b/src/condition/Condition.java @@ -3,6 +3,5 @@ package condition; import main.Joueur; public abstract class Condition { - public abstract boolean isTrue(Joueur joueur); } diff --git a/src/effet/action/ActionAltererStatistiquesJoueur.java b/src/effet/action/ActionAltererStatistiquesJoueur.java index 597bf71..e2de8ba 100644 --- a/src/effet/action/ActionAltererStatistiquesJoueur.java +++ b/src/effet/action/ActionAltererStatistiquesJoueur.java @@ -2,13 +2,10 @@ package effet.action; import main.Joueur; public class ActionAltererStatistiquesJoueur extends Action{ - - private String key; private int valeur; private boolean ajouter; - /** * Constructeur ActionAltererStatistiquesJoueur * @param key Le clé qui correspond à la valeur à modifier @@ -24,16 +21,15 @@ public class ActionAltererStatistiquesJoueur extends Action{ * ActionAltererStatistiquesJoueur("PV", 2, false) *
* Change les PV's du joueur à 2 - * */ + public ActionAltererStatistiquesJoueur(String key, int valeur, boolean ajouter) { this.key = key; this.valeur = valeur; this.ajouter = ajouter; } - - + /** * Lance l'action de modification de statistiques * @param j1 Le joueur qui modifie @@ -44,12 +40,9 @@ public class ActionAltererStatistiquesJoueur extends Action{ { if(ajouter) { - j2.setStat(key, j2.getStat(key)+valeur); + j2.addToStat(key, valeur); }else { j2.setStat(key, valeur); } } - - - } diff --git a/src/main/Joueur.java b/src/main/Joueur.java index bfbef64..150bc94 100644 --- a/src/main/Joueur.java +++ b/src/main/Joueur.java @@ -194,9 +194,12 @@ public class Joueur { return this.carteLieu; } - public void setRevele(boolean b) { + public void reveal() { this.revele = true; - + } + + public void setRevele(boolean b) { + this.revele = b; } } diff --git a/src/main/Plateau.java b/src/main/Plateau.java index b286044..fe65a61 100644 --- a/src/main/Plateau.java +++ b/src/main/Plateau.java @@ -27,6 +27,9 @@ public class Plateau { public Plateau(List joueurs) { + + joueurs.forEach(x -> x.setPlateau(this)); + this.joueurs = joueurs; this.lieux = new ArrayList<>(); diff --git a/src/personnage/Allie.java b/src/personnage/Allie.java index c0f511e..fc8fab6 100644 --- a/src/personnage/Allie.java +++ b/src/personnage/Allie.java @@ -18,14 +18,14 @@ public class Allie extends Unique{ public Allie(Joueur joueur) { super("ALLIE","desc", 8, joueur); - Action action = new ActionAltererStatistiquesJoueur("HP",this.getPv(),false); + Action action = new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP,this.getPv(),false); Effet effet = new EffetSelf(action); this.setEffet(effet); List conditions = new ArrayList(); conditions.add(new ConditionStatistiques(ConditionStatistiques.PLATEAU, Plateau.PARTIE_FINIE, 1, ConditionStatistiques.EQUAL)); - conditions.add(new ConditionStatistiques(ConditionStatistiques.JOUEUR, Joueur.PLAYER_HP, 0, ConditionStatistiques.MORE)); + conditions.add(new ConditionStatistiques(ConditionStatistiques.JOUEUR, Joueur.PLAYER_HP, 0, ConditionStatistiques.LESS)); Condition winCondition = new ConditionMultiple(conditions); diff --git a/src/personnage/Bob.java b/src/personnage/Bob.java index 32c17e0..55de922 100644 --- a/src/personnage/Bob.java +++ b/src/personnage/Bob.java @@ -27,7 +27,7 @@ public class Bob extends CartePersonnage{ if(thisJoueur.choisir()) { ((EffetTarget)this.getEffet()).setTarget(j); - utiliser(); + this.utiliser(thisJoueur); }else { super.attaquer(j, blessure); } @@ -36,7 +36,7 @@ public class Bob extends CartePersonnage{ @Override public void utiliser() { - Joueur j = this.getJoueur(); - this.getEffet().utiliser(j); - } + // TODO Auto-generated method stub + + } } diff --git a/src/personnage/CartePersonnage.java b/src/personnage/CartePersonnage.java index b3519f3..f3b0aac 100644 --- a/src/personnage/CartePersonnage.java +++ b/src/personnage/CartePersonnage.java @@ -14,13 +14,14 @@ public abstract class CartePersonnage extends CarteCondition { this.joueur = joueur; joueur.setCartePersonnage(this); } - + public abstract void utiliser(); + public void attaquer(Joueur j, int blessure) { j.addToStat(Joueur.PLAYER_HP, -blessure); } - + public boolean victoire(){ return this.getCondition().isTrue(this.joueur); } @@ -30,7 +31,7 @@ public abstract class CartePersonnage extends CarteCondition { } public void setJoueur(Joueur j) { - joueur=j; + this.joueur=j; } public void deplacer() { @@ -41,4 +42,6 @@ public abstract class CartePersonnage extends CarteCondition { return pv; } + + } diff --git a/src/personnage/Charles.java b/src/personnage/Charles.java index 092d344..a082012 100644 --- a/src/personnage/Charles.java +++ b/src/personnage/Charles.java @@ -27,13 +27,11 @@ public class Charles extends CartePersonnage{ if(joueur.getStat(Joueur.PLAYER_HP) > 2 && joueur.getRevele()){ Plateau p = j.getPlateau(); - utiliser(); + utiliser(joueur); p.attaquer(this.getJoueur(), j); } } - - @Override + public void utiliser() { - this.getEffet().utiliser(this.getJoueur()); } } diff --git a/src/personnage/Daniel.java b/src/personnage/Daniel.java index f118d37..a8b296e 100644 --- a/src/personnage/Daniel.java +++ b/src/personnage/Daniel.java @@ -26,15 +26,13 @@ public class Daniel extends CartePersonnage{ conditions.add(new ConditionMultiple(conditions2)); - Condition winCondition = new ConditionMultipleOR(conditions); this.setCondition(winCondition); } - - @Override + + public void utiliser() { - this.getJoueur().setRevele(true); + this.getJoueur().reveal(); } - } diff --git a/src/personnage/Emi.java b/src/personnage/Emi.java index c54ff3c..a7a3b34 100644 --- a/src/personnage/Emi.java +++ b/src/personnage/Emi.java @@ -15,10 +15,8 @@ public class Emi extends CartePersonnage{ public void deplacer() { } - - @Override + + public void utiliser() { - // TODO Auto-generated method stub - } } diff --git a/src/personnage/Franklin.java b/src/personnage/Franklin.java index 4cded18..33ddacf 100644 --- a/src/personnage/Franklin.java +++ b/src/personnage/Franklin.java @@ -17,7 +17,6 @@ public class Franklin extends Unique{ } - @Override public void utiliser() { Joueur joueur = this.getJoueur(); diff --git a/src/personnage/Georges.java b/src/personnage/Georges.java index 25a756a..c05750e 100644 --- a/src/personnage/Georges.java +++ b/src/personnage/Georges.java @@ -11,13 +11,6 @@ public class Georges extends Unique{ this.setCondition(new WinConditionHunter()); } - @Override - public void attaquer(Joueur j, int blessure) { - // TODO Auto-generated method stub - - } - - @Override public void utiliser() { Joueur joueur = this.getJoueur(); diff --git a/src/personnage/LoupGarou.java b/src/personnage/LoupGarou.java index 7812c76..71ca9fe 100644 --- a/src/personnage/LoupGarou.java +++ b/src/personnage/LoupGarou.java @@ -10,10 +10,8 @@ public class LoupGarou extends CartePersonnage { this.setCondition(new WinConditionShadow()); } - - @Override + public void utiliser() { - // TODO Auto-generated method stub - } + } diff --git a/src/personnage/Metamorphe.java b/src/personnage/Metamorphe.java index b2a0d0b..6aae095 100644 --- a/src/personnage/Metamorphe.java +++ b/src/personnage/Metamorphe.java @@ -9,10 +9,7 @@ public class Metamorphe extends CartePersonnage{ super(nom,desc, hp, joueur); this.setCondition(new WinConditionShadow()); } - - @Override + public void utiliser() { - // TODO Auto-generated method stub - } } diff --git a/src/personnage/Unique.java b/src/personnage/Unique.java index f82808a..584f342 100644 --- a/src/personnage/Unique.java +++ b/src/personnage/Unique.java @@ -8,7 +8,7 @@ public abstract class Unique extends CartePersonnage{ public Unique(String nom, String desc ,int hp, Joueur joueur) { super(nom,desc, hp, joueur); - + this.capaciteUsed = false; } public boolean isCapaciteUsed() { diff --git a/src/personnage/Vampire.java b/src/personnage/Vampire.java index 5203396..97754a8 100644 --- a/src/personnage/Vampire.java +++ b/src/personnage/Vampire.java @@ -10,20 +10,14 @@ import main.Joueur; public class Vampire extends CartePersonnage{ - public Vampire(String nom, String desc ,int hp, Joueur joueur) { - super(nom,desc, hp, joueur); + public Vampire(Joueur joueur) { + super("Vampire","desc", 13, joueur); - Action action = new ActionAltererStatistiquesJoueur("HP",2,true); + Action action = new ActionAltererStatistiquesJoueur(Joueur.PLAYER_HP,2,true); Effet effet = new EffetSelf(action); this.setEffet(effet); this.setCondition(new WinConditionShadow()); } - - @Override - public void utiliser() - { - this.getEffet().utiliser(this.getJoueur()); - } /** * Lance l'action d'attaquer de Vampire @@ -36,9 +30,10 @@ public class Vampire extends CartePersonnage{ super.attaquer(j, blessure); if(this.getJoueur().getRevele()) { - utiliser(this.getJoueur()); + this.utiliser(this.getJoueur()); } } - - + + public void utiliser() { + } } diff --git a/tests/personnage/AllieTest.java b/tests/personnage/AllieTest.java index bacb864..af44bfa 100644 --- a/tests/personnage/AllieTest.java +++ b/tests/personnage/AllieTest.java @@ -1,6 +1,7 @@ package personnage; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; @@ -39,18 +40,35 @@ class AllieTest { @Test void utiliser_SoinTotal() { - j1.setStat("HP", 0); + j1.setStat(Joueur.PLAYER_HP, 0); j1.getCartePersonnage().utiliser(); int pvAllie = j1.getCartePersonnage().getPv(); - assertEquals(pvAllie,j1.getStat("HP")); + // Le joueur n'est pas révélé, le soin n'a pas eu lieu. + assertEquals(j1.getStat(Joueur.PLAYER_HP),0); - j1.setStat("HP", 0); + j1.setRevele(true); j1.getCartePersonnage().utiliser(); - // Le soin n'a fonctionné qu'une seule fois - assertEquals(0,j1.getStat("HP")); + // Le soin a fonctionné la première fois, il est désormais "utilisé". + assertEquals(j1.getStat(Joueur.PLAYER_HP),pvAllie); + + + j1.setStat(Joueur.PLAYER_HP, 0); + j1.getCartePersonnage().utiliser(); + + // Le soin a déjà été utilisé + assertEquals(0,j1.getStat(Joueur.PLAYER_HP)); + + } + + @Test + void victoire() { + + j1.setStat(Joueur.PLAYER_HP, 0); + p.setStat(Plateau.PARTIE_FINIE, 1); + assertTrue(a.victoire()); } diff --git a/tests/personnage/VampireTest.java b/tests/personnage/VampireTest.java new file mode 100644 index 0000000..be4a2d9 --- /dev/null +++ b/tests/personnage/VampireTest.java @@ -0,0 +1,97 @@ +package personnage; + +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import main.Joueur; +import main.Plateau; + +class VampireTest { + + Joueur j1; + Joueur j2; + Plateau p; + Random rand; + Vampire v; + Allie a; + + @BeforeEach + void init() + { + rand = new Random(); + List joueurs = new ArrayList(); + j1 = new Joueur("Michel"); + j2 = new Joueur("Saad"); + + joueurs.add(j1); + joueurs.add(j2); + + p = new Plateau(joueurs); + v = new Vampire(j1); + a = new Allie(j2); + } + + + + @Test + void attaquer_Vampirisme() { + + int pvVampireBase = 0; + int pvAllieBase = a.getPv(); + + int countHP = 0; + + for(int j = 0; j < 100; j++) { + + countHP = 0; + + for(int i = 0; i < 2000; i++) { + + // Le joueur n'est pas révélé + j1.setRevele(false); + j1.setStat(Joueur.PLAYER_HP, pvVampireBase); + j2.setStat(Joueur.PLAYER_HP, pvAllieBase); + + p.attaquer(j1, j2); + + // Vampire n'a pas récupéré de pv's lors de son attaque + assertTrue(j1.getStat(Joueur.PLAYER_HP) == 0); + + + // Joueur se révéle + j1.reveal(); + j2.setStat(Joueur.PLAYER_HP, pvAllieBase); + p.attaquer(j1, j2); + + // Il récupère des pv's si la blessure est supérieure à 0 + // On compte le nombre de fois où il récupère des pv's + if(j2.getStat(Joueur.PLAYER_HP) < pvAllieBase && j1.getStat(Joueur.PLAYER_HP) > 0) { + countHP++; + } + } + + // On boost le coverage + v.utiliser(); + + // On ramène en % + countHP /= 20; + + // En moyenne une attaque réussie 80 % du temps, avec une marge d'erreur de 5 % + assertTrue(Math.abs(80-countHP) < 5); + }} + + @Test + void victoire() { + + j1.setStat(Joueur.PLAYER_HP, 0); + p.setStat( Plateau.NB_MORTS_NEUTRAL, 5); + assertTrue(v.victoire()); + + } +}