示例#1
0
        // 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();
        }
示例#2
0
        // 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);
        }
示例#3
0
        // 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);
        }
示例#4
0
        // 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;
                }
            }
        }