// 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 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 ajouter un service public public void AjouterService(ServicePublic C) { Services.Add(C); }