Exemplo n.º 1
0
 public int GetCost(Pile pile)
 {
     return this.GetCost(pile.TopCard ?? pile.Card);
 }
Exemplo n.º 2
0
 public PileViewModel(Pile pile, GameViewModel gameViewModel)
 {
     this.pile = pile;
     this.pile.PropertyChanged += new PropertyChangedEventHandler(pile_PropertyChanged);
     this.gameViewModel = gameViewModel;
 }
Exemplo n.º 3
0
 public void Buy(Pile pile)
 {
     if (this.GameStarted && !this.GameOver && pile != null)
     {
         this.CurrentPlayer.BuyCard(pile);
         this.OnPropertyChanged("CanBuy");
     }
 }
Exemplo n.º 4
0
        private void PartieForm_Load(object sender, EventArgs e)
        {
            //On commence par constituer la map du jeu en faisant une sélection de 10 cartes Action et en chargeant toutes les cartes

            #region Constitution de la map

            //Une pile est composée d'une carte, du nombre de cartes composant la pile, et de la PictureBox comportant l'image de la Carte
            //Cela est nécessaire car l'utilisateur n'interagira qu'avec les images, et donc les PictureBox
            //On commence par faire une List des PictureBox pour ensuite pouvoir les ajouter à nos Pile
            List <PictureBox> listPicturebox = new List <PictureBox>();
            listPicturebox.Add(pictureBox1);
            listPicturebox.Add(pictureBox2);
            listPicturebox.Add(pictureBox3);
            listPicturebox.Add(pictureBox4);
            listPicturebox.Add(pictureBox5);
            listPicturebox.Add(pictureBox6);
            listPicturebox.Add(pictureBox7);
            listPicturebox.Add(pictureBox8);
            listPicturebox.Add(pictureBox9);
            listPicturebox.Add(pictureBox10);
            listPicturebox.Add(pictureBox11);
            listPicturebox.Add(pictureBox12);
            listPicturebox.Add(pictureBox13);
            listPicturebox.Add(pictureBox14);
            listPicturebox.Add(pictureBox15);
            listPicturebox.Add(pictureBox16);
            listPicturebox.Add(pictureBox17);
            listPicturebox.Add(pictureBox18);

            //On va ensuite ajouter les Carte à chaque Pile

            //On commence donc par ajouter les cartes de base, en traitant à part la carte Malédiction
            //On utilise un compteur implémenté à chaque fois qu'une carte est ajoutée à la map
            //Ainsi on sait quel PictureBox ajouter dans notre Pile
            int i = 0;
            foreach (Carte carte in LancementForm.ListeCartesDeBase)
            {
                if (carte.Nom == "Malédiction")
                {
                    Malediction     = carte;
                    PileMalediction = new Pile(Malediction);
                }
                else
                {
                    Pile pile = new Pile(carte);
                    i++;
                    mapListe.Add(pile);
                }
            }
            //Maintenant que nous avons ajouté toutes les cartes Trésor et Victoire , on va mélanger la List des Actions et ajouter les 10 premières.
            //Pour ce faire, on va rajouter aléatoirement une carte de notre première List à une List temporaire de cartes Action (pour ensuite les trier)
            List <Carte> tempActions = new List <Carte>();
            for (int j = 0; j < 10; j++)
            {
                int index = rand.Next(0, LancementForm.ListeCartesAction.Count);
                tempActions.Add(LancementForm.ListeCartesAction[index]);
                LancementForm.ListeCartesAction.RemoveAt(index);
            }
            //Une fois nos 10 cartes sélectionnées, on trie par Coût les cartes Action sélectionnées
            tempActions.Sort(delegate(Carte a1, Carte a2) { return(a1.Cout - a2.Cout); });
            //Puis on les ajoute à la mapListe
            for (int j = 0; j < 10; j++)
            {
                Pile pile = new Pile(tempActions[j]);
                mapListe.Add(pile);
            }

            //On remplit les PictureBox
            i = 0;
            foreach (Pile pile in mapListe)
            {
                pile.carte.PictureBox = listPicturebox[i];
                pile.carte.PictureBox.ImageLocation = pile.carte.Image;
                pile.carte.PictureBox.Dock          = DockStyle.Fill;
                pile.carte.PictureBox.SizeMode      = PictureBoxSizeMode.StretchImage;
                i++;
            }
            #endregion

            //On constitue les decks, les mélange et pioche la première main pour chaque joueur

            #region Initialisation de la partie

            //On commence par faire une List des PictureBox qui seront utilisées pour afficher les cartes de la main
            listPictureBoxMain.Add(carteMain1);
            listPictureBoxMain.Add(carteMain2);
            listPictureBoxMain.Add(carteMain3);
            listPictureBoxMain.Add(carteMain4);
            listPictureBoxMain.Add(carteMain5);
            listPictureBoxMain.Add(carteMain6);
            listPictureBoxMain.Add(carteMain7);
            listPictureBoxMain.Add(carteMain8);
            listPictureBoxMain.Add(carteMain9);
            listPictureBoxMain.Add(carteMain10);
            listPictureBoxMain.Add(carteMain11);
            listPictureBoxMain.Add(carteMain12);
            listPictureBoxMain.Add(carteMain13);
            listPictureBoxMain.Add(carteMain14);
            listPictureBoxMain.Add(carteMain15);
            listPictureBoxMain.Add(carteMain16);
            listPictureBoxMain.Add(carteMain17);
            listPictureBoxMain.Add(carteMain18);
            listPictureBoxMain.Add(carteMain19);
            listPictureBoxMain.Add(carteMain20);
            listPictureBoxMain.Add(carteMain21);
            listPictureBoxMain.Add(carteMain22);
            listPictureBoxMain.Add(carteMain23);
            listPictureBoxMain.Add(carteMain24);
            listPictureBoxMain.Add(carteMain25);
            listPictureBoxMain.Add(carteMain26);
            listPictureBoxMain.Add(carteMain27);
            listPictureBoxMain.Add(carteMain28);
            listPictureBoxMain.Add(carteMain29);
            listPictureBoxMain.Add(carteMain30);
            listPictureBoxMain.Add(carteMain31);
            listPictureBoxMain.Add(carteMain32);

            //Puis on lance les méthodes correspondantes
            foreach (Joueur joueur in ListeJoueurs)
            {
                joueur.MelangerLeDeck();
                joueur.Piocher(5);
            }

            //Ensuite, donne aléatoirement la main
            int main = rand.Next(0, ListeJoueurs.Count);
            JoueurActuel = ListeJoueurs[main];

            //Enfin, avant de commencer, on affecte nos variables globales
            deckPB          = deckImage;
            deckTB          = deckLabel;
            defaussePB      = defausseImage;
            defausseTB      = defausseLabel;
            tourTB          = tourLabel;
            achatDispoTB    = achatDispoTextBox;
            actionDispoTB   = actionDispoTextBox;
            monnaieDispoTB  = monnaieDispoTextBox;
            monnaieTotaleTB = monnaieTotaleTextBox;
            jetonsTB        = jetonsTextBox;


            #endregion

            //Les tours vont se succéder jusqu'à ce qu'un événement déclenche la fin de la partie
            NouveauTour();
        }
Exemplo n.º 5
0
        private void Hover(object sender, EventArgs e)
        {
            //Ici, on va sélectionner la carte que l'utilisateur pointe et l'afficher dans le TableLayout de focus à droite

            //On commence par sélectionner la PictureBox pointée
            PictureBox selectedPictureBox = (PictureBox)sender;

            //Puis, si ce n'est pas la Malédiction, on va boucler sur toute la liste de Pile jusqu'à trouver la PictureBox pointée
            if (Malediction.PictureBox.ImageLocation != selectedPictureBox.ImageLocation)
            {
                //Une fois trouvée, notre variable globale focusPile prendra la valeur de cette Pile
                bool flag = false;
                int  i    = 0;
                while (!flag)
                {
                    //On utilise la propriété ImageLocation de la PictureBox et non pas l'instance elle-même car la fonction s'applique autant aux cartes de la map qu'aux cartes dans la main
                    if (mapListe[i].carte.Image == selectedPictureBox.ImageLocation)
                    {
                        flag      = true;
                        focusPile = mapListe[i];
                    }
                    else
                    {
                        i++;
                    }
                }
            }
            else
            {
                focusPile = PileMalediction;
            }

            //Infos communes à toutes les cartes
            focusNom.Text = focusPile.carte.Nom.ToUpper();
            focusPictureBox.ImageLocation = focusPile.carte.Image;
            focusPictureBox.SizeMode      = PictureBoxSizeMode.CenterImage;
            //Cette variable nous permettra de charger les icônes
            string path = Path.GetFullPath(Path.Combine(Application.StartupPath, @"..\..")) + "\\Icones\\";

            //Concernant le nombre de cartes restantes, cela n'a de sens que si l'utilisateur pointe une carte dans la pile et pas dans la main
            if (selectedPictureBox.Parent != mainLayout)
            {
                focusNbPile.Text = focusPile.nombre.ToString() + " restantes";
            }
            focusCout.ImageLocation = path + focusPile.carte.Cout.ToString() + ".png";
            focusType.Text          = focusPile.carte.Type.ToUpper();
            //Infos dépendant de la carte
            //On va devoir garder en mémoire les lignes utilisées
            int ligne = 1;

            //On fait un test pour chaque info possible, et si oui, on l'ajoute à notre aperçu de la carte
            if (focusPile.carte.CarteDonnee > 0)
            {
                //On crée le Textbox et on définit ses caractéristiques
                TextBox focusCarteDonnee = new TextBox();
                focusCarteDonnee.Text        = "+ " + focusPile.carte.CarteDonnee.ToString() + " carte(s)";
                focusCarteDonnee.BorderStyle = BorderStyle.None;
                //Puis on l'ajoute au tableau, à la ligne actuelle
                layoutDetailFocus.Controls.Add(focusCarteDonnee, 0, ligne);
                layoutDetailFocus.SetColumnSpan(focusCarteDonnee, 2);
                //On l'ajoute aussi à notre List afin de pouvoir la supprimer au retrait de la souris
                focusDetailsList.Add(focusCarteDonnee);

                //On incrémente ensuite la ligne, vu que celle-ci est utilisée
                ligne++;
            }
            //Ainsi de suite pour chaque caractéristique de carte...
            if (focusPile.carte.ActionDonnee != 0)
            {
                TextBox focusActionDonnee = new TextBox();
                focusActionDonnee.Text        = (focusPile.carte.ActionDonnee > 0) ? "+ " : "";
                focusActionDonnee.Text       += focusPile.carte.ActionDonnee.ToString() + " action(s)";
                focusActionDonnee.BorderStyle = BorderStyle.None;
                layoutDetailFocus.Controls.Add(focusActionDonnee, 0, ligne);
                layoutDetailFocus.SetColumnSpan(focusActionDonnee, 2);
                focusDetailsList.Add(focusActionDonnee);

                ligne++;
            }

            if (focusPile.carte.AchatDonne != 0)
            {
                TextBox focusAchatDonne = new TextBox();
                focusAchatDonne.Text        = (focusPile.carte.AchatDonne > 0) ? "+ " : "";
                focusAchatDonne.Text       += focusPile.carte.AchatDonne.ToString() + " achat(s)";
                focusAchatDonne.BorderStyle = BorderStyle.None;
                layoutDetailFocus.Controls.Add(focusAchatDonne, 0, ligne);
                layoutDetailFocus.SetColumnSpan(focusAchatDonne, 2);
                focusDetailsList.Add(focusAchatDonne);

                ligne++;
            }

            if (focusPile.carte.MonnaieDonnee != 0)
            {
                TextBox focusMonnaieDonnee = new TextBox();
                focusMonnaieDonnee.Text        = (focusPile.carte.MonnaieDonnee > 0) ? "+ " : "";
                focusMonnaieDonnee.Text       += focusPile.carte.MonnaieDonnee.ToString();
                focusMonnaieDonnee.BorderStyle = BorderStyle.None;
                focusMonnaieDonnee.Anchor      = AnchorStyles.None;
                layoutDetailFocus.Controls.Add(focusMonnaieDonnee, 0, ligne);
                focusDetailsList.Add(focusMonnaieDonnee);

                //Concernant les jetons, on garde l'affichage des cartes et on doit donc afficher une image
                //Même logique que pour la TextBox
                PictureBox pictureMonnaie = new PictureBox();
                pictureMonnaie.ImageLocation = $"{path}monnaie.png";
                pictureMonnaie.Size          = new Size(25, 25);
                pictureMonnaie.SizeMode      = PictureBoxSizeMode.StretchImage;
                pictureMonnaie.Anchor        = AnchorStyles.Left;
                layoutDetailFocus.Controls.Add(pictureMonnaie, 1, ligne);
                focusIcones.Add(pictureMonnaie);

                ligne++;
            }

            if (focusPile.carte.JetonPointDonne != 0)
            {
                TextBox focusJetonPointDonne = new TextBox();
                focusJetonPointDonne.Text        = (focusPile.carte.JetonPointDonne > 0) ? "+ " : "";
                focusJetonPointDonne.Text       += focusPile.carte.JetonPointDonne.ToString();
                focusJetonPointDonne.BorderStyle = BorderStyle.None;
                focusJetonPointDonne.Anchor      = AnchorStyles.None;
                layoutDetailFocus.Controls.Add(focusJetonPointDonne, 0, ligne);
                focusDetailsList.Add(focusJetonPointDonne);

                PictureBox picturePoint = new PictureBox();
                picturePoint.ImageLocation = $"{path}tokenPoint.png";
                picturePoint.Size          = new Size(25, 25);
                picturePoint.SizeMode      = PictureBoxSizeMode.StretchImage;
                picturePoint.Anchor        = AnchorStyles.Left;
                layoutDetailFocus.Controls.Add(picturePoint, 1, ligne);
                focusIcones.Add(picturePoint);

                ligne++;
            }

            if (focusPile.carte.PointDonne != 0)
            {
                TextBox focusPointDonne = new TextBox();
                focusPointDonne.Text        = (focusPile.carte.PointDonne > 0) ? "+ " : "";
                focusPointDonne.Text       += focusPile.carte.PointDonne.ToString() + " point(s) de victoire";
                focusPointDonne.BorderStyle = BorderStyle.None;
                layoutDetailFocus.Controls.Add(focusPointDonne, 0, ligne);
                layoutDetailFocus.SetColumnSpan(focusPointDonne, 2);
                focusDetailsList.Add(focusPointDonne);

                ligne++;
            }

            if (focusPile.carte.EffetText != "")
            {
                TextBox focusEffet = new TextBox();
                focusEffet.Multiline = true;
                string[] temp = focusPile.carte.EffetText.ToString().Split(new string[] { "\\r\\n" }, StringSplitOptions.RemoveEmptyEntries);
                focusEffet.Text        = (temp.Length > 1) ? temp[0] + "\r\n" + temp[1] : temp[0];
                focusEffet.BorderStyle = BorderStyle.None;
                layoutDetailFocus.Controls.Add(focusEffet, 0, ligne);
                layoutDetailFocus.SetColumnSpan(focusEffet, 2);
                Size proposed = new Size(187, 400);
                Size size     = TextRenderer.MeasureText(focusEffet.Text, new Font("Microsoft Sans Serif", 10F), proposed, TextFormatFlags.WordBreak);
                focusEffet.Width  = size.Width;
                focusEffet.Height = size.Height + 5;
                layoutDetailFocus.RowStyles[ligne].Height = focusEffet.Height + 20;

                focusDetailsList.Add(focusEffet);

                ligne++;
            }

            //On synchronise l'apparence du texte
            foreach (TextBox detail in focusDetailsList)
            {
                detail.Font     = new Font("Microsoft Sans Serif", 10F);
                detail.ReadOnly = true;
                detail.Dock     = DockStyle.Fill;
            }

            //Et on redimensionne toutes les lignes... Sauf la dernière, contenant l'effet pouvant être assez long!
            for (int j = 0; j < ligne - 1; j++)
            {
                layoutDetailFocus.RowStyles[j].SizeType = SizeType.AutoSize;
            }
        }
Exemplo n.º 6
0
 public Pile Clone(GameModel gameModel)
 {
     Pile clone = new Pile(this.count, gameModel, this.cardType, this.instance.Clone());
     clone.contrabanded = this.contrabanded;
     clone.cost = this.cost;
     clone.costsPotion = this.costsPotion;
     clone.embargoCount = this.embargoCount;
     clone.topCard = this.topCard.Clone();
     clone.tradeRouteCount = this.tradeRouteCount;
     if (this.uniqueCards != null)
     {
         foreach (CardModel card in this.uniqueCards.Reverse())
         {
             clone.uniqueCards.Push(card.Clone());
         }
     }
     return clone;
 }
Exemplo n.º 7
0
 public PlayerAction(ActionType actionType, Pile pile)
 {
     this.ActionType = actionType;
     this.Pile = pile;
 }