Modification de la classe ConditionClass en ConditionClassPersonnage, création d'une classe ConditionType et ajout de tests correspondants

This commit is contained in:
Paul Gross 2020-04-19 11:55:59 +02:00
parent fd3cf937c4
commit b6a1db9e3b
8 changed files with 242 additions and 61 deletions

View File

@ -1,48 +0,0 @@
package condition;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import main.Joueur;
public class ConditionClass<T> extends Condition{
private List<Class<T>> classes;
public ConditionClass(Class<T> ... classes){
// TODO
this.classes = new ArrayList<Class<T>>();
this.classes.addAll(Arrays.asList(classes));
}
/**
* Vérifie qu'il existe au moins une classe qui correspond soit au Type soit au Personnage du Joueur.
* <br><br>
* exemple :
*
* classes = { Emi.class, Metamorphe.class, ... etc } ou classes = { Hunter.class, Shadow.class, Neutre.class }
* <br>
* Si la class de la carte du joueur correspond à un des élements dans classes alors on renvoie vrai, même chose pour les types.
*
* @param joueur Le joueur sur lequel on vérifie les conditions.
* @return boolean
*/
@Override
public boolean isTrue(Joueur joueur)
{
Class<? extends T> ccp = (Class<? extends T>) joueur.getCartePersonnage().getClass();
Class<? extends T> cct = (Class<? extends T>) joueur.getEquipe().getClass();
for(Class<? extends T> classe : classes) {
if(ccp.getClass() == classe.getClass() || cct.getClass() == classe.getClass() ) return true;
}
return false;
}
}

View File

@ -0,0 +1,49 @@
package condition;
import java.util.ArrayList;
import java.util.List;
import main.Joueur;
import personnage.CartePersonnage;
public class ConditionClassPersonnage extends Condition{
private List<Class<? extends CartePersonnage>> classes;
public ConditionClassPersonnage(List<Class<? extends CartePersonnage>> classes){
this.classes = new ArrayList<Class<? extends CartePersonnage>>();
this.classes.addAll(classes);
}
/**
* Vérifie qu'il existe au moins une classe qui correspond au Personnage du Joueur.
* <br><br>
* exemple :
*
* classes = { Emi.class, Metamorphe.class, ... etc }
* <br>
* Si la class de la carte du joueur correspond à un des élements dans classes alors on renvoie vrai.
*
* @param joueur Le joueur sur lequel on vérifie les conditions.
* @return boolean
*/
@Override
public boolean isTrue(Joueur joueur)
{
Class<? extends CartePersonnage> ccp = joueur.getCartePersonnage().getClass();
for(Class<? extends Object> classe : classes) {
if(ccp == classe
//|| cct.getClass() == classe.getClass()
) return true;
}
return false;
}
}

View File

@ -0,0 +1,46 @@
package condition;
import java.util.ArrayList;
import java.util.List;
import main.Joueur;
public class ConditionType extends Condition{
private List<Joueur.Equipe> equipes;
public ConditionType(List<Joueur.Equipe> equipes){
this.equipes = new ArrayList<Joueur.Equipe>();
this.equipes.addAll(equipes);
}
/**
* Vérifie qu'il existe au moins une classe qui correspond à l'équipe du Joueur.
* <br><br>
* exemple :
*
* classes = { NEUTRE,SHADOW,HUNTER }
* <br>
* Si l'équipe du joueur correspond à un des élements dans la liste des équipes alors on renvoie vrai.
*
* @param joueur Le joueur sur lequel on vérifie les conditions.
* @return boolean
*/
@Override
public boolean isTrue(Joueur joueur)
{
Joueur.Equipe equipeJoueur = joueur.getEquipe();
for(Joueur.Equipe equipe : equipes) {
if(equipeJoueur == equipe) return true;
}
return false;
}
}

View File

@ -2,6 +2,8 @@ package main;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import main.Joueur.Equipe;
public class ControleurIA { public class ControleurIA {
public static boolean choixUtiliserPouvoirLieu() { public static boolean choixUtiliserPouvoirLieu() {
@ -43,8 +45,8 @@ public class ControleurIA {
public static List<Joueur> getEnnemisJoueurs(JoueurVirtuel jIA, List<Joueur> joueursLieu) { public static List<Joueur> getEnnemisJoueurs(JoueurVirtuel jIA, List<Joueur> joueursLieu) {
List<Joueur> res = new ArrayList<>(); List<Joueur> res = new ArrayList<>();
String equipejIA = jIA.getEquipe(); Equipe equipejIA = jIA.getEquipe();
if (equipejIA.equals("NEUTRE")) if (equipejIA == Joueur.Equipe.NEUTRE)
res = joueursLieu; res = joueursLieu;
else { else {
for (Joueur j : joueursLieu) { for (Joueur j : joueursLieu) {
@ -57,7 +59,7 @@ public class ControleurIA {
// loup-garou : si attaquee par joueur pas du meme camps 60%? devoilement // loup-garou : si attaquee par joueur pas du meme camps 60%? devoilement
public static boolean devoilerIALoupGarou(JoueurVirtuel jIA, Joueur jAttaquant) { public static boolean devoilerIALoupGarou(JoueurVirtuel jIA, Joueur jAttaquant) {
String equipejIA = jIA.getEquipe(); Equipe equipejIA = jIA.getEquipe();
double rand = getRandomPercentage(); double rand = getRandomPercentage();
if (!equipejIA.equals(jAttaquant.getEquipe())) { if (!equipejIA.equals(jAttaquant.getEquipe())) {
if (rand < 60) if (rand < 60)
@ -76,7 +78,7 @@ public class ControleurIA {
// vampire : si attaque joueur et propre vie<10?hp 60%? (plus vie baisse, plus // vampire : si attaque joueur et propre vie<10?hp 60%? (plus vie baisse, plus
// proba augmente) devoilement // proba augmente) devoilement
public static boolean devoilerIAVampire(JoueurVirtuel jIA, Joueur jAttaquee) { public static boolean devoilerIAVampire(JoueurVirtuel jIA, Joueur jAttaquee) {
String equipejIA = jIA.getEquipe(); Equipe equipejIA = jIA.getEquipe();
double rand = getRandomPercentage(); double rand = getRandomPercentage();
if (!equipejIA.equals(jAttaquee.getEquipe())) { if (!equipejIA.equals(jAttaquee.getEquipe())) {
if (rand < 940 / 9 - (40 * jIA.getStat("HP"))) if (rand < 940 / 9 - (40 * jIA.getStat("HP")))

View File

@ -3,8 +3,8 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import carte.CarteLieu;
import effet.Effet; import effet.Effet;
import personnage.CartePersonnage;
@ -14,6 +14,8 @@ public class Joueur {
private String nom; private String nom;
private boolean revele; private boolean revele;
private Plateau plateau; private Plateau plateau;
private CartePersonnage cartePersonnage;
private Equipe equipe;
// map keys // map keys
public static final String PLAYER_HP = "hp"; public static final String PLAYER_HP = "hp";
@ -26,6 +28,12 @@ public class Joueur {
private Map<String, Integer> stats; private Map<String, Integer> stats;
public enum Equipe{
NEUTRE,
SHADOW,
HUNTER
}
public Joueur(String nom) { public Joueur(String nom) {
this.nom = nom; this.nom = nom;
this.revele = false; this.revele = false;
@ -46,8 +54,8 @@ public class Joueur {
} }
//shadows, hunters ou neutre //shadows, hunters ou neutre
public String getEquipe() { public Equipe getEquipe() {
return null; return this.equipe;
} }
public int setStat(String key, int valeur) { public int setStat(String key, int valeur) {
@ -111,9 +119,19 @@ public class Joueur {
return this.revele; return this.revele;
} }
public Object getCartePersonnage() { public CartePersonnage getCartePersonnage() {
// TODO Auto-generated method stub return this.cartePersonnage;
return null; }
public void setCartePersonnage(CartePersonnage cp) {
this.cartePersonnage = cp;
}
public void setEquipe(Equipe equipe) {
this.equipe = equipe;
} }
} }

View File

@ -0,0 +1,62 @@
package condition;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Test;
import main.Joueur;
import personnage.Allie;
import personnage.Bob;
import personnage.CartePersonnage;
import personnage.Daniel;
class ConditionClassPersonnageTest {
@Test
public void conditionClass_RenvoieAppartenancePersonnage() {
List<Class<? extends CartePersonnage>> classes = new ArrayList<Class<? extends CartePersonnage>>();
classes.add(Allie.class);
classes.add(Daniel.class);
ConditionClassPersonnage cc = new ConditionClassPersonnage(classes);
Joueur j = new Joueur(null);
CartePersonnage cp1 = new Allie(null, 0, j);
// Le personnage fait partie des classes.
j.setCartePersonnage(cp1);
assertTrue(cc.isTrue(j));
CartePersonnage cp2 = new Bob(null, 0, j);
// Le personnage ne fait pas partie des classes
j.setCartePersonnage(cp2);
assertFalse(cc.isTrue(j));
}
@Test
public void conditionClass_ListClassVide_RenvoieFalse() {
List<Class<? extends CartePersonnage>> classes = new ArrayList<Class<? extends CartePersonnage>>();
ConditionClassPersonnage cc = new ConditionClassPersonnage(classes);
Joueur j = new Joueur(null);
CartePersonnage cp1 = new Allie(null, 0, j);
j.setCartePersonnage(cp1);
assertFalse(cc.isTrue(j));
}
}

View File

@ -4,9 +4,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import condition.Condition;
import condition.ConditionMultiple;
import condition.ConditionMultipleOR;
import main.Joueur; import main.Joueur;
class ConditionMultipleTest { class ConditionMultipleTest {

View File

@ -0,0 +1,55 @@
package condition;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Test;
import main.Joueur;
import personnage.Allie;
import personnage.Bob;
import personnage.CartePersonnage;
import personnage.Daniel;
class ConditionTypeTest {
@Test
public void conditionType_RenvoieAppartenanceEquipe() {
List<Joueur.Equipe> equipes = new ArrayList<Joueur.Equipe>();
equipes.add(Joueur.Equipe.HUNTER);
equipes.add(Joueur.Equipe.NEUTRE);
ConditionType ct = new ConditionType(equipes);
Joueur j = new Joueur(null);
j.setEquipe(Joueur.Equipe.NEUTRE);
assertTrue(ct.isTrue(j));
j.setEquipe(Joueur.Equipe.SHADOW);
assertFalse(ct.isTrue(j));
}
@Test
public void conditionClass_ListTypeVide_RenvoieFalse() {
List<Joueur.Equipe> equipes = new ArrayList<Joueur.Equipe>();
ConditionType ct = new ConditionType(equipes);
Joueur j = new Joueur(null);
assertFalse(ct.isTrue(j));
}
}