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());
+
+ }
+}