public Region(ImageList imageList) { //Génération des champs tabAcres = new Acre[20, 12]; imageListImages = imageList; //Création des Acres et place leur ID à 0 for (int i = 0; i < 20; i++) { for (int j = 0; j < 12; j++) { tabAcres[i,j] = new Acre(imageListImages); } } }
/// <summary> /// Constructeur de la class Region /// </summary> /// <param name="nombreLignes">Nombre de lignes du tableau de la carte</param> /// <param name="nombreColonnes">Nombre de colonnes du tableau de la carte</param> public Region(int nombreLignes, int nombreColonnes) { carte = new Acre[nombreColonnes, nombreLignes]; aleatoire = new Random(); for (int i = 0; i < nombreColonnes; i++) { for (int j = 0; j < nombreLignes; j++) { carte[i, j] = new Acre(); } } economieJeu = new Economie(); date = new DateTime(); nombreHabitant = 0; habitantAcre = 0; desastreNaturel = new Desastres[6]; desastreNaturel[(int)Desastres.TypeDesastre.Verglas] = new Desastres(5, Acre.TypeTerrain.Energie); desastreNaturel[(int)Desastres.TypeDesastre.ReformeSante] = new Desastres(3, Acre.TypeTerrain.Hopital); desastreNaturel[(int)Desastres.TypeDesastre.TremblementTerre] = new Desastres(6, Acre.TypeTerrain.Residentiel); desastreNaturel[(int)Desastres.TypeDesastre.Manifestation] = new Desastres(2, Acre.TypeTerrain.Police); desastreNaturel[(int)Desastres.TypeDesastre.CriseEconnomique] = new Desastres(4, Acre.TypeTerrain.Commercial); desastreNaturel[(int)Desastres.TypeDesastre.Demenagement] = new Desastres(5, Acre.TypeTerrain.Stade); probaliterDesastre = 70; }
/// <summary> /// Calcul le cout pour construire à l'endroit indiqué /// </summary> /// <param name="typeTerrain">Si le lieu est une forêt ou un champ</param> /// <param name="typeBatiment">La batisse qu'on veut construire</param> /// <returns>Retourne le cout de la construction</returns> public int GetCout(Acre.TypeTerrain typeTerrain, Acre.TypeTerrain typeBatiment) { int cout = 0; cout = prixConstruction[(int)typeTerrain, (int)typeBatiment]; return cout; }
/// <summary> /// Valide s'il est possible de construire le type de terrain précis à l'endroit indiquer /// <param name="typeTerrain">Le type de terraint qu'on veut construire</param> /// <param name="x">Position en X de la construction</param> /// <param name="y">Position en Y de la construction</param> /// <returns>Retourne un Messages.Id qui indique le résultat de possibilité de construction</returns> private Messages.Id ValidationSpecifique(Acre.TypeTerrain typeTerrain, int x, int y) { Messages.Id message = Messages.Id.MessageOk; if (DistancePointBatiment(Acre.TypeTerrain.Energie, x, y) < 12 || typeTerrain == Acre.TypeTerrain.Energie) { if (carte[x, y].Terrain == Acre.TypeTerrain.Champ) { if (economieJeu.MontantBanque >= economieJeu.GetCout(Acre.TypeTerrain.Champ, typeTerrain)) { Construire(typeTerrain, x, y); economieJeu.MontantBanque -= economieJeu.GetCout(Acre.TypeTerrain.Champ, typeTerrain); } else { message = Messages.Id.ErreurFondInsuffisants; } } else if (carte[x, y].Terrain == Acre.TypeTerrain.Foret) { if (economieJeu.MontantBanque >= economieJeu.GetCout(Acre.TypeTerrain.Foret, typeTerrain)) { Construire(typeTerrain, x, y); economieJeu.MontantBanque -= economieJeu.GetCout(Acre.TypeTerrain.Foret, typeTerrain); } else { message = Messages.Id.ErreurFondInsuffisants; } } else { message = Messages.Id.ErreurLocationInvalide; } } else { message = Messages.Id.ErreurTropLoinEnergie; } return message; }
/// <summary> /// Valide qui est possible ou non de construire à place donné et le type de terrain donné /// </summary> /// <param name="terrain">Terrain qu'on veut construire</param> /// <param name="x">Valeur X du point</param> /// <param name="y">Valeur Y du point</param> /// <returns>Retourne le message d'erreur conrespondant à la possibilité de construction</returns> public Messages.Id ValiderConstruction(Acre.TypeTerrain terrain, int x, int y) { Messages.Id message = new Messages.Id(); switch (terrain) { case Acre.TypeTerrain.Energie: message = ValidationSpecifique(Acre.TypeTerrain.Energie, x, y); break; case Acre.TypeTerrain.Police: message = ValidationSpecifique(Acre.TypeTerrain.Police, x, y); break; case Acre.TypeTerrain.Hopital: message = ValidationSpecifique(Acre.TypeTerrain.Hopital, x, y); break; case Acre.TypeTerrain.Residentiel: message = ValidationSpecifique(Acre.TypeTerrain.Residentiel, x, y); break; case Acre.TypeTerrain.Commercial: message = ValidationSpecifique(Acre.TypeTerrain.Commercial, x, y); break; case Acre.TypeTerrain.Stade: message = ValidationSpecifique(Acre.TypeTerrain.Stade, x, y); break; } return message; }
/// <summary> /// Retoure la distance entre le point et la batisse la plus proche du type donné /// </summary> /// <param name="terrain">Terrain recherché</param> /// <param name="x">Valeur X du point</param> /// <param name="y">Valeur Y du point</param> /// <returns>Valeur de la distance</returns> public int DistancePointBatiment(Acre.TypeTerrain terrain, int x, int y) { int distance = int.MaxValue; for (int i = 0; i < carte.GetLength(0); i++) { for (int j = 0; j < carte.GetLength(1); j++) { if (carte[i, j].Terrain == terrain) { if (CalculerDistance(i, j, x, y) < distance) { distance = CalculerDistance(i, j, x, y); } } } } return distance; }
/// <summary> /// Constuit le terrain voulu au point voulu /// </summary> /// <param name="terrain">Terrain qu'on veut construire</param> /// <param name="x">X de la case où l'on veut construire</param> /// <param name="y">Y de la case où l'on veut construire</param> public void Construire(Acre.TypeTerrain terrain, int x, int y) { carte[x, y].Terrain = terrain; }
private void ValiderConstruction(Acre.TypeTerrain type, int x, int y) { Messages.Id message = jeu.ValiderConstruction(type, x, y); if (message != Messages.Id.MessageOk) { AfficherMessage(message); } Actualiser(); }
/// <summary> /// constructeur de la classe Desastres /// </summary> /// <param name="taille">nombre de cases de côté</param> /// <param name="batimentAffecte">Le type de batiment qui sont détruit par la catastrophe</param> public Desastres(int taille, Acre.TypeTerrain batimentAffecte) { this.batimentAffecte = batimentAffecte; this.taille = taille; }