fait enum contexte et changements a tester sur IA

This commit is contained in:
AhmedSaad 2020-04-30 10:30:55 +02:00
parent 641d298bd3
commit 8042514def
3 changed files with 113 additions and 27 deletions

10
src/main/Contexte.java Normal file
View File

@ -0,0 +1,10 @@
package main;
public enum Contexte {
ATTAQUER,
VOLER_EQUIP,
EFFET_NEGATIF_SUR_AUTRES,
EFFET_POSITIF_SUR_AUTRES
}

View File

@ -53,7 +53,7 @@ public class ControleurIA {
public double getRandomPercentage() { public double getRandomPercentage() {
return Math.floor(Math.random() * seed); 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) {
List<Joueur> res = new ArrayList<>(); List<Joueur> res = new ArrayList<>();
Equipe equipejIA = jIA.getEquipe(); Equipe equipejIA = jIA.getEquipe();
@ -67,6 +67,20 @@ public class ControleurIA {
} }
return res; return res;
} }
public static List<Joueur> getAmisJoueurs(JoueurVirtuel jIA, List<Joueur> joueursLieu) {
List<Joueur> res = new ArrayList<>();
Equipe equipejIA = jIA.getEquipe();
if (equipejIA == CartePersonnage.Equipe.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 // loup-garou : si attaquee par joueur pas du meme camps 60%? devoilement
public boolean devoilerIALoupGarou(JoueurVirtuel jIA, Joueur jAttaquant) { public boolean devoilerIALoupGarou(JoueurVirtuel jIA, Joueur jAttaquant) {

View File

@ -1,4 +1,5 @@
package main; package main;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -6,51 +7,112 @@ import carte.Equipement;
import carte.EquipementStat; import carte.EquipementStat;
import effet.Effet; import effet.Effet;
public class JoueurVirtuel extends Joueur { public class JoueurVirtuel extends Joueur {
private int nvDifficulte = 1; //possibilite de 1, 2 ou 3 private int nvDifficulte = 1; // possibilite de 1, 2 ou 3
public JoueurVirtuel (String name) { public JoueurVirtuel(String name) {
super(name); super(name);
} }
public Effet choisirEffet(List<Effet> effets) { public Effet choisirEffet(List<Effet> effets) {
return effets.get((int)Math.floor(Math.random() * effets.size())); return effets.get((int) Math.floor(Math.random() * effets.size()));
} }
//on privilegie les equipements qui donnent des stats // on privilegie les equipements qui donnent des stats
public Equipement choisirEquipement(List<Equipement> equips) { public Equipement choisirEquipement(List<Equipement> equips) {
List<Equipement> equipstat = trouverEquipStat(equips); List<Equipement> equipstat = trouverEquipStat(equips);
if(equipstat.size()>0) if (equipstat.size() > 0)
return equipstat.get((int)Math.floor(Math.random() * equipstat.size())); return equipstat.get((int) Math.floor(Math.random() * equipstat.size()));
return equips.get((int)Math.floor(Math.random() * equips.size())); return equips.get((int) Math.floor(Math.random() * equips.size()));
} }
public List<Equipement> trouverEquipStat(List<Equipement> equips){ public List<Equipement> trouverEquipStat(List<Equipement> equips) {
List<Equipement> res = new ArrayList<>(); List<Equipement> res = new ArrayList<>();
for(Equipement e : equips) { for (Equipement e : equips) {
if(e instanceof EquipementStat) if (e instanceof EquipementStat)
res.add(e); res.add(e);
} }
return res; return res;
} }
//on choisit les joueurs avec les moins de hp, on ne distingue pas cependant d'amie ou ennemi public Joueur choisirJoueur(List<Joueur> joueurs, Contexte c) {
public Joueur choisirJoueur(List<Joueur> joueurs) { Joueur res;
Joueur res = joueurs.get(0); switch (c) {
for(int i=1; i<joueurs.size();i++) { case ATTAQUER:
if(res.getStat("HP")>joueurs.get(i).getStat("HP")) res = choisirJoueurEnnemi(joueurs);
res = joueurs.get(i); break;
case VOLER_EQUIP:
res = choisirJoueurAVoler(joueurs);
break;
case EFFET_NEGATIF_SUR_AUTRES:
res = choisirJoueurEnnemi(joueurs);
break;
case EFFET_POSITIF_SUR_AUTRES:
res = choisirJoueurAmi(joueurs);
break;
default:
res = null; // faire exception?
} }
return res; return res;
//return joueurs.get((int)Math.floor(Math.random() * joueurs.size()));
} }
// on choisit les joueurs avec les moins de hp, on met en priorite les ennemis
public Joueur choisirJoueurEnnemi(List<Joueur> joueurs) {
List<Joueur> resliste;
List<Joueur> ennemis = ControleurIA.getEnnemisJoueurs(this, joueurs);
if (ennemis.size() > 0)
resliste = ennemis;
else
resliste = joueurs;
Joueur res = resliste.get(0);
for (int i = 1; i < resliste.size(); i++) {
if (res.getStat("HP") > resliste.get(i).getStat("HP"))
res = resliste.get(i);
}
return res;
// return joueurs.get((int)Math.floor(Math.random() * joueurs.size()));
}
// on choisit les joueurs avec le plus d'equipements, on met en priorite les
// ennemis
public Joueur choisirJoueurAVoler(List<Joueur> joueurs) {
List<Joueur> resliste;
List<Joueur> ennemis = ControleurIA.getEnnemisJoueurs(this, joueurs);
if (ennemis.size() > 0)
resliste = ennemis;
else
resliste = joueurs;
Joueur res = resliste.get(0);
for (int i = 1; i < resliste.size(); i++) {
if (res.getStat("nb_equipements") > resliste.get(i).getStat("nb_equipements"))
res = resliste.get(i);
}
return res;
}
// on choisit les joueurs avec les moins de hp, on met en priorite les amis (ex:
// pour les soigner?)
public Joueur choisirJoueurAmi(List<Joueur> joueurs) {
List<Joueur> resliste;
List<Joueur> ennemis = ControleurIA.getAmisJoueurs(this, joueurs);
if (ennemis.size() > 0)
resliste = ennemis;
else
resliste = joueurs;
Joueur res = resliste.get(0);
for (int i = 1; i < resliste.size(); i++) {
if (res.getStat("HP") > resliste.get(i).getStat("HP"))
res = resliste.get(i);
}
return res;
// return joueurs.get((int)Math.floor(Math.random() * joueurs.size()));
}
public int getDifficulte() { public int getDifficulte() {
return nvDifficulte; return nvDifficulte;
} }
public void setDifficulte(int i) { public void setDifficulte(int i) {
nvDifficulte = i; nvDifficulte = i;
} }