// Méthode lorsque le joueur a perdu à cause d’un joueur public void TransfererPossessions(Joueur J) { Console.ReadKey(); Console.WriteLine("\r" + " " + "\r"); Console.Clear(); Console.WriteLine("============ {0} ============", J.Nom); // Transfert des terrains for (int i = 0; i < Terrains.Count; i++) { Console.WriteLine("\nVous récupérez le terrain " + Terrains[i].NomCase); // Vente des maisons, si nécessaire if (Terrains[i].NbMaisons != 0) { J.AjoutArgent(Terrains[i].NbMaisons * Terrains[i].PrixMaison / 2); } // Vente des hôtels, si nécessaire else if (Terrains[i].Hotel) { J.AjoutArgent(Terrains[i].PrixHotel / 2 + 2 * Terrains[i].PrixMaison); } J.AjouterTerrain(Terrains[i]); Terrains[i].ModifierProprio(J); } // Transfert des gares for (int i = 0; i < Gares.Count; i++) { Console.WriteLine("\nVous récupérez la gare " + Gares[i].NomCase); J.AjouterGare(Gares[i]); Gares[i].ModifierProprio(J); } // Transfert des services publics for (int i = 0; i < Services.Count; i++) { Console.WriteLine("\nVous récupérez le service public " + Services[i].NomCase); J.AjouterService(Services[i]); Services[i].ModifierProprio(J); } // Transfert des cartes à conserver, si nécessaire if (Chance) { J.Chance = true; } if (Communaute) { J.Communaute = true; } // Mise à jour des couleurs pour le joueur qui récupère les terrains J.MAJCouleur(); }
// Méthode pour acheter ou non un service public public bool Acheter(Joueur J) { int Rep = 0; bool Entier = false; // Tant que le joueur n’a pas entré 1 ou 2 while (!Entier) { Console.WriteLine("\nVoulez-vous acheter ce service public ?"); Console.WriteLine("\nPrix : {0} EUR", Prix); Console.WriteLine("Nombre de services publics que vous possédez : " + J.Services.Count); Console.WriteLine("\nTapez 1 pour Oui\nTapez 2 pour Non"); Console.Write("Votre réponse : "); Entier = Erreur(Console.ReadLine(), out Rep); } // Cas où le joueur J veut acheter le service public et a assez d’argent if (Rep == 1 && J.Argent - Prix >= 0) { J.AjouterService(this); Proprietaire = J; J.RetraitArgent(Prix); return(true); } // Cas où le joueur veut acheter le service public mais n’a pas assez d’argent else if (Rep == 1 && J.Argent - Prix < 0) { Console.WriteLine("\nVous n’avez pas suffisamment d’argent pour faire cet achat"); return(false); } // Cas où le joueur ne veut pas acheter le service public else if (Rep == 2) { return(false); } return(false); }
// Méthode pour récupérer le plateau private Case[] RecupPlateau(XElement racine) { List <XElement> Liste = (from c in racine.Descendants("Case") select c).ToList <XElement>(); Case[] TabCases = new Case[Liste.Count]; for (int i = 0; i < TabCases.Length; i++) { string Type = (string)Liste[i].Attribute("Type"); if (Type == "Case") { TabCases[i] = new Case((string)Liste[i].Element("NomCase"), (double)Liste[i].Element("Prix")); } else if (Type == "Gare") { // Vérification pour savoir si la gare appartient à quelqu’un et récupération de l’éventuel propriétaire Joueur Proprio = null; if (Liste[i].Element("Proprietaire") != null) { for (int j = 0; j < Joueurs.Count; j++) { if ((string)Liste[i].Element("Proprietaire") == Joueurs[j].Nom) { Proprio = Joueurs[j]; } } } // Construction de la gare TabCases[i] = new Gare( (string)Liste[i].Element("NomCase"), (double)Liste[i].Element("Prix"), new double[] { (double)Liste[i].Element("LoyerGare").Element("G1"), (double)Liste[i].Element("LoyerGare").Element("G2"), (double)Liste[i].Element("LoyerGare").Element("G3"), (double)Liste[i].Element("LoyerGare").Element("G4") }, (double)Liste[i].Element("Hypotheque"), (Proprio != null) ? Proprio : null); // Ajout de la gare à la liste de gares du propriétaire if (Proprio != null) { Proprio.AjouterGare((Gare)TabCases[i]); } } else if (Type == "ServicePublic") { // Vérification pour savoir si le service public appartient à quelqu’un et récupération de l’éventuel propriétaire Joueur Proprio = null; if (Liste[i].Element("Proprietaire") != null) { for (int j = 0; j < Joueurs.Count; j++) { if ((string)Liste[i].Element("Proprietaire") == Joueurs[j].Nom) { Proprio = Joueurs[j]; } } } // Construction du service public TabCases[i] = new ServicePublic( (string)Liste[i].Element("NomCase"), (double)Liste[i].Element("Prix"), new double[] { (double)Liste[i].Element("LoyerService").Element("S1"), (double)Liste[i].Element("LoyerService").Element("S2") }, (double)Liste[i].Element("Hypotheque"), (Proprio != null) ? Proprio : null); // Ajout de la gare à la liste de services publics du propriétaire if (Proprio != null) { Proprio.AjouterService((ServicePublic)TabCases[i]); } } else if (Type == "Terrain") { // Vérification que le terrain appartient à quelqu’un et récupération de l’éventuel propriétaire Joueur Proprio = null; if (Liste[i].Element("Proprietaire") != null) { for (int j = 0; j < Joueurs.Count; j++) { if ((string)Liste[i].Element("Proprietaire") == Joueurs[j].Nom) { Proprio = Joueurs[j]; } } } // Construction du terrain TabCases[i] = new Terrain( (string)Liste[i].Element("NomCase"), (double)Liste[i].Element("Prix"), (string)Liste[i].Element("Couleur"), new double[] { (double)Liste[i].Element("LoyerTerrain").Element("Nu"), (double)Liste[i].Element("LoyerTerrain").Element("M1"), (double)Liste[i].Element("LoyerTerrain").Element("M2"), (double)Liste[i].Element("LoyerTerrain").Element("M3"), (double)Liste[i].Element("LoyerTerrain").Element("M4"), (double)Liste[i].Element("LoyerTerrain").Element("H") }, (double)Liste[i].Element("Hypotheque"), (double)Liste[i].Element("PrixMaison"), (double)Liste[i].Element("PrixHotel"), (Liste[i].Element("NbMaisons") != null) ? (int)Liste[i].Element("NbMaisons") : 0, (Liste[i].Element("Hotel") != null) ? (bool)Liste[i].Element("Hotel") : false, (Liste[i].Element("Constructible")) != null ? (bool)Liste[i].Element("Constructible") : true, (Proprio != null) ? Proprio : null); // Ajout de la gare à la liste de terrains du propriétaire if (Proprio != null) { Proprio.AjouterTerrain((Terrain)TabCases[i]); } } } return(TabCases); }
// Méthode pour enchérir sur un service public public void Enchere(List <Joueur> JS) { bool Fin = false; double Montant = 0; Joueur Acheteur = null; // Tant qu’on n’a pas quitté l’enchère while (!Fin) { // On compte le nombre de refus à chaque tour de table int NbRefus = 0; // On regarde qui veut enchérir parmi tous les joueurs de la table for (int i = 0; i < JS.Count; i++) { int Rep = 0; bool Entier = false; Console.Clear(); Console.WriteLine("============ {0} ============", JS[i].Nom); // Tant que le joueur n’a pas entré 1 ou 2 while (!Entier) { Console.WriteLine("\nVoulez-vous enchérir sur {0} ?", NomCase); Console.WriteLine("\nEnchère actuelle : {0} EUR", Montant); Console.WriteLine("Prix initial : {0} EUR", Prix); Console.WriteLine("Votre solde : {0} EUR", JS[i].Argent); Console.WriteLine("Nombre de services publics que vous possédez : " + JS[i].Services.Count); Console.WriteLine("\nTapez 1 pour Oui\nTapez 2 pour Non"); Console.Write("Votre réponse : "); Entier = Erreur(Console.ReadLine(), out Rep); } // Cas où le joueur veut enchérir et peut if (Rep == 1 && JS[i].Argent - Montant > 0) { double Enc = 0; bool Reel = false; // Vérification que le joueur rentre un réel, plus grand que l’enchère actuelle et qu’il peut dépenser cette somme while (!Reel) { Console.Write("\nEntrer une enchère supérieure à {0} EUR : ", Montant); try { Enc = double.Parse(Console.ReadLine()); if (Enc > Montant && JS[i].Argent - Enc >= 0) { Montant = Enc; Reel = true; Acheteur = JS[i]; } } catch { Console.WriteLine("\nVous n’avez pas tapé 1 ou 2"); Console.WriteLine("OU vous n’avez pas entrée une enchère assez élevée"); Console.WriteLine("OU vons n’avez pas assez d’argent pour affectuer une telle enchère\nVeuillez recommencer"); } } } // Cas où le joueur veut enchérir mais ne peut pas par manque d’argent else if (Rep == 1 && JS[i].Argent - Montant <= 0) { Console.WriteLine("\nVons n’avez pas assez d’argent pour participer à cette enchère"); NbRefus += 1; } // Cas où le joueur ne veut pas enchérir else if (Rep == 2) { NbRefus += 1; } } // Cas où un seul joueur parmi tous les joueurs enchérit lors d’un tour de table if (NbRefus == JS.Count - 1 || (NbRefus == JS.Count && Montant != 0)) { // C’est la fin de l’enchère Fin = true; // Attribution du service public au joueur qui a enchéri la plus grosse somme Console.Clear(); Console.WriteLine("============ {0} ============", Acheteur.Nom); Console.WriteLine("\nFélicitations ! Vous avez remporté l’enchère"); Acheteur.RetraitArgent(Montant); Acheteur.AjouterService(this); Proprietaire = Acheteur; } // Cas où aucun joueur parmi les joueurs ne peut enchérir else if (NbRefus == JS.Count && Montant == 0) { // C’est la fin de l’enchère et on n’a pas de propriétaire pour ce service public Fin = true; Proprietaire = null; } } }