示例#1
0
        private void GoButton_Click(object sender, EventArgs e)
        {
            //On constitue la liste des joueurs selon le nombre
            Joueur tempJoueur = new Joueur(nomJoueur1.Text);

            ListeJoueurs.Add(tempJoueur);
            tempJoueur = new Joueur(nomJoueur2.Text);
            ListeJoueurs.Add(tempJoueur);
            if (checkBoxJoueur3.Checked)
            {
                tempJoueur = new Joueur(nomJoueur3.Text);
                ListeJoueurs.Add(tempJoueur);

                if (checkBoxJoueur4.Checked)
                {
                    tempJoueur = new Joueur(nomJoueur4.Text);
                    ListeJoueurs.Add(tempJoueur);
                }
            }

            //On constitue également le deck de base
            List <Carte> DeckGenerique = new List <Carte>();

            //On crée une cartetemporaire
            Carte tempCarte = new Carte();

            //Elle va d'abord pointer vers la carte cuivre
            tempCarte = ListeCartesDeBase.Find(x => x.Nom == "Cuivre");
            //Et on l'ajoute 7 fois au deck
            for (int i = 0; i < 7; i++)
            {
                Carte carteAjoutee = (Carte)tempCarte.Clone();
                DeckGenerique.Add(carteAjoutee);
            }
            //Ensuite on fait de même avec le Domaine, mais 3 fois
            tempCarte = ListeCartesDeBase.Find(x => x.Nom == "Domaine");
            for (int i = 0; i < 3; i++)
            {
                Carte carteAjoutee = (Carte)tempCarte.Clone();
                DeckGenerique.Add(carteAjoutee);
            }

            //Et on donne ce même deck à chaque joueur
            foreach (Joueur joueur in ListeJoueurs)
            {
                //On clone chaque carte et on l'ajoute au deck du joueur
                foreach (Carte carte in DeckGenerique)
                {
                    Carte carteClone = (Carte)carte.Clone();
                    joueur.Deck.Add(carteClone);
                }
            }

            //Et on lance la Form de la partie
            PartieForm partie = new PartieForm();

            partie.Show();
        }
示例#2
0
        public void Recevoir(Carte cible, string zone = "Défausse")
        {
            //On crée une nouvelle instance de la carte qu'on va ajouter à la défausse
            Carte tempCarte = (Carte)cible.Clone();

            //Si la cible est un campement nomade, elle est forcément reçue sur le deck
            if (cible.Nom == "Campement nomade")
            {
                zone = "Deck";
            }

            //On ajoute la carte à la zone spécifiée et on met à jour les infos
            switch (zone)
            {
            case "En main":
                this.Main.Add(tempCarte);
                if (this == PartieForm.JoueurActuel)
                {
                    this.MAJMain();
                    this.MAJInfos();
                }
                break;

            case "Défausse":
                this.Defausse.Add(tempCarte);
                //Bien entendu on met à jour l'affichage de la défausse si le joueur ayant reçu la carte est le joueur actuel
                if (this == PartieForm.JoueurActuel)
                {
                    PartieForm.defaussePB.ImageLocation = cible.Image;
                    PartieForm.defausseTB.Text          = $"Défausse : {this.Defausse.Count.ToString()}";
                }
                break;

            case "Deck":
                this.Deck.Insert(0, cible);
                PartieForm.deckTB.Text = $"Deck : {this.Deck.Count.ToString()}";
                break;
            }

            //Et on désincrémente le nombre de cartes dans la pile si la carte n'est pas une Malédiction (car elle n'est pas dans les piles)
            if (cible.Nom != "Malédiction")
            {
                //En cherchant la carte avant-tout...
                List <Pile> mapListe = PartieForm.mapListe;
                bool        flag     = false;
                int         i        = 0;
                while (!flag)
                {
                    if (mapListe[i].carte.Nom == cible.Nom)
                    {
                        flag = true;
                    }
                    else
                    {
                        i++;
                    }
                }
                mapListe[i].nombre--;

                //Et on lance la vérification pour savoir si on achève la partie
                //La partie s'achève quand : une des piles Colonie ou Province est vide, ou quand 3 piles au total sont vides
                if (mapListe[i].nombre == 0)
                {
                    //Tout d'abord, si la pile de la carte venant d'être reçue tombe à 0, alors on efface l'image, on désactive le PictureBox et on incrémente le compteur de piles vides
                    mapListe[i].carte.PictureBox.ImageLocation = @"C:\Users\ohne6\Desktop\Dominion\Images\dosDeCarte.jpg";
                    mapListe[i].carte.PictureBox.Enabled       = false;
                    PartieForm.nbPileVide++;
                    //Et ensuite on teste si la partie s'arrête
                    if ((mapListe[i].carte.Nom == "Province") || (mapListe[i].carte.Nom == "Colonie") || (PartieForm.nbPileVide == 3))
                    {
                        FinDePartie finDePartie = new FinDePartie();
                        finDePartie.ShowDialog();
                    }
                }

                Console.WriteLine($"{this.Nom} reçoit {cible.Nom}");
            }
            //Certaines cartes déclenchent des effets spécifiques quand elles sont reçues
            switch (tempCarte.Nom)
            {
            case "Province":
            {
                //Si quelqu'un reçoit une Province, un autre joueur peut activer Or des fous

                foreach (Joueur joueur in LancementForm.ListeJoueurs.FindAll(x => x != this))
                {
                    List <Carte> orsDesFous = new List <Carte>();
                    orsDesFous.AddRange(joueur.Main.FindAll(x => x.Nom == "Or des fous"));
                    if (orsDesFous.Count > 0)
                    {
                        PartieForm.tempJoueur = LancementForm.ListeJoueurs.Find(x => x != this);
                        foreach (Carte carte in orsDesFous)
                        {
                            carte.Reagir();
                        }
                    }
                }
            }
            break;

            case "Ambassade":
            {
                //Quand un joueur reçoit une Ambassade, les autres reçoivent un argent

                foreach (Joueur joueur in LancementForm.ListeJoueurs.FindAll(x => x != this))
                {
                    joueur.Recevoir(PartieForm.mapListe.Find(x => x.carte.Nom == "Argent").carte);
                }
            }
            break;

            case "Mandarin":
            {
                //Le joueur va placer tous ses trésors en jeu sur son deck, dans l'ordre qu'il souhaite

                //On commence par créer la liste des trésors en jeu
                List <Carte> aPlacer = this.Main.FindAll(x => (x.Type.Contains("Trésor") && (x.EnJeu)));
                MessageBox.Show("Vous allez placer vos trésors en jeu sur votre deck, un par un.");
                //Puis on demande de placer un trésor sur le deck jusqu'à qu'ils soient tous lacés
                for (int i = 0, c = aPlacer.Count - 1; i < c; i++)
                {
                    Carte carteAplacer = this.ChoisirUneCarte("Deck", aPlacer, true);
                    carteAplacer.EnJeu = false;
                    this.Deck.Insert(0, carteAplacer);
                    this.Main.Remove(carteAplacer);
                    aPlacer.Remove(carteAplacer);
                }
                //On place la dernière carte automatiquement, puisqu'il n'y a plus de choix à faire
                aPlacer[0].EnJeu = false;
                this.Deck.Insert(0, aPlacer[0]);
                this.Main.Remove(aPlacer[0]);
                this.MAJMain();
            }
            break;
            }
        }