/// <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); }
private void GenererScenarii(MaxTargetNumberSimulationWorker scenar) { while (VerifierNbEnnemisEtage( scenar.EtageActuel, new PlanTraitement() { EnnemisAElliminer = scenar.EnnemisAElliminer, RunsPossibles = MonPlan.RunsPossibles }) == scenar.NbEnnemisParRun) { scenar.Objectifs[scenar.EtageActuel]++; foreach (Ennemi e in scenar.EtageActuel.ObtenirTousLesEnnemis()) { if (scenar.EnnemisAElliminer.ContainsKey(e.TitreSucces) && scenar.EnnemisAElliminer[e.TitreSucces] > 0) { scenar.EnnemisAElliminer[e.TitreSucces]--; } } } if (scenar.IsTermine()) { MesScenarii.Add(scenar); } else { // Création du tableau des (Etage/NbEnnemis) var etageNbEnnemis = GenererDicoEtageNbEnnemis(new PlanTraitement() { EnnemisAElliminer = scenar.EnnemisAElliminer, RunsPossibles = MonPlan.RunsPossibles }); // 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)) { //var monScenario = new Scenario(plan.EnnemisAElliminer, etg.Key, nbEnnemisMax); if (!scenar.Objectifs.ContainsKey(etg.Key)) { scenar.Objectifs.Add(etg.Key, 0); } scenar.EtageActuel = etg.Key; scenar.NbEnnemisParRun = nbEnnemisMax; GenererScenarii(scenar); } } }