Ejemplo n.º 1
0
        /// <summary>
        /// Lit l'ensemble des ordres d'ajustement notés dans les champs d'ordre
        /// (phase d'ajustement uniquement).
        /// </summary>
        /// <returns>Ensemble des ordres d'ajustement donnés pour le tour d'hiver courant.</returns>
        private List <Ajuster> LitAjustements()
        {
            Int32          compteur                = 0;
            Int32          placesDisponibles       = 0;
            String         belligerant             = null;
            List <Ajuster> ordresAjustements       = new List <Ajuster>();
            List <Ajuster> congediementTemporaires = new List <Ajuster>();

            foreach (ChampOrdre ordre in this.metaChampOrdre.ChampsOrdres)
            {
                Ajuster ordreAjustement = ordre.RetourneAjustement();
                congediementTemporaires.Add(ordreAjustement);
                if (ordre.NomBelligerant != belligerant)
                {
                    this.TraqueUnitesSuperfetatoires(compteur, placesDisponibles, congediementTemporaires, ordresAjustements);

                    congediementTemporaires.Clear();
                    belligerant = ordre.NomBelligerant;
                    compteur    = 0;
                    String nomCompletBelligerant = Convertisseurs.DepuisEBelligerantAbrege(ordre.NomBelligerant).ToString();
                    placesDisponibles = this.nombreCentres[nomCompletBelligerant] - this.nombreUnites[nomCompletBelligerant];
                }

                if (((ordreAjustement.Recrutement == EAjustement.Recrutement) && (compteur < placesDisponibles)) ||
                    (ordreAjustement.Recrutement == EAjustement.Congédiement))
                {
                    ordresAjustements.Add(ordreAjustement);
                    compteur++;
                }
            }

            this.TraqueUnitesSuperfetatoires(compteur, placesDisponibles, congediementTemporaires, ordresAjustements);
            return(ordresAjustements);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Retourne l'ordre d'ajustement associé au contrôle.
        /// </summary>
        /// <returns>Ordre d'ajustement associé au contrôle.</returns>
        public Ajuster RetourneAjustement()
        {
            EUnite       unite;
            EAjustement  ajustement;
            String       nomRegion   = this.region.Text;
            EBelligerant belligerant = Convertisseurs.DepuisEBelligerantAbrege(this.Belligerant.Text);

            if (this.comboBox.Visible == true)
            {
                String recrutement = this.comboBox.Text;
                if (recrutement != "")
                {
                    unite      = Convertisseurs.VersEUnite(recrutement);
                    ajustement = EAjustement.Recrutement;
                }
                else
                {
                    unite      = EUnite.Aucune;
                    ajustement = EAjustement.Aucun;
                }
            }
            else
            {
                unite = Convertisseurs.DepuisEUniteAbrege(this.Unite.Text);
                if (this.Ordre.Text == "*")
                {
                    ajustement = EAjustement.Congédiement;
                }
                else
                {
                    ajustement = EAjustement.Aucun;
                }
            }

            Ajuster ordre = new Ajuster(ajustement, unite, belligerant, nomRegion);

            return(ordre);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Traque les unités maintenues illégalement durant l'hiver, et force leur congédiement.
 /// </summary>
 /// <param name="compteur">Nombre d'unités congédiées ce tour (si des congédiements sont nécessaires).</param>
 /// <param name="placesDisponibles">Différence entre le nombre de centres et le nombre d'unités.</param>
 /// <param name="congediementTemporaires">Ensemble des ordres d'ajustement potentiels pour le belligérant courant.</param>
 /// <param name="ordresAjustements">Ensemble des ordres d'ajustement pour le tour.</param>
 private void TraqueUnitesSuperfetatoires(
     Int32 compteur,
     Int32 placesDisponibles,
     List <Ajuster> congediementTemporaires,
     List <Ajuster> ordresAjustements)
 {
     if ((placesDisponibles < 0) && (compteur < Math.Abs(placesDisponibles)))
     {
         foreach (Ajuster ordreCongediement in congediementTemporaires)
         {
             if ((ordreCongediement.Recrutement != EAjustement.Congédiement) &&
                 (compteur < Math.Abs(placesDisponibles)))
             {
                 Ajuster nouveauCongediement = new Ajuster(
                     EAjustement.Congédiement,
                     ordreCongediement.Unite,
                     ordreCongediement.Belligerant,
                     ordreCongediement.Region);
                 ordresAjustements.Add(nouveauCongediement);
                 compteur++;
             }
         }
     }
 }