From 8042514def50ef7730dc82dc42c14c02e64a9020 Mon Sep 17 00:00:00 2001 From: AhmedSaad Date: Thu, 30 Apr 2020 10:30:55 +0200 Subject: [PATCH] fait enum contexte et changements a tester sur IA --- src/main/Contexte.java | 10 ++++ src/main/ControleurIA.java | 16 ++++- src/main/JoueurVirtuel.java | 114 ++++++++++++++++++++++++++++-------- 3 files changed, 113 insertions(+), 27 deletions(-) create mode 100644 src/main/Contexte.java diff --git a/src/main/Contexte.java b/src/main/Contexte.java new file mode 100644 index 0000000..587b38c --- /dev/null +++ b/src/main/Contexte.java @@ -0,0 +1,10 @@ +package main; + +public enum Contexte { + + ATTAQUER, + VOLER_EQUIP, + EFFET_NEGATIF_SUR_AUTRES, + EFFET_POSITIF_SUR_AUTRES + +} diff --git a/src/main/ControleurIA.java b/src/main/ControleurIA.java index 8c088c6..7b65371 100644 --- a/src/main/ControleurIA.java +++ b/src/main/ControleurIA.java @@ -53,7 +53,7 @@ public class ControleurIA { public double getRandomPercentage() { return Math.floor(Math.random() * seed); } - + public static List getEnnemisJoueurs(JoueurVirtuel jIA, List joueursLieu) { List res = new ArrayList<>(); Equipe equipejIA = jIA.getEquipe(); @@ -67,6 +67,20 @@ public class ControleurIA { } return res; } + + public static List getAmisJoueurs(JoueurVirtuel jIA, List joueursLieu) { + List 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 public boolean devoilerIALoupGarou(JoueurVirtuel jIA, Joueur jAttaquant) { diff --git a/src/main/JoueurVirtuel.java b/src/main/JoueurVirtuel.java index 978e6cc..2858132 100644 --- a/src/main/JoueurVirtuel.java +++ b/src/main/JoueurVirtuel.java @@ -1,4 +1,5 @@ package main; + import java.util.ArrayList; import java.util.List; @@ -6,51 +7,112 @@ import carte.Equipement; import carte.EquipementStat; import effet.Effet; - public class JoueurVirtuel extends Joueur { - - private int nvDifficulte = 1; //possibilite de 1, 2 ou 3 - - public JoueurVirtuel (String name) { + + private int nvDifficulte = 1; // possibilite de 1, 2 ou 3 + + public JoueurVirtuel(String name) { super(name); } - + public Effet choisirEffet(List 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 equips) { List equipstat = trouverEquipStat(equips); - if(equipstat.size()>0) - return equipstat.get((int)Math.floor(Math.random() * equipstat.size())); - return equips.get((int)Math.floor(Math.random() * equips.size())); + if (equipstat.size() > 0) + return equipstat.get((int) Math.floor(Math.random() * equipstat.size())); + return equips.get((int) Math.floor(Math.random() * equips.size())); } - - public List trouverEquipStat(List equips){ + + public List trouverEquipStat(List equips) { List res = new ArrayList<>(); - for(Equipement e : equips) { - if(e instanceof EquipementStat) + for (Equipement e : equips) { + if (e instanceof EquipementStat) res.add(e); } return res; } - - //on choisit les joueurs avec les moins de hp, on ne distingue pas cependant d'amie ou ennemi - public Joueur choisirJoueur(List joueurs) { - Joueur res = joueurs.get(0); - for(int i=1; ijoueurs.get(i).getStat("HP")) - res = joueurs.get(i); + + public Joueur choisirJoueur(List joueurs, Contexte c) { + Joueur res; + switch (c) { + case ATTAQUER: + res = choisirJoueurEnnemi(joueurs); + 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 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 joueurs) { + List resliste; + List 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 joueurs) { + List resliste; + List 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 joueurs) { + List resliste; + List 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() { return nvDifficulte; } - + public void setDifficulte(int i) { nvDifficulte = i; }