public int GetCost(Pile pile) { return this.GetCost(pile.TopCard ?? pile.Card); }
public PileViewModel(Pile pile, GameViewModel gameViewModel) { this.pile = pile; this.pile.PropertyChanged += new PropertyChangedEventHandler(pile_PropertyChanged); this.gameViewModel = gameViewModel; }
public void Buy(Pile pile) { if (this.GameStarted && !this.GameOver && pile != null) { this.CurrentPlayer.BuyCard(pile); this.OnPropertyChanged("CanBuy"); } }
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(); }
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; } }
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; }
public PlayerAction(ActionType actionType, Pile pile) { this.ActionType = actionType; this.Pile = pile; }