tests IA plus legeres modifications au controleurIA

This commit is contained in:
AhmedSaad 2020-04-21 10:08:45 +02:00
parent d2345b19af
commit 10262e8792
3 changed files with 198 additions and 17 deletions

View File

@ -5,8 +5,17 @@ import java.util.List;
import main.Joueur.Equipe;
public class ControleurIA {
int seed;
public ControleurIA() {
seed = 100;
}
public void setSeed(int i) {
seed = i;
}
public static boolean choixUtiliserPouvoirLieu() {
public boolean choixUtiliserPouvoirLieu() {
double res = getRandomPercentage();
if (res < 80)
return true;
@ -15,7 +24,7 @@ public class ControleurIA {
// precondition 1 : la liste joueursLieu ne contiendra pas jIA lui-meme
// precondition 2 : on n'appellera pas cette methode si jIA est seul sur le lieu
public static boolean choixSiAttaquer(JoueurVirtuel jIA, List<Joueur> joueursLieu) {
public boolean choixSiAttaquer(JoueurVirtuel jIA, List<Joueur> joueursLieu) {
double res = getRandomPercentage();
if (getEnnemisJoueurs(jIA, joueursLieu).size() > 0) {
int diff = jIA.getDifficulte();
@ -39,8 +48,8 @@ public class ControleurIA {
return false;
}
public static double getRandomPercentage() {
return Math.floor(Math.random() * 100);
public double getRandomPercentage() {
return Math.floor(Math.random() * seed);
}
public static List<Joueur> getEnnemisJoueurs(JoueurVirtuel jIA, List<Joueur> joueursLieu) {
@ -58,7 +67,7 @@ public class ControleurIA {
}
// loup-garou : si attaquee par joueur pas du meme camps 60%? devoilement
public static boolean devoilerIALoupGarou(JoueurVirtuel jIA, Joueur jAttaquant) {
public boolean devoilerIALoupGarou(JoueurVirtuel jIA, Joueur jAttaquant) {
Equipe equipejIA = jIA.getEquipe();
double rand = getRandomPercentage();
if (!equipejIA.equals(jAttaquant.getEquipe())) {
@ -68,8 +77,8 @@ public class ControleurIA {
return false;
}
// metamorphe : si re<EFBFBD>oit carte vision 50%? mentir sans se devoiler
public static boolean mentirIAMetamorphe(JoueurVirtuel jIA) {
// metamorphe : si recoit carte vision 50%? mentir sans se devoiler
public boolean mentirIAMetamorphe() {
if (getRandomPercentage() < 50)
return true;
return false;
@ -77,11 +86,11 @@ public class ControleurIA {
// vampire : si attaque joueur et propre vie<10?hp 60%? (plus vie baisse, plus
// proba augmente) devoilement
public static boolean devoilerIAVampire(JoueurVirtuel jIA, Joueur jAttaquee) {
public boolean devoilerIAVampire(JoueurVirtuel jIA, Joueur jAttaquee) {
Equipe equipejIA = jIA.getEquipe();
double rand = getRandomPercentage();
if (!equipejIA.equals(jAttaquee.getEquipe())) {
if (rand < 940 / 9 - (40 * jIA.getStat("HP")))
if (!equipejIA.equals(jAttaquee.getEquipe()) && jIA.getStat("HP")<11) {
if (rand < 940 / 9 - (40 * jIA.getStat("HP")/9))
return true;
}
return false;
@ -89,7 +98,7 @@ public class ControleurIA {
// emi : si pas de shadow sur lieu actuel mais un sur lieu adjacent 60%?
// devoilement
public static boolean devoilerIAEmi(JoueurVirtuel jIA, CarteLieu cl) {
public boolean devoilerIAEmi(JoueurVirtuel jIA, CarteLieu cl) {
List<Joueur> joueursProx = cl.getJoueurs();
if (getEnnemisJoueurs(jIA, joueursProx).size() > 0)
return false;
@ -100,7 +109,7 @@ public class ControleurIA {
}
// georges: si vie d'un shadow <=4hp 90%? devoilement avant de commencer le tour
public static boolean devoilerIAGeorges(JoueurVirtuel jIA, List<Joueur> jPlateau) {
public boolean devoilerIAGeorges(JoueurVirtuel jIA, List<Joueur> jPlateau) {
List<Joueur> jEnnemis = getEnnemisJoueurs(jIA, jPlateau);
boolean devoiler = false;
double rand = getRandomPercentage();
@ -115,7 +124,7 @@ public class ControleurIA {
// franklin: si vie d'un shadow <=6hp 90%? devoilement avant de commencer le
// tour
public static boolean devoilerIAFranklin(JoueurVirtuel jIA, List<Joueur> jPlateau) {
public boolean devoilerIAFranklin(JoueurVirtuel jIA, List<Joueur> jPlateau) {
List<Joueur> jEnnemis = getEnnemisJoueurs(jIA, jPlateau);
boolean devoiler = false;
double rand = getRandomPercentage();
@ -129,14 +138,14 @@ public class ControleurIA {
}
// allie : si vie<5?hp (plus vie baisse, plus proba augmente) 60%? devoilement
public static boolean devoilerIAAllie(JoueurVirtuel jIA) {
if (getRandomPercentage() < 110 - 10 * jIA.getStat("HP"))
public boolean devoilerIAAllie(JoueurVirtuel jIA) {
if (getRandomPercentage() < 110 - 10 * jIA.getStat("HP") && jIA.getStat("HP")<6)
return true;
return false;
}
// bob : si attaque joueur possedant equipement 70?% devoilement
public static boolean devoilerIABob(JoueurVirtuel jIA, Joueur jAttaquee) {
public boolean devoilerIABob(JoueurVirtuel jIA, Joueur jAttaquee) {
if (jAttaquee.getNbEquipments() > 0 && getRandomPercentage() < 70)
return true;
return false;
@ -144,7 +153,7 @@ public class ControleurIA {
// charles : si attaque joueur possedant moins de vie que attaque de charles
// 85?% devoilement
public static boolean devoilerIACharles(JoueurVirtuel jIA, Joueur jAttaquee) {
public boolean devoilerIACharles(JoueurVirtuel jIA, Joueur jAttaquee) {
if (jAttaquee.getStat("HP") <= jIA.getStat("DAMAGE") && jIA.getStat("HP") >= 2 && getRandomPercentage() <= 85)
return true;
return false;

View File

@ -28,4 +28,8 @@ public class JoueurVirtuel extends Joueur {
public int getDifficulte() {
return nvDifficulte;
}
public void setDifficulte(int i) {
nvDifficulte = i;
}
}

168
tests/main/IATest.java Normal file
View File

@ -0,0 +1,168 @@
package main;
import static org.junit.jupiter.api.Assertions.*;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Test;
import main.Joueur.Equipe;
public class IATest {
ControleurIA cIA = new ControleurIA();
JoueurVirtuel jIA = new JoueurVirtuel("bonhomme");
List<Joueur> joueurs = new ArrayList<>();
Joueur j1 = new Joueur("j1");
Joueur j2 = new Joueur("j2");
@Test
public void choixAttaquerTest() {
//setup
jIA.setEquipe(Equipe.SHADOW);
j1.setEquipe(Equipe.HUNTER);
j2.setEquipe(Equipe.SHADOW);
jIA.setDifficulte(1);
cIA.setSeed(24);
//test 1 : il y a un ennemi sur le lieu, on chosit de attaquer
joueurs.add(j1);
joueurs.add(j2);
assertTrue(cIA.choixSiAttaquer(jIA, joueurs));
//test 2 : il n'y a pas d'ennemi sur le lieu, on chosit de attaquer avec 10%
joueurs.clear();
joueurs.add(j2);
cIA.setSeed(9);
assertTrue(cIA.choixSiAttaquer(jIA, joueurs));
}
@Test
public void choixPouvoirLieuTest() {
cIA.setSeed(79);
assertTrue(cIA.choixUtiliserPouvoirLieu());
}
@Test
public void devoilerMetamorpheTest() {
cIA.setSeed(50);
assertTrue(cIA.mentirIAMetamorphe());
}
@Test
public void devoilerLoupGarouTest() {
//setup
cIA.setSeed(59);
jIA.setEquipe(Equipe.SHADOW);
j1.setEquipe(Equipe.HUNTER);
j2.setEquipe(Equipe.SHADOW);
//test 1 : joueur ami, on ne se devoile pas
assertFalse(cIA.devoilerIALoupGarou(jIA, j2));
//test 2 : joueur ennemi, on se devoile
assertTrue(cIA.devoilerIALoupGarou(jIA, j1));
}
@Test
public void devoilerVampireTest() {
//setup
cIA.setSeed(59);
jIA.setEquipe(Equipe.SHADOW);
j1.setEquipe(Equipe.HUNTER);
j2.setEquipe(Equipe.SHADOW);
//test 1 : joueur ami, on ne se devoile pas
jIA.setStat("HP", 10);
assertFalse(cIA.devoilerIAVampire(jIA, j2));
//test 2 : joueur ennemi et peu de HP, on se devoile
assertTrue(cIA.devoilerIAVampire(jIA, j1));
//test 3 : joueur ennemi et beaucoup de HP, on se devoile pas
jIA.setStat("HP", 12);
assertFalse(cIA.devoilerIAVampire(jIA, j1));
}
@Test
public void devoilerGeorgesTest() {
//setup
cIA.setSeed(89);
jIA.setEquipe(Equipe.HUNTER);
j1.setEquipe(Equipe.HUNTER);
j2.setEquipe(Equipe.SHADOW);
joueurs.add(j1);
joueurs.add(j2);
//test 1 : ennemi avec moins de 4 hp, on se devoile
j2.setStat("HP", 4);
assertTrue(cIA.devoilerIAGeorges(jIA, joueurs));
//test 2 : pas d'ennemi avec moins de 4 hp, on se devoile pas
j2.setStat("HP", 6);
assertFalse(cIA.devoilerIAGeorges(jIA, joueurs));
}
@Test
public void devoilerFranklinTest() {
//setup
cIA.setSeed(89);
jIA.setEquipe(Equipe.HUNTER);
j1.setEquipe(Equipe.HUNTER);
j2.setEquipe(Equipe.SHADOW);
joueurs.add(j1);
joueurs.add(j2);
//test 1 : ennemi avec moins de 6 hp, on se devoile
j2.setStat("HP", 6);
assertTrue(cIA.devoilerIAFranklin(jIA, joueurs));
//test 2 : pas d'ennemi avec moins de 6 hp, on se devoile pas
j2.setStat("HP", 8);
assertFalse(cIA.devoilerIAFranklin(jIA, joueurs));
}
@Test
public void devoilerAllieTest() {
//setup
cIA.setSeed(59);
//test 1 : pas beaucoup de hp, on se devoile
jIA.setStat("HP", 5);
assertTrue(cIA.devoilerIAAllie(jIA));
//test 2 : beaucoup de hp, on se devoile pas
jIA.setStat("HP", 6);
assertFalse(cIA.devoilerIAAllie(jIA));
}
@Test
public void devoilerCharlesTest() {
//setup
cIA.setSeed(84);
j2.setStat("HP", 4);
//test 1 : ennemi affaibli, on se devoile
jIA.setStat("HP", 10);
jIA.setStat("DAMAGE", 4);
assertTrue(cIA.devoilerIACharles(jIA, j2));
//test 2 : ennemi affaibli mais pas assez de dmg pour le tuer, on se devoile pas
jIA.setStat("DAMAGE", 3);
assertFalse(cIA.devoilerIACharles(jIA, j2));
//test 3 : charles n'a pas beaucoup de hp, on se devoile pas
jIA.setStat("DAMAGE", 4);
jIA.setStat("HP", 1);
assertFalse(cIA.devoilerIACharles(jIA, j2));
}
//TODO : devoilement emi et devoilement bob
}