From ccd03d7e0da0d3f7e82cfc728f7ed0589d293fa2 Mon Sep 17 00:00:00 2001 From: Guillaume LEFEVRE-- CRIME <guillaume.lefevre---crime@etu.univ-nantes.fr> Date: Wed, 4 Dec 2024 22:20:11 +0100 Subject: [PATCH 1/6] refactor(Caracteristique): Transformer en Enum MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les caractéristique deviennent un ENUM pour les noms dans l'objectif d'avoir des moyens plus fiables de représenter les caractéristiques plutot que des strings. Le stockage des valeurs est alors délégué aux classes utilisant les caractéristiques, les commits suivants s'occuperont d'implémenter ces systemes et de mettre à jour les accès aux Caracteristiques --- src/cmisport/Caracteristique.java | 128 +++++++++--------------------- 1 file changed, 39 insertions(+), 89 deletions(-) diff --git a/src/cmisport/Caracteristique.java b/src/cmisport/Caracteristique.java index 781a00e..645d868 100644 --- a/src/cmisport/Caracteristique.java +++ b/src/cmisport/Caracteristique.java @@ -3,113 +3,63 @@ package cmisport; import java.util.ArrayList; /** - * Classe stockant les noms et valeurs d'une caractéristique. + * Enum contenant toutes les caractéristiques. */ -public class Caracteristique{ +public enum Caracteristique { + + FORCE("Force"), + ENDURANCE("Endurance"), + AGILITE("Agilité"), + SOUPLESSE("Souplesse"), + APPUIS("Appuis"), + MENTAL("Mental"), + TAILLE("Taille"); + /** + * Constructeur qui rempli le {@link #nom}. + * @param nom Le nom de la caractéristique qui sera stocké dans {@link #nom}. + */ + private Caracteristique(String nom){ + this.nom = nom; + } + + /** * Le nom de la caractéristique + * @hidden * Pour les {@link Athlete}, cela correspondra tout simplement à une caractéristique. * Pour les {@link Coach}, cela correspondra à la capacité au coach d'entraîner telle caractéristique. * Pour les {@link Sport}, cela correspondra au coefficient de la caractéristique pour tel sport. */ - private String nom; + private final String nom; /** - * La valeur de la caractéristique - * Cela correspondra à différentes choses en fonction des classes. - * Dans la classe {@link Athlete}, cela définira le niveau de l'athlète sur cette caractéristique. - * Dans la classe {@link Coach}, cela définira sa capacité à améliorer la capacité corresondante pour les {@link Athlete}. - * Dans la classe {@link Sport}, cela définir le coefficient, et donc l'importance de cette caractéristique pour tel sport. + * Génére une liste de {@link Caracteristique} contenant toutes les caractéristiques. + * @return La liste de {@link Caracteristique} avec les noms remplis et toutes les valeurs mises à 0. */ - private double valeur; + public static ArrayList<Caracteristique> genererCaracteristiquesVides() { + ArrayList<Caracteristique> caracteristiques = new ArrayList<>(); + + for (Caracteristique c : Caracteristique.values()) { + caracteristiques.add(c); + } - /** - * Constante stockant la valeur max d'une caracteristique pout un {@link cmisport.Humains.Athlete}. - */ - public static final int VALEUR_MAX_ATHLETE = 100; + return caracteristiques; + } - /** - * Constructeur qui remplit les attibuts avec les valeurs entrées en paramètre. - * @param n Le nom de la caracteristique. - * @param v La valeur de la caractéristique. + /** + * Overriding de la méthode générique toString permettant de visualiser le nom d'une caractéristique. + * @return la chaine de caractères permettant l'affichage */ - public Caracteristique(String n, Number v){ - this.nom = n; - this.valeur = (double)v; - } + public String toString() { + return this.nom; + } /** * Getter de l'attribut nom - * @return nom le nom de la caractéristique - */ + * @return nom le nom de la caractéristiques + */ public String getNom(){ return nom; } - /** - * Constructeur qui rempli le {@link #nom} et fixe la {@link #valeur} de la caractéristique à 0. - * @param nom Le nom de la caractéristique qui sera stocké dans {@link #nom}. - */ - public Caracteristique(String nom){ - this.nom = nom; - this.valeur = 0; - } - - /** - * Génére une liste de {@link Caracteristique} contenant les caractéristiques que les athlètes auront, les {@link #nom} sont remplis et toutes les {@link #valeur} mises à 0. - * @return La liste de {@link Caracteristique} avec les noms remplis et toutes les valeurs mises à 0. - */ - public static ArrayList<Caracteristique> genererCaracteristiquesVides(){ - ArrayList<Caracteristique> caracteristiques = new ArrayList<Caracteristique>(); - - caracteristiques.add(new Caracteristique("Force")); - caracteristiques.add(new Caracteristique("Endurance")); - caracteristiques.add(new Caracteristique("Agilité")); - caracteristiques.add(new Caracteristique("Souplesse")); - caracteristiques.add(new Caracteristique("Appuis")); - caracteristiques.add(new Caracteristique("Appuis")); - caracteristiques.add(new Caracteristique("Mental")); - caracteristiques.add(new Caracteristique("Taille")); - - return caracteristiques; - - } - - /** - * Getter de l'attribut valeur - * @return valeur la valeur de la caractéristique - */ - public double getValeur(){ - return valeur; - } - - /** - * Setter de l'attribut nom - * @param n Le nom que prendre la caractéristique après modification - */ - public void setNom(String n){ - nom = n; - } - - /** - * Setter de l'attribut valeur - * @param v La nouvelle valeur de la caractéristique - */ - public void setValeur(double v){ - valeur = v; - } - - /** - * Overriding de la méthode générique toString permettant de visualiser une caractéristique. - * @return sb.toString() la chaine de caractères permettant l'affichage - */ - @Override - public String toString(){ - StringBuilder sb = new StringBuilder(); - sb.append(this.nom); - sb.append(": "); - sb.append(this.valeur); - return sb.toString(); - } - } -- GitLab From b41531989b71b6d4bc082116dd2bfd32a2eaaf0e Mon Sep 17 00:00:00 2001 From: Guillaume LEFEVRE-- CRIME <guillaume.lefevre---crime@etu.univ-nantes.fr> Date: Wed, 4 Dec 2024 22:37:11 +0100 Subject: [PATCH 2/6] Caracteristique: genererMapCaracteristiqueNulles --- src/cmisport/Caracteristique.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/cmisport/Caracteristique.java b/src/cmisport/Caracteristique.java index 645d868..96a5a89 100644 --- a/src/cmisport/Caracteristique.java +++ b/src/cmisport/Caracteristique.java @@ -1,6 +1,8 @@ package cmisport; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; /** * Enum contenant toutes les caractéristiques. @@ -46,6 +48,21 @@ public enum Caracteristique { return caracteristiques; } + /** + * Fonction utitlitaire retournant une {@link HashMap} de toutes les {@link Caracteristique}, avec des valeurs nulles. + * @return {@link HashMap} de {@link Caracteristique} avec pour valeur un double nul. + */ + public static Map<Caracteristique, Double> genererMapCaracteristiqueNulles(){ + ArrayList<Caracteristique> caracteristiques = Caracteristique.genererCaracteristiquesVides(); + Map<Caracteristique, Double> MapCaracteristiqueNulles = new HashMap<>(); + + for (Caracteristique c : caracteristiques) { + MapCaracteristiqueNulles.put(c, 0.0); + } + + return MapCaracteristiqueNulles; + } + /** * Overriding de la méthode générique toString permettant de visualiser le nom d'une caractéristique. * @return la chaine de caractères permettant l'affichage -- GitLab From c3e0618ce97342643aaa83eda6655ec2beb16c4d Mon Sep 17 00:00:00 2001 From: Guillaume LEFEVRE-- CRIME <guillaume.lefevre---crime@etu.univ-nantes.fr> Date: Thu, 5 Dec 2024 18:33:33 +0100 Subject: [PATCH 3/6] Humains+Sport+Match : utiliser nouvelle Caracteristique MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tous les fichiers affectés par le changement de la gestion des caractéstiques ont été mis à jours. Quelques fonctions utilitaires ont été ajoutée quand nécéssaire pour faciliter le tout. --- src/cmisport/Caracteristique.java | 4 +- src/cmisport/Humains/Athlete.java | 95 ++++++++++++++++++------------- src/cmisport/Humains/Coach.java | 45 ++++++++------- src/cmisport/Humains/Kine.java | 60 +++++++++---------- src/cmisport/Humains/Medecin.java | 31 +++++----- src/cmisport/Humains/Psy.java | 7 ++- src/cmisport/Humains/Staff.java | 17 +++--- src/cmisport/Match.java | 33 ++++++----- src/cmisport/Sport.java | 29 +++++----- 9 files changed, 174 insertions(+), 147 deletions(-) diff --git a/src/cmisport/Caracteristique.java b/src/cmisport/Caracteristique.java index 96a5a89..ba09b26 100644 --- a/src/cmisport/Caracteristique.java +++ b/src/cmisport/Caracteristique.java @@ -52,9 +52,9 @@ public enum Caracteristique { * Fonction utitlitaire retournant une {@link HashMap} de toutes les {@link Caracteristique}, avec des valeurs nulles. * @return {@link HashMap} de {@link Caracteristique} avec pour valeur un double nul. */ - public static Map<Caracteristique, Double> genererMapCaracteristiqueNulles(){ + public static Map<Caracteristique, Number> genererMapCaracteristiqueNulles(){ ArrayList<Caracteristique> caracteristiques = Caracteristique.genererCaracteristiquesVides(); - Map<Caracteristique, Double> MapCaracteristiqueNulles = new HashMap<>(); + Map<Caracteristique, Number> MapCaracteristiqueNulles = new HashMap<>(); for (Caracteristique c : caracteristiques) { MapCaracteristiqueNulles.put(c, 0.0); diff --git a/src/cmisport/Humains/Athlete.java b/src/cmisport/Humains/Athlete.java index 8ead247..496fcd5 100644 --- a/src/cmisport/Humains/Athlete.java +++ b/src/cmisport/Humains/Athlete.java @@ -2,26 +2,32 @@ package cmisport.Humains; import java.util.ArrayList; import java.util.ListIterator; +import java.util.Map; import java.util.Random; import cmisport.Caracteristique; import cmisport.Reputation; public class Athlete extends Humain { - private boolean estBlesse; - private boolean estCasse; - - private ArrayList<Caracteristique> caracteristiques; + private boolean estBlesse; + private boolean estCasse; + + /** + * Constante stockant la valeur max d'une caracteristique pout un {@link cmisport.Humains.Athlete}. + */ + public static final int VALEUR_MAX_CARACTERISTIQUE = 100; + + private Map<Caracteristique, Number> caracteristiquesValeurs; /** * Méthode privée utilitaire qui permet d'initaliser les différents attributs de atlhètes et de calculer la {@link Humain#reputation} de celui çi. * Elle est à appeller depuis les constructeurs. * @param cara La liste de caractéristiques que l'athlète aura. */ - private void initialiserAthlete(ArrayList<Caracteristique> cara){ + private void initialiserAthlete(Map<Caracteristique, Number> cara){ this.estBlesse = false; this.estCasse = false; - this.caracteristiques = cara; + this.caracteristiquesValeurs = cara; this.calculerReputation(); } @@ -30,22 +36,22 @@ public class Athlete extends Humain { * <p><ul> * <li>Initialiser {@link #estCasse} et {@link #estBlesse} à faux, * <li>Calculer et stocker la {@link Humain#reputation} de l'athlète en fonction des caractéristiques fournies. - * <li>Enregistrer les {@link #caracteristiques} en fonction du paramètre. + * <li>Enregistrer les {@link #caracteristiquesValeurs} en fonction du paramètre. * </ul> * * @param cara La liste de {@link Caracteristique} que l'athlète aura */ - public Athlete(ArrayList<Caracteristique> cara){ + public Athlete(Map<Caracteristique, Number> cara){ super(); this.initialiserAthlete(cara); } /** - * Permet de donner à nom à l'{@link Humain} que l'atlhète étend puis appelle {@link #Athlete(ArrayList)} + * Permet de donner à nom à l'{@link Humain} que l'atlhète étend et de fournir les caractéristiques et leurs valeurs. * @param nom Le nom que aura l'Humain * @param cara La liste de caractéristiques que l'athlète aura. */ - public Athlete(String nom, ArrayList<Caracteristique> cara){ + public Athlete(String nom, Map<Caracteristique, Number> cara){ super(nom); this.initialiserAthlete(cara); } @@ -53,27 +59,27 @@ public class Athlete extends Humain { /** * Constructeur générant un athlète avec un nom aléatoire et des caractéristiques dont la somme des valeurs vaut le nombre de points passés en paramètres. * - * @param nbPoints La somme de toute les {@link Caracteristique#valeur} des {@link #caracteristiques} de l'athlete. + * @param nbPoints La somme de toutes les valeurs des {@link #caracteristiquesValeurs} de l'athlete. */ public Athlete(int nbPoints){ super(); - ArrayList<Caracteristique> caracteristiques = this.genererCaracteristiquesAleatoires(nbPoints); - this.initialiserAthlete(caracteristiques); + Map<Caracteristique, Number> caracteristiquesValeurs = this.genererCaracteristiquesAleatoires(nbPoints); + this.initialiserAthlete(caracteristiquesValeurs); } /** * Méthode générant les noms et des valeurs aléatoires pour les caracteristiques dont la somme vaut le nombre de points passés en paramètres. * Les valeurs aléatoires sont générée selon une distribution gaussienne de déviation 0.3; * - * @param nbPoints La somme de toute les {@link Caracteristique#valeur} des {@link #caracteristiques} de l'athlete. + * @param nbPoints La somme de toute les {@link Caracteristique#valeur} des {@link #caracteristiquesValeurs} de l'athlete. * @return Une liste de {@link Caracteristique} avec des valeurs aléatoires. */ - private ArrayList<Caracteristique> genererCaracteristiquesAleatoires(int nbPoints){ + private Map<Caracteristique, Number> genererCaracteristiquesAleatoires(int nbPoints) { Random random = new Random(); ArrayList<Caracteristique> caracteristiques = Caracteristique.genererCaracteristiquesVides(); - ListIterator<Caracteristique> iterator = caracteristiques.listIterator(); + Map<Caracteristique, Number> caracteristiquesMap = Caracteristique.genererMapCaracteristiqueNulles(); - // Vérification que le tous les points sont attribuables pour ne pas avoir de boucles infinies. + // Vérification que tous les points sont attribuables pour éviter les boucles infinies. if (nbPoints > caracteristiques.size() * 100) { nbPoints = caracteristiques.size() * 100; } @@ -81,23 +87,27 @@ public class Athlete extends Humain { int moyenne = nbPoints / caracteristiques.size(); double deviation = moyenne * 0.3; + ListIterator<Caracteristique> iterator = caracteristiques.listIterator(); + while (nbPoints > 0) { - //Retourner au début si la liste a été complétement parcourue et qu'il reste des points à attribuer. - if (! iterator.hasNext()) { + // Retourner au début si la liste a été complètement parcourue et qu'il reste des points à attribuer. + if (!iterator.hasNext()) { iterator = caracteristiques.listIterator(); } Caracteristique cara = iterator.next(); - int randomValue = (int)(random.nextGaussian()* deviation) + moyenne; - randomValue = Math.max(1, Math.min(randomValue, Caracteristique.VALEUR_MAX_ATHLETE - (int) cara.getValeur())); //Vérification que la valeur est entre 0 et le VALEUR_MAX_ATHLETE. + int randomValue = (int) (random.nextGaussian() * deviation) + moyenne; + randomValue = Math.max(1, Math.min(randomValue, Athlete.VALEUR_MAX_CARACTERISTIQUE)); // S'assurer que la valeur est dans les bornes. randomValue = Math.min(randomValue, nbPoints); // Vérification qu'on ne dépasse pas le nbPoints à attribuer. - cara.setValeur(cara.getValeur() + randomValue); - iterator.set(cara); + // Mettre à jour la valeur de la caractéristique + caracteristiquesMap.put(cara, caracteristiquesMap.get(cara).intValue() + randomValue); + // Réduire les points restants nbPoints -= randomValue; + } - return caracteristiques; + return caracteristiquesMap; } public void seBlesse(){ @@ -108,13 +118,22 @@ public class Athlete extends Humain { this.estCasse = true; } - public double changeCaracteristiqueValue(double e , String n){ - for (int i =0; i < caracteristiques.size(); i++){ - if(caracteristiques.get(i).getNom().equals(n)){ - return caracteristiques.get(i).getValeur() + e; - } - } - return 0; + /** + * Méthode permmettant de changer la valeur d'une caractéristique. + * + * <p>Exemple d'utilisation :</p> + * <pre> + * changeCaracteristiqueValue(Caracteristique.ENDURANCE, 23); + * </pre> + * + * @param cara La caractéristique à modifier. + * @param val La nouvelle valeur pour la caractéristique + */ + public void changeCaracteristiqueValue (Caracteristique cara, int val) { + if (!this.caracteristiquesValeurs.containsKey(cara)){ + throw new IllegalStateException("Caracteristique non présente"); //TODO : Refaire cette exception moche + } + this.caracteristiquesValeurs.put(cara, val); } public boolean isEstBlesse() { @@ -133,24 +152,24 @@ public class Athlete extends Humain { this.estCasse = estCasse; } - public ArrayList<Caracteristique> getCaracteristiques() { - return caracteristiques; + public Map<Caracteristique, Number> getCaracteristiques() { + return caracteristiquesValeurs; } - public void setCaracteristiques(ArrayList<Caracteristique> caracteristiques) { - this.caracteristiques = caracteristiques; + public void setCaracteristiques(Map<Caracteristique, Number> caraVals) { + this.caracteristiquesValeurs = caraVals; } /** - * Méthode calculant, mettant à jour puis retournant la {@link Humain#reputation} d'un {@link Athlete} en fonction de la valeur de ses différentes {@link #caracteristiques}. . + * Méthode calculant, mettant à jour puis retournant la {@link Humain#reputation} d'un {@link Athlete} en fonction de la valeur de ses différentes caractéristiques. . * @return La nouvelle {@link Humain#reputation} de l'athlete. */ @Override public Reputation calculerReputation(){ Reputation newReputation = new Reputation(0); int acc = 0; - for (Caracteristique c : caracteristiques) { - acc += c.getValeur() * 10; + for (Map.Entry<Caracteristique, Number> entry : caracteristiquesValeurs.entrySet()) { + acc += entry.getValue().intValue() * 10; } newReputation.set(acc); this.reputation = newReputation; diff --git a/src/cmisport/Humains/Coach.java b/src/cmisport/Humains/Coach.java index 91f8fa3..acb9169 100644 --- a/src/cmisport/Humains/Coach.java +++ b/src/cmisport/Humains/Coach.java @@ -17,29 +17,30 @@ public class Coach extends Humain { this.reputation = calculerReputation(); } - public void entraine(Athlete a){ - int i; - int j; - for(i = 0; i < a.getCaracteristiques().size(); i++ ){ - for(j = 0; j < this.caracteristiques.size(); j++ ){ - if (this.caracteristiques.get(i).getNom().equals(a.getCaracteristiques().get(j).getNom())){ - a.changeCaracteristiqueValue(this.caracteristiques.get(i).getValeur(), this.caracteristiques.get(i).getNom()); - } - - } - } - - } - - public void entraineEquipe(ArrayList<Athlete> a){ - int i; - if (nbAthleteMax > a.size()){ - for(i =0; i<a.size(); i++){ - entraine(a.get(i)); - } - } - } + //TODO : Bouger ce code dans Staff + //public void entraine(Athlete a){ + // int i; + // int j; + // for(i = 0; i < a.getCaracteristiques().size(); i++ ){ + // for(j = 0; j < this.caracteristiques.size(); j++ ){ + // if (this.caracteristiques.get(i).getNom().equals(a.getCaracteristiques().get(j).getNom())){ + // a.changeCaracteristiqueValue(this.caracteristiques.get(i).getValeur(), this.caracteristiques.get(i).getNom()); + // } + // + // } + // } + // + //} + //public void entraineEquipe(ArrayList<Athlete> a){ + // int i; + // if (nbAthleteMax > a.size()){ + // for(i =0; i<a.size(); i++){ + // entraine(a.get(i)); + // } + // } + //} + // /** * Méthode calculant, mettant à jour puis retournant la {@link Humain#reputation} du coach fonction de la valeur du {@link #nbAthleteMax} qu'il peut entrainer. * @return La nouvelle {@link Humain#reputation} du coach. diff --git a/src/cmisport/Humains/Kine.java b/src/cmisport/Humains/Kine.java index 5719441..06c0a54 100644 --- a/src/cmisport/Humains/Kine.java +++ b/src/cmisport/Humains/Kine.java @@ -3,37 +3,39 @@ import java.time.LocalDate; import cmisport.Reputation; + public class Kine extends Humain { int nbPatientMax; - double capaciteRecup; - @SuppressWarnings("OverridableMethodCallInConstructor") - public Kine(String n , String p , LocalDate d,int nb, double capa){ - super(); - this.capaciteRecup = capa; - this.nbPatientMax = nb; - this.reputation = calculerReputation(); - } - - public void recuperationAthlete(Athlete a){ - for(int i = 0; i < a.getCaracteristiques().size(); i++){ - if(a.getCaracteristiques().get(i).getNom().equals("Recuperation")){ - a.getCaracteristiques().get(i).setValeur(a.getCaracteristiques().get(i).getValeur() + capaciteRecup); - } - } - } - public int getNbPatientMax() { - return nbPatientMax; - } - public void setNbPatientMax(int nbPatientMax) { - this.nbPatientMax = nbPatientMax; - } - public double getCapaciteRecup() { - return capaciteRecup; - } - public void setCapaciteRecup(double capaciteRecup) { - this.capaciteRecup = capaciteRecup; - } - + //TODO : Bouger ce code dans Staff + // double capaciteRecup; + // @SuppressWarnings("OverridableMethodCallInConstructor") + // public Kine(String n , String p , LocalDate d,int nb, double capa){ + // super(); + // this.capaciteRecup = capa; + // this.nbPatientMax = nb; + // this.reputation = calculerReputation(); + // } + // + // public void recuperationAthlete(Athlete a){ + // for(int i = 0; i < a.getCaracteristiques().size(); i++){ + // if(a.getCaracteristiques().get(i).getNom().equals("Recuperation")){ + // a.getCaracteristiques().get(i).setValeur(a.getCaracteristiques().get(i).getValeur() + capaciteRecup); + // } + // } + // } + // public int getNbPatientMax() { + // return nbPatientMax; + // } + // public void setNbPatientMax(int nbPatientMax) { + // this.nbPatientMax = nbPatientMax; + // } + // public double getCapaciteRecup() { + // return capaciteRecup; + // } + // public void setCapaciteRecup(double capaciteRecup) { + // this.capaciteRecup = capaciteRecup; + // } + // /** * Méthode calculant, mettant à jour puis retournant la {@link Humain#reputation} du kiné en fonction de la valeur du {@link #nbPatientMax} qu'il peut soigner à la fois. * @return La nouvelle {@link Humain#reputation} du kiné. diff --git a/src/cmisport/Humains/Medecin.java b/src/cmisport/Humains/Medecin.java index a1a748c..c725d4c 100644 --- a/src/cmisport/Humains/Medecin.java +++ b/src/cmisport/Humains/Medecin.java @@ -4,25 +4,26 @@ import java.time.LocalDate; import cmisport.Reputation; public class Medecin extends Humain { + //TODO : Bouger ce code dans Staff private int nbPatientMax; private double capaciteSoin; @SuppressWarnings("OverridableMethodCallInConstructor") - public Medecin(String n , String p , LocalDate d, Reputation r, int nb, double capa){ - super(); - this.capaciteSoin = capa; - this.nbPatientMax = nb; - this.reputation = calculerReputation(); - } - public void SoinAthlete(Athlete a){ - if (a.isEstBlesse() == true){ - for(int i = 0; i < a.getCaracteristiques().size(); i++){ - if(a.getCaracteristiques().get(i).getNom().equals("Soin")){ - a.getCaracteristiques().get(i).setValeur(a.getCaracteristiques().get(i).getValeur() + capaciteSoin); - } - } - } - } + //public Medecin(String n , String p , LocalDate d, Reputation r, int nb, double capa){ + // super(); + // this.capaciteSoin = capa; + // this.nbPatientMax = nb; + // this.reputation = calculerReputation(); + // } + // public void SoinAthlete(Athlete a){ + // if (a.isEstBlesse() == true){ + // for(int i = 0; i < a.getCaracteristiques().size(); i++){ + // if(a.getCaracteristiques().get(i).getNom().equals("Soin")){ + // a.getCaracteristiques().get(i).setValeur(a.getCaracteristiques().get(i).getValeur() + capaciteSoin); + // } + // } + // } + // } public int getNbPatientMax() { return nbPatientMax; } diff --git a/src/cmisport/Humains/Psy.java b/src/cmisport/Humains/Psy.java index 405a178..415fd51 100644 --- a/src/cmisport/Humains/Psy.java +++ b/src/cmisport/Humains/Psy.java @@ -1,6 +1,7 @@ package cmisport.Humains; import java.time.LocalDate; +import cmisport.Caracteristique; import cmisport.Reputation; public class Psy extends Staff { @@ -11,7 +12,7 @@ public class Psy extends Staff { public void recuperationAthlete(Athlete a){ if (a.isEstCasse() == true){ - modifAthlete(a, "Mental"); + modifAthlete(a, Caracteristique.MENTAL); } } public int getNbPatientMax() { @@ -21,10 +22,10 @@ public class Psy extends Staff { this.nbAthleteMax = nbPatientMax; } public double getCapaciteSoinMental() { - return capacite; + return effet.doubleValue(); } public void setCapaciteSoinMental(double capaciteSoinMental) { - this.capacite = capaciteSoinMental; + this.effet = capaciteSoinMental; } /** diff --git a/src/cmisport/Humains/Staff.java b/src/cmisport/Humains/Staff.java index d9c9da3..b9f35cb 100644 --- a/src/cmisport/Humains/Staff.java +++ b/src/cmisport/Humains/Staff.java @@ -5,22 +5,19 @@ import cmisport.Caracteristique; abstract class Staff extends Humain { protected int nbAthleteMax; - protected double capacite; + protected Number effet; - public Staff(String n , String p , LocalDate d, int nA, double capa){ + public Staff(String n , String p , LocalDate d, int nA, double effet){ super(n); nbAthleteMax = nA; - capacite = capa; + this.effet = effet; } - public void modifAthlete(Athlete a, String type){ - for(Caracteristique c : a.getCaracteristiques()){ - if(c.getNom().equals(type)){ - c.setValeur(c.getValeur() + this.capacite); - } - } - } + public void modifAthlete(Athlete a, Caracteristique cara){ + a.changeCaracteristiqueValue(cara, a.getCaracteristiques().get(cara).intValue() + this.effet.intValue()); } +} + diff --git a/src/cmisport/Match.java b/src/cmisport/Match.java index 35768e2..e513bca 100644 --- a/src/cmisport/Match.java +++ b/src/cmisport/Match.java @@ -1,6 +1,6 @@ package cmisport; import cmisport.Humains.Athlete; -import java.util.ArrayList; +import java.util.Map; public class Match { private Public fans; @@ -14,19 +14,26 @@ public class Match { sport = s; fans = new Public(e1.getClub().getReputation().get(), e2.getClub().getReputation().get()); } + + /** + * Renvoie la somme des caractéristique des {@link Athlete} en fonction des coefficients du {@link #sport} pour l'équipe passée en paramètre. + * @param equipe L'{@link Equipe} dont il faut calculer la somme pondérée des caractéstiques des athlètes. + * @return La somme pondérée des caractéristiques des athletes de l'équipe. + */ + private double getSommeCaracteristiquePonderee(Equipe equipe){ + double sommeCarateristique = 0; + for (Athlete athlete : equipe.getAthletes()) { + for (Map.Entry<Caracteristique, Number> caraVal : athlete.getCaracteristiques().entrySet()) { + sommeCarateristique += caraVal.getValue().doubleValue() * sport.getCoefficients().get(caraVal.getKey()).doubleValue(); + } + } + return sommeCarateristique; + } private boolean equipe1Gagne() { - double sommeCarateristiqueE1 = 0; - double sommeCarateristiqueE2 = 0; - for (int i=0; i<sport.getNbJoueursMax(); i++) { // parcours de tout les athletes - for (int j=0; j<equipe1.getAthletes().get(0).getCaracteristiques().size(); j++) { //parcours de toutes les caracteristiques - sommeCarateristiqueE1 += sport.getCoefficients().get(j).getValeur() * equipe1.getAthletes().get(i).getCaracteristiques().get(j).getValeur(); // caractéristique de l'athlete en fonction du coef du sport - sommeCarateristiqueE2 += sport.getCoefficients().get(j).getValeur() * equipe2.getAthletes().get(i).getCaracteristiques().get(j).getValeur(); - } - } - double sommeFinaleE1 = sommeCarateristiqueE1 + fans.getEncouragementE1(); - double sommeFinaleE2 = sommeCarateristiqueE2 + fans.getProportionE2(); - return sommeFinaleE1 > sommeFinaleE2; + double sommeCarateristiqueE1 = this.getSommeCaracteristiquePonderee(equipe1) + this.fans.getProportionE1(); + double sommeCarateristiqueE2 = this.getSommeCaracteristiquePonderee(equipe2) + this.fans.getProportionE2(); + return sommeCarateristiqueE1 > sommeCarateristiqueE2; //TODO : Gérer le cas ou il y a égalité } @@ -59,4 +66,4 @@ public class Match { public Sport getSport() { return this.sport; } -} \ No newline at end of file +} diff --git a/src/cmisport/Sport.java b/src/cmisport/Sport.java index 53bf86a..60642e7 100644 --- a/src/cmisport/Sport.java +++ b/src/cmisport/Sport.java @@ -1,27 +1,25 @@ package cmisport; -import java.util.ArrayList; import java.util.List; +import java.util.ListIterator; +import java.util.Map; public class Sport{ private String nom; private int nbJoueursMax; - private ArrayList<Caracteristique> coefficients; + private Map<Caracteristique, Number> coefficients; private Categorie categorie; + //TODO : refaire la logique du constructeur pour avoir un meilleur systeme qu'une liste à ordonner pour le paramètre c. public Sport(String n, int nbJ, List<Number> c, Categorie cat){ nom = n; nbJoueursMax = nbJ; categorie = cat; - this.coefficients = new ArrayList<>(); - coefficients.add(new Caracteristique("Force", c.get(0))); - coefficients.add(new Caracteristique("Endurance", c.get(1))); - coefficients.add(new Caracteristique("Agilité", c.get(2))); - coefficients.add(new Caracteristique("Souplesse", c.get(3))); - coefficients.add(new Caracteristique("Appuis", c.get(4))); - coefficients.add(new Caracteristique("Mental", c.get(5))); - coefficients.add(new Caracteristique("Taille", c.get(6))); - coefficients.add(new Caracteristique("Coordination", c.get(7))); + this.coefficients = Caracteristique.genererMapCaracteristiqueNulles(); + ListIterator<Number> cIterator = c.listIterator(); + for (Caracteristique cara : coefficients.keySet()) { + coefficients.put(cara, cIterator.next()); + } } public String getNom(){ @@ -30,7 +28,7 @@ public class Sport{ public double getNbJoueursMax(){ return nbJoueursMax; } - public ArrayList<Caracteristique> getCoefficients(){ + public Map<Caracteristique, Number> getCoefficients(){ return coefficients; } public void setNom(String newName){ @@ -39,17 +37,18 @@ public class Sport{ public void setNbJoueursMax(int n){ nbJoueursMax = n; } - public void setCaracteristiques(ArrayList<Caracteristique> c){ + public void setCaracteristiques(Map<Caracteristique, Number> c){ coefficients = c; } + @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("Sport: ").append(nom); sb.append("\nNombre maximum de joueurs: ").append(nbJoueursMax); sb.append("\nCoefficients: "); - for (Caracteristique c : coefficients) { - sb.append("\n - ").append(c.toString()); + for (Map.Entry<Caracteristique, Number> caraVal : coefficients.entrySet()) { + sb.append("\n - ").append(caraVal.toString()); } return sb.toString(); } -- GitLab From 9368204f1d8d4ab01134aab580716860a9871f62 Mon Sep 17 00:00:00 2001 From: Guillaume LEFEVRE-- CRIME <guillaume.lefevre---crime@etu.univ-nantes.fr> Date: Fri, 6 Dec 2024 09:08:30 +0100 Subject: [PATCH 4/6] Ajout toString() + doc --- src/cmisport/Humains/Athlete.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/cmisport/Humains/Athlete.java b/src/cmisport/Humains/Athlete.java index 496fcd5..464b79c 100644 --- a/src/cmisport/Humains/Athlete.java +++ b/src/cmisport/Humains/Athlete.java @@ -17,6 +17,9 @@ public class Athlete extends Humain { */ public static final int VALEUR_MAX_CARACTERISTIQUE = 100; + /** + * Dictionnaire stockant chaque caractéristique de l'athlete et les valeurs qui y sont associés. + */ private Map<Caracteristique, Number> caracteristiquesValeurs; /** @@ -176,4 +179,15 @@ public class Athlete extends Humain { return newReputation; } + /** + */ + @Override + public String toString(){ + StringBuilder sb = new StringBuilder(); + sb.append("Nom : ").append(this.getNom()).append(" | "); + sb.append("Réputation : ").append(this.getReputation()).append(" | "); + sb.append("Caracteristiques : ").append(this.getCaracteristiques().toString()); + return sb.toString(); + } + } -- GitLab From 1ddc06e04d8b4d13b64f8ddcd7a7487c1fb34b86 Mon Sep 17 00:00:00 2001 From: Guillaume LEFEVRE-- CRIME <guillaume.lefevre---crime@etu.univ-nantes.fr> Date: Fri, 6 Dec 2024 09:08:37 +0100 Subject: [PATCH 5/6] =?UTF-8?q?Ajout=20test=20tr=C3=A8s=20basique=20athlet?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cmisport/Application.java | 1 + src/cmisport/Test.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 src/cmisport/Test.java diff --git a/src/cmisport/Application.java b/src/cmisport/Application.java index fcddd1a..a6da2e0 100644 --- a/src/cmisport/Application.java +++ b/src/cmisport/Application.java @@ -50,5 +50,6 @@ class Application{ //} //System.out.println(sports.get(0)); System.out.println("OPTIMMMMMMMM <3"); + Test.testerAthlete(); } } diff --git a/src/cmisport/Test.java b/src/cmisport/Test.java new file mode 100644 index 0000000..ea517cf --- /dev/null +++ b/src/cmisport/Test.java @@ -0,0 +1,14 @@ +package cmisport; +import java.util.Map; + +import cmisport.Humains.*; + +public class Test { + public static void testerAthlete(){ + Athlete athlete = new Athlete(400); + System.out.println(athlete.toString()); + System.out.println("Changement de force à 12 : "); + athlete.changeCaracteristiqueValue(Caracteristique.FORCE, 12); + System.out.println(athlete.toString()); + } +} -- GitLab From b2786032d35db9ff58e9a871b766ec44c55c547b Mon Sep 17 00:00:00 2001 From: Guillaume LEFEVRE-- CRIME <guillaume.lefevre---crime@etu.univ-nantes.fr> Date: Thu, 5 Dec 2024 19:08:47 +0000 Subject: [PATCH 6/6] refactor(Caracteristique): Transformer en Enum MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les caractéristiques sont maintenant un enum car ce sont des constantes. Les valeurs sont stockées dans les classes les utilisant. Des méthodes utilitaires ont eté ajoutées lorsque c'était judicieux et toutes les classes ont été adaptées à la nouvelle caractéristiques. -- GitLab