tests IA plus legeres modifications au controleurIA
This commit is contained in:
parent
d2345b19af
commit
10262e8792
@ -5,8 +5,17 @@ import java.util.List;
|
|||||||
import main.Joueur.Equipe;
|
import main.Joueur.Equipe;
|
||||||
|
|
||||||
public class ControleurIA {
|
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();
|
double res = getRandomPercentage();
|
||||||
if (res < 80)
|
if (res < 80)
|
||||||
return true;
|
return true;
|
||||||
@ -15,7 +24,7 @@ public class ControleurIA {
|
|||||||
|
|
||||||
// precondition 1 : la liste joueursLieu ne contiendra pas jIA lui-meme
|
// 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
|
// 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();
|
double res = getRandomPercentage();
|
||||||
if (getEnnemisJoueurs(jIA, joueursLieu).size() > 0) {
|
if (getEnnemisJoueurs(jIA, joueursLieu).size() > 0) {
|
||||||
int diff = jIA.getDifficulte();
|
int diff = jIA.getDifficulte();
|
||||||
@ -39,8 +48,8 @@ public class ControleurIA {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double getRandomPercentage() {
|
public double getRandomPercentage() {
|
||||||
return Math.floor(Math.random() * 100);
|
return Math.floor(Math.random() * seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Joueur> getEnnemisJoueurs(JoueurVirtuel jIA, List<Joueur> joueursLieu) {
|
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
|
// 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();
|
Equipe equipejIA = jIA.getEquipe();
|
||||||
double rand = getRandomPercentage();
|
double rand = getRandomPercentage();
|
||||||
if (!equipejIA.equals(jAttaquant.getEquipe())) {
|
if (!equipejIA.equals(jAttaquant.getEquipe())) {
|
||||||
@ -68,8 +77,8 @@ public class ControleurIA {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// metamorphe : si re<EFBFBD>oit carte vision 50%? mentir sans se devoiler
|
// metamorphe : si recoit carte vision 50%? mentir sans se devoiler
|
||||||
public static boolean mentirIAMetamorphe(JoueurVirtuel jIA) {
|
public boolean mentirIAMetamorphe() {
|
||||||
if (getRandomPercentage() < 50)
|
if (getRandomPercentage() < 50)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
@ -77,11 +86,11 @@ 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 boolean devoilerIAVampire(JoueurVirtuel jIA, Joueur jAttaquee) {
|
||||||
Equipe equipejIA = jIA.getEquipe();
|
Equipe equipejIA = jIA.getEquipe();
|
||||||
double rand = getRandomPercentage();
|
double rand = getRandomPercentage();
|
||||||
if (!equipejIA.equals(jAttaquee.getEquipe())) {
|
if (!equipejIA.equals(jAttaquee.getEquipe()) && jIA.getStat("HP")<11) {
|
||||||
if (rand < 940 / 9 - (40 * jIA.getStat("HP")))
|
if (rand < 940 / 9 - (40 * jIA.getStat("HP")/9))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -89,7 +98,7 @@ public class ControleurIA {
|
|||||||
|
|
||||||
// emi : si pas de shadow sur lieu actuel mais un sur lieu adjacent 60%?
|
// emi : si pas de shadow sur lieu actuel mais un sur lieu adjacent 60%?
|
||||||
// devoilement
|
// devoilement
|
||||||
public static boolean devoilerIAEmi(JoueurVirtuel jIA, CarteLieu cl) {
|
public boolean devoilerIAEmi(JoueurVirtuel jIA, CarteLieu cl) {
|
||||||
List<Joueur> joueursProx = cl.getJoueurs();
|
List<Joueur> joueursProx = cl.getJoueurs();
|
||||||
if (getEnnemisJoueurs(jIA, joueursProx).size() > 0)
|
if (getEnnemisJoueurs(jIA, joueursProx).size() > 0)
|
||||||
return false;
|
return false;
|
||||||
@ -100,7 +109,7 @@ public class ControleurIA {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// georges: si vie d'un shadow <=4hp 90%? devoilement avant de commencer le tour
|
// 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);
|
List<Joueur> jEnnemis = getEnnemisJoueurs(jIA, jPlateau);
|
||||||
boolean devoiler = false;
|
boolean devoiler = false;
|
||||||
double rand = getRandomPercentage();
|
double rand = getRandomPercentage();
|
||||||
@ -115,7 +124,7 @@ public class ControleurIA {
|
|||||||
|
|
||||||
// franklin: si vie d'un shadow <=6hp 90%? devoilement avant de commencer le
|
// franklin: si vie d'un shadow <=6hp 90%? devoilement avant de commencer le
|
||||||
// tour
|
// tour
|
||||||
public static boolean devoilerIAFranklin(JoueurVirtuel jIA, List<Joueur> jPlateau) {
|
public boolean devoilerIAFranklin(JoueurVirtuel jIA, List<Joueur> jPlateau) {
|
||||||
List<Joueur> jEnnemis = getEnnemisJoueurs(jIA, jPlateau);
|
List<Joueur> jEnnemis = getEnnemisJoueurs(jIA, jPlateau);
|
||||||
boolean devoiler = false;
|
boolean devoiler = false;
|
||||||
double rand = getRandomPercentage();
|
double rand = getRandomPercentage();
|
||||||
@ -129,14 +138,14 @@ public class ControleurIA {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// allie : si vie<5?hp (plus vie baisse, plus proba augmente) 60%? devoilement
|
// allie : si vie<5?hp (plus vie baisse, plus proba augmente) 60%? devoilement
|
||||||
public static boolean devoilerIAAllie(JoueurVirtuel jIA) {
|
public boolean devoilerIAAllie(JoueurVirtuel jIA) {
|
||||||
if (getRandomPercentage() < 110 - 10 * jIA.getStat("HP"))
|
if (getRandomPercentage() < 110 - 10 * jIA.getStat("HP") && jIA.getStat("HP")<6)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// bob : si attaque joueur possedant equipement 70?% devoilement
|
// 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)
|
if (jAttaquee.getNbEquipments() > 0 && getRandomPercentage() < 70)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
@ -144,7 +153,7 @@ public class ControleurIA {
|
|||||||
|
|
||||||
// charles : si attaque joueur possedant moins de vie que attaque de charles
|
// charles : si attaque joueur possedant moins de vie que attaque de charles
|
||||||
// 85?% devoilement
|
// 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)
|
if (jAttaquee.getStat("HP") <= jIA.getStat("DAMAGE") && jIA.getStat("HP") >= 2 && getRandomPercentage() <= 85)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
|
@ -28,4 +28,8 @@ public class JoueurVirtuel extends Joueur {
|
|||||||
public int getDifficulte() {
|
public int getDifficulte() {
|
||||||
return nvDifficulte;
|
return nvDifficulte;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDifficulte(int i) {
|
||||||
|
nvDifficulte = i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
168
tests/main/IATest.java
Normal file
168
tests/main/IATest.java
Normal 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
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user