/// <summary> /// Change arbitrairement l'allégeance d'une unité sur la carte. /// </summary> /// <param name="identificateurBelligerant">Belligérant prenant possession de l'unité.</param> /// <param name="nomRegion">Nom de la région où l'unité change d'allégeance.</param> /// <param name="carte">Image représentant la carte.</param> /// <param name="outilsGraphiques">Outils graphiques utilisés pour effectuer le dessin.</param> public void ChangeAllegeanceUnite(String identificateurBelligerant, String nomRegion, Image carte, Graphics outilsGraphiques) { if (this.DictionnaireOccupation.Keys.Contains(nomRegion) == true) { EUnite unite = this.DictionnaireOccupation[nomRegion].TypeUnite; EBelligerant belligerantConcerne = Convertisseurs.VersEBelligerant(identificateurBelligerant); this.DictionnaireOccupation[nomRegion].ChangeUnite(unite, belligerantConcerne); Pictogrammes.PlaceUnite(this.DictionnaireRegions[nomRegion], this.DictionnaireOccupation[nomRegion], carte, outilsGraphiques); } else { throw new Exception("L'allégeance et/ou le nom de la région sont mal définis."); } }
/// <summary> /// Supprime arbitrairement une unité de la carte. /// </summary> /// <param name="nomRegion">Nom de la région dans laquelle supprimer une unité.</param> /// <param name="carte">Image représentant la carte.</param> /// <param name="outilsGraphiques">Outils graphiques utilisés pour effectuer le dessin.</param> public void SupprimeUnite(String nomRegion, Image carte, Graphics outilsGraphiques) { if (this.DictionnaireOccupation.Keys.Contains(nomRegion) == true) { this.DictionnaireOccupation[nomRegion].DetruitOuAbandonne(); Pictogrammes.PlaceUnite( this.DictionnaireRegions[nomRegion], this.DictionnaireOccupation[nomRegion], carte, outilsGraphiques); } else { throw new Exception("La région n'existe pas, ou est mal définie."); } }
/// <summary> /// Initialise l'image de la carte. /// </summary> /// <param name="carte">Image actuelle de la carte.</param> public void InitialiseCarte(Image carte, Graphics outilsGraphiques) { foreach (String nomRegion in this.ListeNomsRegions) { /// On fait deux fois les tests (y a-t-il un centre ? y a-t-il une unité ?), puisqu'ils sont aussi faits /// dans les fonctions de Pictogrammes. Mais cela permet de mieux saisir ce que l'on fait... GRegion regionActuelle = this.DictionnaireRegions[nomRegion]; OccupationRegion occupation = this.DictionnaireOccupation[nomRegion]; if (regionActuelle.EstUnCentre == true) { Pictogrammes.AffilieCentre(regionActuelle as Centre, occupation as OccupationCentre, carte, outilsGraphiques); } if (occupation.TypeUnite != EUnite.Aucune) { Pictogrammes.PlaceUnite(regionActuelle, occupation, carte, outilsGraphiques); } } }
/// <summary> /// Finit le tour en cours. /// </summary> /// <param name="retraites">Indique s'il s'agit d'un tour de retraites ou non.</param> /// <param name="ordres">Liste des ordres donnés pour le tour.</param> /// <param name="carte">Image représentant la carte.</param> /// <param name="outilsGraphiques">Outils graphiques utilisés pour effectuer le dessin.</param> public void FinitTour(Boolean retraites, List <OrdreAbstrait> ordres, Image carte, Graphics outilsGraphiques) { ListeOrdres listeOrdres = new ListeOrdres( ordres, this.DictionnaireAdjacence, this.dictionnaireRegions, this.DictionnaireOccupation); List <OrdreAbstrait> ordresValides = listeOrdres.OrdresValides; this.dictionnaireOrdres.EnregistreOrdres(ordresValides, this.DictionnaireOccupation); this.dictionnaireOrdres.AppliqueOrdres(ordresValides); foreach (OrdreRegional ordreRegional in this.dictionnaireOrdres.Dictionnaire.Values) { if (ordreRegional.TypeOrdre != EOrdre.Tenir) { GRegion regionConcerne = this.DictionnaireRegions[ordreRegional.Region]; GRegion regionCiblee = this.DictionnaireRegions[ordreRegional.RegionCiblee]; switch (ordreRegional.TypeOrdre) { case EOrdre.AttaqueReussie: Pictogrammes.TraceAttaque(regionConcerne, regionCiblee, ordreRegional.Possesseur, carte, outilsGraphiques); this.IntegreAttaqueReussie(retraites, ordreRegional); break; case EOrdre.AttaqueEchouee: Pictogrammes.TraceAttaqueRatee(regionConcerne, regionCiblee, ordreRegional.Possesseur, carte, outilsGraphiques); break; case EOrdre.Convoi: GRegion regionArrivee = this.DictionnaireRegions[this.dictionnaireOrdres.Dictionnaire[regionCiblee.Nom].RegionCiblee]; Pictogrammes.TraceTransport(regionConcerne, regionCiblee, regionArrivee, ordreRegional.Possesseur, carte, outilsGraphiques); break; case EOrdre.ConvoiCoupe: GRegion regionArriveeBis = this.DictionnaireRegions[this.dictionnaireOrdres.Dictionnaire[regionCiblee.Nom].RegionCiblee]; Pictogrammes.TraceTransportInterrompu(regionConcerne, regionCiblee, regionArriveeBis, ordreRegional.Possesseur, carte, outilsGraphiques); break; case EOrdre.SoutienDefensif: Pictogrammes.TraceSoutienDefensif(regionConcerne, regionCiblee, ordreRegional.Possesseur, carte, outilsGraphiques); break; case EOrdre.SoutienDefensifCoupe: Pictogrammes.TraceSoutienDefensifCoupe(regionConcerne, regionCiblee, ordreRegional.Possesseur, carte, outilsGraphiques); break; case EOrdre.SoutienOffensif: GRegion regionAttaquee = this.DictionnaireRegions[this.dictionnaireOrdres.Dictionnaire[regionCiblee.Nom].RegionCiblee]; Pictogrammes.TraceSoutienOffensif(regionConcerne, regionCiblee, regionAttaquee, ordreRegional.Possesseur, carte, outilsGraphiques); break; case EOrdre.SoutienOffensifCoupe: GRegion regionAttaqueeBis = this.DictionnaireRegions[this.dictionnaireOrdres.Dictionnaire[regionCiblee.Nom].RegionCiblee]; Pictogrammes.TraceSoutienOffensifCoupe(regionConcerne, regionCiblee, regionAttaqueeBis, ordreRegional.Possesseur, carte, outilsGraphiques); break; default: break; } } } this.NettoieDictionnaireOccupation(); this.ListeRetraites = this.dictionnaireOrdres.Dictionnaire.Values.Where(item => item.Retraite == true && item.TypeUnite != EUnite.Aucune).ToList(); }