/// <summary> /// Retourne le nb d'ennemi que l'on peut éliminer dans un étage par rapport à un plan donné /// </summary> private int VerifierNbEnnemisEtage(Etage etg, PlanTraitement plan) { plan.RunsPossibles = new List <Etage>() { etg }; return(GenererDicoEtageNbEnnemis(plan).First().Value); }
/// <summary> /// Algorithme de traitement au plus grand nombre (L'étage avec le plus grand nombre de cible visé est sélectionné à chaque boucle) /// </summary> private ResultatTraitement AlgoAuPlusGrandNombre(PlanTraitement plan) { var runRealisees = new Dictionary <Etage, int>(); while (!plan.EnnemisAElliminer.All(w => w.Value == 0)) { // Création du tableau des (Etage/NbEnnemis) var etageQteEnnemis = new Dictionary <Etage, int>(); foreach (Etage etg in plan.RunsPossibles) { var ennemisAElliminerTempo = new Dictionary <E_NomEnnemiSucces, uint>(plan.EnnemisAElliminer); etageQteEnnemis.Add(etg, 0); foreach (Ennemi e in etg.ObtenirTousLesEnnemis()) { if (ennemisAElliminerTempo.ContainsKey(e.TitreSucces) && ennemisAElliminerTempo[e.TitreSucces] > 0) { etageQteEnnemis[etg]++; ennemisAElliminerTempo[e.TitreSucces]--; } } } // Choix de l'étage var etageSelectionne = etageQteEnnemis.OrderByDescending(f => f.Value).First().Key; // Réalisation de l'étage if (runRealisees.ContainsKey(etageSelectionne)) { runRealisees[etageSelectionne]++; } else { runRealisees.Add(etageSelectionne, 1); } foreach (Ennemi e in etageSelectionne.ObtenirTousLesEnnemis()) { if (plan.EnnemisAElliminer.ContainsKey(e.TitreSucces) && plan.EnnemisAElliminer[e.TitreSucces] > 0) { plan.EnnemisAElliminer[e.TitreSucces]--; } } } // Inscription des informations dans les résultats var monResultat = new ResultatTraitement { MesResultats = new List <string>() }; foreach (var run in runRealisees.OrderByDescending(f => f.Value)) { monResultat.MesResultats.Add($"{run.Value} run(s) sur l'étage {run.Key.Numero} en difficulté {run.Key.Difficulte.ToString()}"); } return(monResultat); }
/// <summary> /// Algorithme de traitement au plus grand nombre (L'étage avec le plus grand nombre de cible visé est sélectionné à chaque boucle) => et ce de manière répétée /// </summary> private List <MaxTargetNumberSimulationWorker> AlgoAuPlusGrandNombre2(PlanTraitement plan) { // Création du tableau des (Etage/NbEnnemis) var etageNbEnnemis = GenererDicoEtageNbEnnemis(plan); // Sélection des étages avec le plus grand nombre var nbEnnemisMax = etageNbEnnemis.OrderByDescending(f => f.Value).First().Value; foreach (var etg in etageNbEnnemis.Where(f => f.Value == nbEnnemisMax || f.Value == nbEnnemisMax - 1)) { var monScenario = new MaxTargetNumberSimulationWorker(plan.EnnemisAElliminer, etg.Key, nbEnnemisMax); GenererScenarii(monScenario); } return(MesScenarii); }
public MaxTargetNumberSimulationWorker(Dictionary <E_NomEnnemiSucces, uint> ennemisAElliminer, Etage etageDeDepart, int nbEnnemisParRun, PlanTraitement lePlan = null) { EnnemisAElliminer = ennemisAElliminer.ToDictionary(x => x.Key, x => x.Value); NbEnnemisParRun = nbEnnemisParRun; Objectifs = new Dictionary <Etage, int> { { new Etage(etageDeDepart.Difficulte, etageDeDepart.MesVagues, etageDeDepart.Numero, etageDeDepart.NomZone), 0 } }; EtageActuel = new Etage(etageDeDepart.Difficulte, etageDeDepart.MesVagues, etageDeDepart.Numero, etageDeDepart.NomZone); PlanAssocie = lePlan == null ? null : new PlanTraitement() { Algorithme = lePlan.Algorithme, EnnemisAElliminer = lePlan.EnnemisAElliminer.ToDictionary(x => x.Key, x => x.Value), RunsPossibles = lePlan.RunsPossibles.ToList() }; }
/// <summary> /// Génére un dictionnaire des (Etage/NbEnnemis) par rapport à un plan donné /// </summary> private Dictionary <Etage, int> GenererDicoEtageNbEnnemis(PlanTraitement plan) { // Création du tableau des (Etage/NbEnnemis) var etageNbEnnemis = new Dictionary <Etage, int>(); foreach (Etage etg in plan.RunsPossibles) { var ennemisAElliminerTempo = new Dictionary <E_NomEnnemiSucces, uint>(plan.EnnemisAElliminer); etageNbEnnemis.Add(etg, 0); foreach (Ennemi e in etg.ObtenirTousLesEnnemis()) { if (ennemisAElliminerTempo.ContainsKey(e.TitreSucces) && ennemisAElliminerTempo[e.TitreSucces] > 0) { etageNbEnnemis[etg]++; ennemisAElliminerTempo[e.TitreSucces]--; } } } return(etageNbEnnemis); }
public AlgorithmeHandler(PlanTraitement lePlan) { MonPlan = lePlan; MesScenarii = new List <MaxTargetNumberSimulationWorker>(); }
public AlgoMaxTargetNumberPerEnemiFactory(PlanTraitement lePlan) { PlanGeneral = lePlan; Scenarii = new List <AlgoMaxTargetNumberPerEnemiSimulationWorker>(); }
public AlgoEmpiricFactory(PlanTraitement lePlan) { PlanGeneral = lePlan; Scenarii = new List <EmpiricSimulationWorker>(); }