M431-ShadowHunterGame/src/main/ControleurIA.java

151 lines
4.3 KiB
Java
Raw Normal View History

2020-04-17 11:26:23 +02:00
package main;
import java.util.ArrayList;
import java.util.List;
public class ControleurIA {
public static boolean choixUtiliserPouvoirLieu() {
double res = getRandomPercentage();
if (res < 80)
return true;
return false;
}
// 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) {
double res = getRandomPercentage();
if (getEnnemisJoueurs(jIA, joueursLieu).size() > 0) {
int diff = jIA.getDifficulte();
switch (diff) {
case 1:
if (res < 25)
return true;
break;
case 2:
if (res < 50)
return true;
break;
case 3:
if (res < 75)
return true;
break;
default:
}
} else if (res < 10)
return true;
return false;
}
public static double getRandomPercentage() {
return Math.floor(Math.random() * 100);
}
public static List<Joueur> getEnnemisJoueurs(JoueurVirtuel jIA, List<Joueur> joueursLieu) {
List<Joueur> res = new ArrayList<>();
String equipejIA = jIA.getEquipe();
if (equipejIA.equals("NEUTRE"))
res = joueursLieu;
else {
for (Joueur j : joueursLieu) {
if (!equipejIA.equals(j.getEquipe()))
res.add(j);
}
}
return res;
}
// loup-garou : si attaquee par joueur pas du meme camps 60%? devoilement
public static boolean devoilerIALoupGarou(JoueurVirtuel jIA, Joueur jAttaquant) {
String equipejIA = jIA.getEquipe();
double rand = getRandomPercentage();
if (!equipejIA.equals(jAttaquant.getEquipe())) {
if (rand < 60)
return true;
}
return false;
}
// metamorphe : si re<72>oit carte vision 50%? mentir sans se devoiler
public static boolean mentirIAMetamorphe(JoueurVirtuel jIA) {
if (getRandomPercentage() < 50)
return true;
return false;
}
// 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) {
String equipejIA = jIA.getEquipe();
double rand = getRandomPercentage();
if (!equipejIA.equals(jAttaquee.getEquipe())) {
if (rand < 940 / 9 - (40 * jIA.getHP()))
return true;
}
return false;
}
// emi : si pas de shadow sur lieu actuel mais un sur lieu adjacent 60%?
// devoilement
public static boolean devoilerIAEmi(JoueurVirtuel jIA, CarteLieu cl) {
List<Joueur> joueursProx = cl.getJoueurs();
if (getEnnemisJoueurs(jIA, joueursProx).size() > 0)
return false;
List<Joueur> joueursAdj = cl.getJoueursAdjacents();
if (getEnnemisJoueurs(jIA, joueursAdj).size() > 0)
return true;
return false;
}
// georges: si vie d'un shadow <=4hp 90%? devoilement avant de commencer le tour
public static boolean devoilerIAGeorges(JoueurVirtuel jIA, List<Joueur> jPlateau) {
List<Joueur> jEnnemis = getEnnemisJoueurs(jIA, jPlateau);
boolean devoiler = false;
double rand = getRandomPercentage();
for (Joueur j : jEnnemis) {
if (j.getHP() <= 4)
devoiler = true;
}
if (devoiler && rand < 90)
return true;
return false;
}
// franklin: si vie d'un shadow <=6hp 90%? devoilement avant de commencer le
// tour
public static boolean devoilerIAFranklin(JoueurVirtuel jIA, List<Joueur> jPlateau) {
List<Joueur> jEnnemis = getEnnemisJoueurs(jIA, jPlateau);
boolean devoiler = false;
double rand = getRandomPercentage();
for (Joueur j : jEnnemis) {
if (j.getHP() <= 6)
devoiler = true;
}
if (devoiler && rand < 90)
return true;
return false;
}
// allie : si vie<5?hp (plus vie baisse, plus proba augmente) 60%? devoilement
public static boolean devoilerIAAllie(JoueurVirtuel jIA) {
if (getRandomPercentage() < 110 - 10 * jIA.getHP())
return true;
return false;
}
// bob : si attaque joueur possedant equipement 70?% devoilement
public static boolean devoilerIABob(JoueurVirtuel jIA, Joueur jAttaquee) {
if (jAttaquee.getNbEquipments() > 0 && getRandomPercentage() < 70)
return true;
return false;
}
// charles : si attaque joueur possedant moins de vie que attaque de charles
// 85?% devoilement
public static boolean devoilerIACharles(JoueurVirtuel jIA, Joueur jAttaquee) {
if (jAttaquee.getHP() <= jIA.getDamage() && jIA.getHP() >= 2 && getRandomPercentage() <= 85)
return true;
return false;
}
}