// 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 terrain public bool Acheter(Joueur J) { // Calcul du nombre de terrains de la même couleur possédés par le joueur int Nb = 0; for (int i = 0; i < J.Terrains.Count; i++) { if (J.Terrains[i].Couleur == Couleur) { Nb += 1; } } 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 terrain ?"); Console.WriteLine("\nPrix : {0} EUR", Prix); Console.WriteLine("Couleur : " + Couleur); Console.WriteLine("Nombre de terrains de la même couleur : " + Nb); Console.WriteLine("\nTapez 1 pour Oui\nTapez 2 pour Non"); Console.Write("Votre réponse : "); Entier = Erreur(Console.ReadLine(), out Rep); if (!Entier) { Console.WriteLine("\nVous n’avez pas tapé 1 ou 2\nVeuillez recommencer"); } } // Cas où le joueur veut acheter le terrain et a assez d’argent if (Rep == 1 && J.Argent - Prix >= 0) { J.AjouterTerrain(this); J.RetraitArgent(Prix); Proprietaire = J; J.MAJCouleur(); return(true); } // Cas où le joueur veut acheter le terrain 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 terrain else if (Rep == 2) { return(false); } return(false); }
// Méthode pour enchérir sur un terrain 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) { // Calcul du nombre de terrains de la même couleur possédés par le joueur int Nb = 0; for (int j = 0; j < JS[i].Terrains.Count; j++) { if (JS[i].Terrains[j].Couleur == Couleur) { Nb += 1; } } 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("Couleur : " + Couleur); Console.WriteLine("Nombre de terrain de la même couleur : " + Nb); 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 terrain 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.AjouterTerrain(this); Proprietaire = Acheteur; Acheteur.MAJCouleur(); } // 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 terrain Fin = true; Proprietaire = null; } } }