Beispiel #1
0
 /// <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);
 }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        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()
            };
        }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
 public AlgorithmeHandler(PlanTraitement lePlan)
 {
     MonPlan     = lePlan;
     MesScenarii = new List <MaxTargetNumberSimulationWorker>();
 }
Beispiel #7
0
 public AlgoMaxTargetNumberPerEnemiFactory(PlanTraitement lePlan)
 {
     PlanGeneral = lePlan;
     Scenarii    = new List <AlgoMaxTargetNumberPerEnemiSimulationWorker>();
 }
Beispiel #8
0
 public AlgoEmpiricFactory(PlanTraitement lePlan)
 {
     PlanGeneral = lePlan;
     Scenarii    = new List <EmpiricSimulationWorker>();
 }