VampireTest

This commit is contained in:
Paul Gross 2020-04-22 13:05:36 +02:00
parent 7db50ba590
commit 845821d089
20 changed files with 168 additions and 76 deletions

View File

@ -12,9 +12,12 @@ public abstract class CarteCondition extends CarteEffet{
private Condition condition; private Condition condition;
@Override
public void utiliser(Joueur j) { public void utiliser(Joueur j) {
if(this.condition.isTrue(j)) {
super.utiliser(j); super.utiliser(j);
} }
}
public Condition getCondition() { public Condition getCondition() {
return condition; return condition;
@ -23,6 +26,4 @@ public abstract class CarteCondition extends CarteEffet{
public void setCondition(Condition condition) { public void setCondition(Condition condition) {
this.condition = condition; this.condition = condition;
} }
} }

View File

@ -5,19 +5,18 @@ import effet.Effet;
public abstract class CarteEffet extends Carte{ public abstract class CarteEffet extends Carte{
private Effet effet;
public CarteEffet(String nom, String description) { public CarteEffet(String nom, String description) {
super(nom, description); super(nom, description);
} }
private Effet effet;
/* /*
* @param j Appel la méthode utiliser de effet sur le joueur j * @param j Appel la méthode utiliser de effet sur le joueur j
*/ */
public void utiliser(Joueur j) { public void utiliser(Joueur j) {
effet.utiliser(j); this.effet.utiliser(j);
} }
public void setEffet(Effet e) { public void setEffet(Effet e) {

View File

@ -3,6 +3,5 @@ package condition;
import main.Joueur; import main.Joueur;
public abstract class Condition { public abstract class Condition {
public abstract boolean isTrue(Joueur joueur); public abstract boolean isTrue(Joueur joueur);
} }

View File

@ -2,13 +2,10 @@ package effet.action;
import main.Joueur; import main.Joueur;
public class ActionAltererStatistiquesJoueur extends Action{ public class ActionAltererStatistiquesJoueur extends Action{
private String key; private String key;
private int valeur; private int valeur;
private boolean ajouter; private boolean ajouter;
/** /**
* Constructeur ActionAltererStatistiquesJoueur * Constructeur ActionAltererStatistiquesJoueur
* @param key Le clé qui correspond à la valeur à modifier * @param key Le clé qui correspond à la valeur à modifier
@ -24,8 +21,8 @@ public class ActionAltererStatistiquesJoueur extends Action{
* ActionAltererStatistiquesJoueur("PV", 2, false) * ActionAltererStatistiquesJoueur("PV", 2, false)
* <br> * <br>
* Change les PV's du joueur à 2 * Change les PV's du joueur à 2
*
*/ */
public ActionAltererStatistiquesJoueur(String key, int valeur, boolean ajouter) public ActionAltererStatistiquesJoueur(String key, int valeur, boolean ajouter)
{ {
this.key = key; this.key = key;
@ -33,7 +30,6 @@ public class ActionAltererStatistiquesJoueur extends Action{
this.ajouter = ajouter; this.ajouter = ajouter;
} }
/** /**
* Lance l'action de modification de statistiques * Lance l'action de modification de statistiques
* @param j1 Le joueur qui modifie * @param j1 Le joueur qui modifie
@ -44,12 +40,9 @@ public class ActionAltererStatistiquesJoueur extends Action{
{ {
if(ajouter) if(ajouter)
{ {
j2.setStat(key, j2.getStat(key)+valeur); j2.addToStat(key, valeur);
}else { }else {
j2.setStat(key, valeur); j2.setStat(key, valeur);
} }
} }
} }

View File

@ -194,9 +194,12 @@ public class Joueur {
return this.carteLieu; return this.carteLieu;
} }
public void setRevele(boolean b) { public void reveal() {
this.revele = true; this.revele = true;
}
public void setRevele(boolean b) {
this.revele = b;
} }
} }

View File

@ -27,6 +27,9 @@ public class Plateau {
public Plateau(List<Joueur> joueurs) { public Plateau(List<Joueur> joueurs) {
joueurs.forEach(x -> x.setPlateau(this));
this.joueurs = joueurs; this.joueurs = joueurs;
this.lieux = new ArrayList<>(); this.lieux = new ArrayList<>();

View File

@ -18,14 +18,14 @@ public class Allie extends Unique{
public Allie(Joueur joueur) { public Allie(Joueur joueur) {
super("ALLIE","desc", 8, 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); Effet effet = new EffetSelf(action);
this.setEffet(effet); this.setEffet(effet);
List<Condition> conditions = new ArrayList<Condition>(); List<Condition> conditions = new ArrayList<Condition>();
conditions.add(new ConditionStatistiques(ConditionStatistiques.PLATEAU, Plateau.PARTIE_FINIE, 1, ConditionStatistiques.EQUAL)); 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); Condition winCondition = new ConditionMultiple(conditions);

View File

@ -27,7 +27,7 @@ public class Bob extends CartePersonnage{
if(thisJoueur.choisir()) { if(thisJoueur.choisir()) {
((EffetTarget)this.getEffet()).setTarget(j); ((EffetTarget)this.getEffet()).setTarget(j);
utiliser(); this.utiliser(thisJoueur);
}else { }else {
super.attaquer(j, blessure); super.attaquer(j, blessure);
} }
@ -36,7 +36,7 @@ public class Bob extends CartePersonnage{
@Override @Override
public void utiliser() { public void utiliser() {
Joueur j = this.getJoueur(); // TODO Auto-generated method stub
this.getEffet().utiliser(j);
} }
} }

View File

@ -17,6 +17,7 @@ public abstract class CartePersonnage extends CarteCondition {
public abstract void utiliser(); public abstract void utiliser();
public void attaquer(Joueur j, int blessure) { public void attaquer(Joueur j, int blessure) {
j.addToStat(Joueur.PLAYER_HP, -blessure); j.addToStat(Joueur.PLAYER_HP, -blessure);
} }
@ -30,7 +31,7 @@ public abstract class CartePersonnage extends CarteCondition {
} }
public void setJoueur(Joueur j) { public void setJoueur(Joueur j) {
joueur=j; this.joueur=j;
} }
public void deplacer() { public void deplacer() {
@ -41,4 +42,6 @@ public abstract class CartePersonnage extends CarteCondition {
return pv; return pv;
} }
} }

View File

@ -27,13 +27,11 @@ public class Charles extends CartePersonnage{
if(joueur.getStat(Joueur.PLAYER_HP) > 2 && joueur.getRevele()){ if(joueur.getStat(Joueur.PLAYER_HP) > 2 && joueur.getRevele()){
Plateau p = j.getPlateau(); Plateau p = j.getPlateau();
utiliser(); utiliser(joueur);
p.attaquer(this.getJoueur(), j); p.attaquer(this.getJoueur(), j);
} }
} }
@Override
public void utiliser() { public void utiliser() {
this.getEffet().utiliser(this.getJoueur());
} }
} }

View File

@ -26,15 +26,13 @@ public class Daniel extends CartePersonnage{
conditions.add(new ConditionMultiple(conditions2)); conditions.add(new ConditionMultiple(conditions2));
Condition winCondition = new ConditionMultipleOR(conditions); Condition winCondition = new ConditionMultipleOR(conditions);
this.setCondition(winCondition); this.setCondition(winCondition);
} }
@Override
public void utiliser() {
this.getJoueur().setRevele(true);
}
public void utiliser() {
this.getJoueur().reveal();
}
} }

View File

@ -16,9 +16,7 @@ public class Emi extends CartePersonnage{
} }
@Override
public void utiliser() {
// TODO Auto-generated method stub
public void utiliser() {
} }
} }

View File

@ -17,7 +17,6 @@ public class Franklin extends Unique{
} }
@Override
public void utiliser() { public void utiliser() {
Joueur joueur = this.getJoueur(); Joueur joueur = this.getJoueur();

View File

@ -11,13 +11,6 @@ public class Georges extends Unique{
this.setCondition(new WinConditionHunter()); this.setCondition(new WinConditionHunter());
} }
@Override
public void attaquer(Joueur j, int blessure) {
// TODO Auto-generated method stub
}
@Override
public void utiliser() { public void utiliser() {
Joueur joueur = this.getJoueur(); Joueur joueur = this.getJoueur();

View File

@ -11,9 +11,7 @@ public class LoupGarou extends CartePersonnage {
this.setCondition(new WinConditionShadow()); this.setCondition(new WinConditionShadow());
} }
@Override
public void utiliser() { public void utiliser() {
// TODO Auto-generated method stub
} }
} }

View File

@ -10,9 +10,6 @@ public class Metamorphe extends CartePersonnage{
this.setCondition(new WinConditionShadow()); this.setCondition(new WinConditionShadow());
} }
@Override
public void utiliser() { public void utiliser() {
// TODO Auto-generated method stub
} }
} }

View File

@ -8,7 +8,7 @@ public abstract class Unique extends CartePersonnage{
public Unique(String nom, String desc ,int hp, Joueur joueur) { public Unique(String nom, String desc ,int hp, Joueur joueur) {
super(nom,desc, hp, joueur); super(nom,desc, hp, joueur);
this.capaciteUsed = false;
} }
public boolean isCapaciteUsed() { public boolean isCapaciteUsed() {

View File

@ -10,21 +10,15 @@ import main.Joueur;
public class Vampire extends CartePersonnage{ public class Vampire extends CartePersonnage{
public Vampire(String nom, String desc ,int hp, Joueur joueur) { public Vampire(Joueur joueur) {
super(nom,desc, hp, 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); Effet effet = new EffetSelf(action);
this.setEffet(effet); this.setEffet(effet);
this.setCondition(new WinConditionShadow()); this.setCondition(new WinConditionShadow());
} }
@Override
public void utiliser()
{
this.getEffet().utiliser(this.getJoueur());
}
/** /**
* Lance l'action d'attaquer de Vampire * Lance l'action d'attaquer de Vampire
* <br><br> Effet : Soin 2 PV * <br><br> Effet : Soin 2 PV
@ -36,9 +30,10 @@ public class Vampire extends CartePersonnage{
super.attaquer(j, blessure); super.attaquer(j, blessure);
if(this.getJoueur().getRevele()) if(this.getJoueur().getRevele())
{ {
utiliser(this.getJoueur()); this.utiliser(this.getJoueur());
} }
} }
public void utiliser() {
}
} }

View File

@ -1,6 +1,7 @@
package personnage; package personnage;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -39,18 +40,35 @@ class AllieTest {
@Test @Test
void utiliser_SoinTotal() { void utiliser_SoinTotal() {
j1.setStat("HP", 0); j1.setStat(Joueur.PLAYER_HP, 0);
j1.getCartePersonnage().utiliser(); j1.getCartePersonnage().utiliser();
int pvAllie = j1.getCartePersonnage().getPv(); 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(); j1.getCartePersonnage().utiliser();
// Le soin n'a fonctionné qu'une seule fois // Le soin a fonctionné la première fois, il est désormais "utilisé".
assertEquals(0,j1.getStat("HP")); 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());
} }

View File

@ -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<Joueur> joueurs = new ArrayList<Joueur>();
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 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());
}
}