From 10262e87921fd25cb3a4c72daa112b4d50f455df Mon Sep 17 00:00:00 2001 From: AhmedSaad Date: Tue, 21 Apr 2020 10:08:45 +0200 Subject: [PATCH] tests IA plus legeres modifications au controleurIA --- src/main/ControleurIA.java | 43 +++++---- src/main/JoueurVirtuel.java | 4 + tests/main/IATest.java | 168 ++++++++++++++++++++++++++++++++++++ 3 files changed, 198 insertions(+), 17 deletions(-) create mode 100644 tests/main/IATest.java diff --git a/src/main/ControleurIA.java b/src/main/ControleurIA.java index 1a73666..d5739d7 100644 --- a/src/main/ControleurIA.java +++ b/src/main/ControleurIA.java @@ -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 joueursLieu) { + public boolean choixSiAttaquer(JoueurVirtuel jIA, List 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 getEnnemisJoueurs(JoueurVirtuel jIA, List 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�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 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 jPlateau) { + public boolean devoilerIAGeorges(JoueurVirtuel jIA, List jPlateau) { List 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 jPlateau) { + public boolean devoilerIAFranklin(JoueurVirtuel jIA, List jPlateau) { List 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; diff --git a/src/main/JoueurVirtuel.java b/src/main/JoueurVirtuel.java index 34360c6..41f8469 100644 --- a/src/main/JoueurVirtuel.java +++ b/src/main/JoueurVirtuel.java @@ -28,4 +28,8 @@ public class JoueurVirtuel extends Joueur { public int getDifficulte() { return nvDifficulte; } + + public void setDifficulte(int i) { + nvDifficulte = i; + } } diff --git a/tests/main/IATest.java b/tests/main/IATest.java new file mode 100644 index 0000000..260e72f --- /dev/null +++ b/tests/main/IATest.java @@ -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 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 + +}