// Méthode pour payer ou non le loyer du terrain public void Payer(Joueur J) { // Cas où le joueur n’est pas le propriétaire du terrain if (Proprietaire != J) { Console.WriteLine("\nCe terrain appartient à " + Proprietaire.Nom); // Cas où le terrain possède un hôtel if (Hotel) { // Mouvement d’argent entre le propriétaire et le joueur, et vérification que ce dernier n’a pas perdu Proprietaire.AjoutArgent(J.RetraitArgent(Loyer[5])); if (J.Perdu) { J.TransfererPossessions(Proprietaire); } } // Cas où le terrain ne possède pas d’hôtel else { double Versement = Loyer[NbMaisons]; // Vérification pour savoir s’il ne faut pas multiplier le loyer par 2 if (NbMaisons == 0) { bool FamilleCouleur = false; for (int i = 0; i < J.Couleurs.Count; i++) { if (Couleur == J.Couleurs[i]) { FamilleCouleur = true; } } if (FamilleCouleur) { Versement = Loyer[NbMaisons] * 2; } } // Mouvement d’argent entre le propriétaire et le joueur, et vérification que ce dernier n’a pas perdu Proprietaire.AjoutArgent(J.RetraitArgent(Versement)); if (J.Perdu) { J.TransfererPossessions(Proprietaire); } } } // Cas où le joueur est le propriétaire du terrain else { Console.WriteLine("\nCe terrain vous appartient"); } }
// Méthode pour construire un hôtel public void ConstruireHotel(Joueur J) { // Vérification pour savoir s’il faut faire une mise à jour ReinitialiserConstructible(J); // Cas où le joueur peut construire un hôtel if (Constructible && NbMaisons == 4 && J.Argent - PrixHotel >= 0) { Hotel = true; Constructible = false; NbMaisons = 0; J.RetraitArgent(PrixHotel); Console.WriteLine("\nAppuyez sur une touche pour continuer"); Console.ReadKey(); Console.Write("\r" + " " + "\r"); } // Cas où le joueur ne peut pas construire d’hôtels else { Console.WriteLine("\nVous ne pouvez pas construire d’hôtels sur ce terrain"); Console.WriteLine("Appuyez sur une touche pour continuer"); Console.ReadKey(); Console.Write("\r" + " " + "\r"); } }
// Méthode pour construire une maison public void ConstruireMaison(Joueur J) { // Vérification pour savoir s’il faut faire une mise à jour ReinitialiserConstructible(J); // Cas où le joueur peut construire une maison if (Constructible && NbMaisons < 4 && J.Argent - PrixMaison >= 0) { NbMaisons += 1; Constructible = false; J.RetraitArgent(PrixMaison); Console.WriteLine("Appuyez sur une touche pour continuer"); Console.ReadKey(); Console.Write("\r" + " " + "\r"); } // Cas où le joueur ne peut pas construire de maisons else { Console.WriteLine("\nVous ne pouvez pas construire de maisons sur ce terrain"); Console.WriteLine("\nAppuyez sur une touche pour continuer"); Console.ReadKey(); Console.Write("\r" + " " + "\r"); } }
// 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 payer ou non le loyer du service public public void PayerService(Joueur J, int Des) { // Cas où le joueur n’est pas le propriétaire du service public if (Proprietaire != J) { // Mouvement d’argent entre le propriétaire et le joueur, et vérification que le joueur n’a pas perdu Console.WriteLine("\nCe service public appartient à " + Proprietaire.Nom); Proprietaire.AjoutArgent(J.RetraitArgent(Loyer[Proprietaire.Services.Count - 1] * Des)); if (J.Perdu) { J.TransfererPossessions(Proprietaire); } } // Cas où le joueur est le propriétaire du service public else { Console.WriteLine("\nCe service public vous appartient"); } }
// Méthode pour payer ou non le loyer de la gare public void Payer(Joueur J) { // Cas où le joueur n’est pas le propriétaire de la gare if (Proprietaire != J) { Console.WriteLine("\nCette gare appartient à " + Proprietaire.Nom); // Mouvement d’argent entre le propriétaire et le joueur, et vérification que le joueur n’a pas perdu Proprietaire.AjoutArgent(J.RetraitArgent(Loyer[Proprietaire.Gares.Count - 1])); if (J.Perdu) { J.TransfererPossessions(Proprietaire); } } // Cas où le joueur est le propriétaire de la gare else { Console.WriteLine("\nCette gare vous appartient"); } }
// Méthode pour acheter ou non une gare 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 cette gare ?"); Console.WriteLine("\nPrix : {0} EUR", Prix); Console.WriteLine("Nombre de gares que vous possédez : " + J.Gares.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 acheter la gare et a assez d’argent if (Rep == 1 && J.Argent - Prix >= 0) { J.AjouterGare(this); Proprietaire = J; J.RetraitArgent(Prix); return(true); } // Cas où le joueur veut acheter la gare 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 la gare else if (Rep == 2) { return(false); } return(false); }
// Méthode pour faire jouer un joueur private bool Jouer(Joueur J) { // Rappel de la personne qui joue et de sa cagnotte Console.Clear(); Console.WriteLine("============ {0} ============", J.Nom); Console.WriteLine("\nVotre solde : {0} EUR", J.Argent); // Booléens bool Rejouer = false; // Pour savoir si le joueur devra rejouer bool FinTour = false; // Pour savoir si le joueur peut bouger // Lancé des dés Console.WriteLine("\nPour lancer les dés, appuyez sur une touche"); Console.ReadKey(); Console.Write("\r" + " " + "\r"); Random Alea = new Random(); int De1 = Alea.Next(1, 7); int De2 = Alea.Next(1, 7); if (De1 == De2 && !J.Prison) { Rejouer = true; J.Double += 1; } Console.WriteLine(@" +---+ +---+ Résultat des dés : | " + De1 + " | et | " + De2 + @" | +---+ +---+ "); // Cas où la personne est en prison if (J.Prison) { // Cas où le joueur a fait un double if (De1 == De2 && J.Double < 3) { int Rep = 0; bool Entier = false; // Tant que le joueur n’a pas entré 1 ou 2 while (!Entier) { Console.WriteLine("\nVoulez-vous sortir de prison ?"); Console.WriteLine("Tapez 1 pour Oui\nTapez 2 pour Non"); Console.Write("Votre réponse : "); Entier = Erreur(Console.ReadLine(), out Rep, 2); } if (Rep == 1) { Rejouer = false; J.Prison = false; J.Double = 0; } } // Cas où le joueur a la carte Chance lui permettant de sortir de prison if (J.Prison && J.Chance && J.Double < 3) { int Rep = 0; bool Entier = false; // Tant que le joueur n’a pas entré 1 ou 2 while (!Entier) { Console.WriteLine("\nVoulez-vous utiliser votre carte Chance pour sortir de prison ?"); Console.WriteLine("Tapez 1 pour Oui\nTapez 2 pour Non"); Console.Write("Votre réponse : "); Entier = Erreur(Console.ReadLine(), out Rep, 2); } if (Rep == 1) { J.Prison = false; Pioches[0].AjouterCarte(Pioches[0].Memoire); J.Double = 0; } } // Cas où le joueur a la carte Caisse de Communauté lui permettant de sortir de prison if (J.Prison && J.Communaute && J.Double < 3) { int Rep = 0; bool Entier = false; // Tant que le joueur n’a pas entré 1 ou 2 while (!Entier) { Console.WriteLine("\nVoulez-vous utiliser votre carte Caisse de Communauté pour sortir de prison ?"); Console.WriteLine("Tapez 1 pour Oui\nTapez 2 pour Non"); Console.Write("Votre réponse : "); Entier = Erreur(Console.ReadLine(), out Rep, 2); } if (Rep == 1) { J.Prison = false; Pioches[1].AjouterCarte(Pioches[1].Memoire); J.Double = 0; } } // Cas où le joueur n’a rien (ou ne veut rien faire) if (J.Prison) { // Cas où le joueur est en prison depuis moins de 3 tours if (J.Double < 2) { int Rep = 0; bool Entier = false; // Tant que le joueur n’a pas entré 1 ou 2 while (!Entier) { Console.WriteLine("\nVoulez-vous payer une amende de 50 EUR pour sortir de prison ?"); Console.WriteLine("Tapez 1 pour Oui\nTapez 2 pour Non"); Console.Write("Votre réponse : "); Entier = Erreur(Console.ReadLine(), out Rep, 2); } // Cas où le joueur veut payer son amende et peut if (Rep == 1 && J.Argent - 50 >= 0) { J.Prison = false; J.RetraitArgent(50); J.Double = 0; } // Cas où le joueur veut payer son amende et ne peut pas else if (Rep == 1 && J.Argent - 50 < 0) { // Il doit retenter sa chance au prochain tour en espérant toucher de l’argent entre temps Console.WriteLine("\nVous ne pouvez pas payer l’amende"); Console.WriteLine("Attendez le prochain tour"); J.Double += 1; FinTour = true; } // Cas où le joueur veut retenter sa chance au prochain tour else if (Rep == 2) { J.Double += 1; FinTour = true; } } // Cas où le joueur est en prison depuis 3 tours else { Console.WriteLine("\nVous êtes obligé de payer l’amende de 50 EUR"); J.Prison = false; J.Double = 0; J.RetraitArgent(50); // Si le joueur a perdu son tour se finit dès maintenant et il rend ses possessions à la banque if (J.Perdu) { FinTour = true; J.RendrePossessions(Pioches, Joueurs); } } } } // Cas où la personne a fait 3 doubles d’affilé if (J.Double == 3 && !J.Prison) { J.AccesDirect(Plateau, 10); FinTour = true; } // Cas où le joueur peut bouger if (!FinTour && !J.Prison) { // Déplacement et gestion de la case Départ J.Deplacement(Plateau, (De1 + De2)); // Cas où le joueur tombe sur une case Chance if (Plateau[J.Position].NomCase == "Chance") { Pioches[0].PiocherCarte(J, Plateau, Joueurs); if (J.Perdu) { J.RendrePossessions(Pioches, Joueurs); } } // Cas où le joueur tombe sur une case Caisse de Communauté if (Plateau[J.Position].NomCase == "Caisse de Communauté") { if (Pioches[1].PiocherCarte(J, Plateau, Joueurs)) { Pioches[0].PiocherCarte(J, Plateau, Joueurs); } if (J.Perdu) { J.RendrePossessions(Pioches, Joueurs); } } // Cas où le joueur tombe sur des cases où il doit payer des taxes if (J.Position == 4 || J.Position == 38) { J.RetraitArgent(Plateau[J.Position].Prix); if (J.Perdu) { J.RendrePossessions(Pioches, Joueurs); } } // Cas où le joueur tombe sur une gare else if (Plateau[J.Position] is Gare) { Gare GareActu = (Gare)Plateau[J.Position]; // Cas où la gare n’appartient à personne if (GareActu.Proprietaire == null) { // Cas où le joueur ne souhaite pas acheter la gare if (!GareActu.Acheter(J)) { GareActu.Enchere(Joueurs); } } // Cas où la gare appartient à quelqu’un else { GareActu.Payer(J); } } // Cas où le joueur tombe sur un service public else if (Plateau[J.Position] is ServicePublic) { ServicePublic ServiceActu = (ServicePublic)Plateau[J.Position]; // Cas où le service public n’appartient à personne if (ServiceActu.Proprietaire == null) { // Cas où le joueur ne souhaite pas acheter le service public if (!ServiceActu.Acheter(J)) { ServiceActu.Enchere(Joueurs); } } // Cas où le service public appartient à quelqu’un else { ServiceActu.PayerService(J, De1 + De2); } } // Cas où le joueur tombe sur un terrain else if (Plateau[J.Position] is Terrain) { Terrain TerrainActu = (Terrain)Plateau[J.Position]; // Cas où le terrain n’appartient à personne if (TerrainActu.Proprietaire == null) { // Cas où le joueur ne souhaite pas acheter le terrain if (!TerrainActu.Acheter(J)) { TerrainActu.Enchere(Joueurs); } } // Cas où le terrain appartient à quelqu’un else { TerrainActu.Payer(J); } } // Cas où le joueur tombe sur le policier else if (J.Position == 30) { J.AccesDirect(Plateau, 10); } } Console.ReadKey(); Console.Write("\r" + " " + "\r"); return(Rejouer); }
// Méthode pour piocher une carte public bool PiocherCarte(Joueur J, Case[] Plateau, List <Joueur> Joueurs) { // Carte tirée Carte Carte = Piopioche[DessusPioche % Piopioche.Count]; Console.WriteLine(Carte); // Cas d’une carte à conserver if (Carte.Type == "Prison") { if (Plateau[J.Position].NomCase == "Chance") { J.Chance = true; } else if (Plateau[J.Position].NomCase == "Caisse de Communauté") { J.Communaute = true; } Memoire = Carte; Piopioche.Remove(Carte); } // Cas d’une carte de déplacement else if (Carte.Type == "Deplacement") { // Cas où l’on avance if (Carte.Position >= 0) { J.AccesDirect(Plateau, Carte.Position); } // Cas où l’on recule else { J.Deplacement(Plateau, Carte.Position); } } // Cas d’une carte de débit else if (Carte.Type == "Debit") { J.RetraitArgent(Carte.Montant1); } // Cas d’une carte de crédit else if (Carte.Type == "Credit") { J.AjoutArgent(Carte.Montant1); } // Cas d’une carte d’impôt sur les bâtiments if (Carte.Type == "TaxeBatiment") { int NbMaisons = 0; int NbHotels = 0; double Virement = 0; // Calcul du nombre de maisons et d’hôtels possédés par le joueur for (int i = 0; i < J.Terrains.Count; i++) { NbMaisons += J.Terrains[i].NbMaisons; if (J.Terrains[i].Hotel) { NbHotels += 1; } } Virement = NbHotels * Carte.Montant2 + NbMaisons * Carte.Montant1; if (Virement != 0) { J.RetraitArgent(Virement); } } // Cas d’une carte anniversaire if (Carte.Type == "Anniversaire") { double Versement = 0; int i = 0; while (i < Joueurs.Count && J != Joueurs[i]) { Versement += Joueurs[i].RetraitArgent(Carte.Montant1); if (Joueurs[i].Perdu) { Joueurs[i].TransfererPossessions(J); } i += 1; } J.AjoutArgent(Versement); } // Cas d’une carte alternative if (Carte.Type == "AlternativeChance") { bool Entier = false; int Rep = 0; while (!Entier) { Console.WriteLine("\nTapez 1 pour payer l’amende"); Console.WriteLine("Tapez 2 pour tirer une carte Chance"); Console.Write("Votre réponse : "); try { Rep = int.Parse(Console.ReadLine()); if (Rep == 1 || Rep == 2) { Entier = true; } } catch { Console.WriteLine("\nVous n’avez pas tapé 1 ou 2\nVeuillez recommencer"); } } if (Rep == 1) { J.RetraitArgent(Carte.Montant1); } else if (Rep == 2) { return(true); } } DessusPioche += 1; return(false); }
// Méthode pour enchérir sur une gare public void Enchere(List <Joueur> JS) { bool FinEnc = false; double Montant = 0; Joueur Acheteur = null; // Tant qu’on n’a pas quitté l’enchère while (!FinEnc) { // 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 gares que vous possédez : " + JS[i].Gares.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 FinEnc = true; // Attribution de la gare 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.AjouterGare(this); Proprietaire = Acheteur; } // Cas où aucun joueur parmi les joueurs ne veut 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 cette gare FinEnc = true; Proprietaire = null; } } }