Пример #1
0
 /// <summary>
 /// Génère l'événement Gained si on gestionnaire a été déclaré
 /// </summary>
 /// <param name="e"></param>
 protected void OnGained(PliGainedEventArgs e)
 {
     if (PliGainedEvent != null)
     {
         PliGainedEvent(this, e);
     }
 }
Пример #2
0
 /// <summary>
 /// Gestionnaire d'événement pour l'événement Gained défini dans Bataille
 /// Evenement généré à la fin de chaque pli pour indiquer l'état du jeu à la suite de ce dernier
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void PliGagnee(object sender, PliGainedEventArgs e)
 {
     this.Invoke((MethodInvoker) delegate()
     {
         this.rtbDisplay.AppendText("\n");
         this.rtbDisplay.AppendText("Gagnant du pli : " + e.Gagnant.Nom + " avait " + e.Gagnant.Main.Count + " cartes. \n");
         this.rtbDisplay.AppendText("Il gagne sur le dernier pli :\n");
         foreach (Carte carte in e.Pli)
         {
             this.rtbDisplay.AppendText("\t- " + carte + "\n");
         }
         if (e.Bataille.Count != 0)
         {
             this.rtbDisplay.AppendText("Il gagne grâce aux batailles :\n");
             foreach (Carte carte in e.Bataille)
             {
                 this.rtbDisplay.AppendText("\t- " + carte + "\n");
             }
         }
         this.rtbDisplay.AppendText("Le perdant du pli : " + e.Perdant.Nom + " avait encore " + e.Perdant.Main.Count + "\n");
         this.rtbDisplay.ScrollToCaret();
         this.lblJ1NbCard.Text = "Nb Cartes : " + e.Joueurs[0].Main.Count;
         this.lblJ2NbCard.Text = "Nb Cartes : " + e.Joueurs[1].Main.Count;
     });
 }
Пример #3
0
        /// <summary>
        /// Joue tous les plis d'une partie afin de déterminer le vainqueur
        /// </summary>
        /// <param name="joueurs">La liste des joueurs participants. Pour notre GUI il vaut mieux se limiter à 2 joueurs</param>
        /// <returns>Le Joueur gagnant de la partie</returns>
        private Joueur JouerPartie(List <Joueur> joueurs)
        {
            int    i       = 1;
            bool   jouer   = true;
            Joueur gagnant = null;

            while (jouer)
            {
                // On limite le nombre de pli à 1000 ce qui donne des parties de 1 minute environ
                if (i >= 1000)
                {
                    jouer   = false;
                    gagnant = null;
                }
                i++;
                // On laisse au système un peu de temps pour gérer les taches courantes
                System.Threading.Thread.Sleep(5);
                // On vérifie si l'un des joueur n'a plus de carte ce qui signifie alors que l'on a un gagnant
                if ((joueurs[0].Main.Count() == 0))
                {
                    jouer   = false;
                    gagnant = joueurs[1];
                }
                else if (joueurs[1].Main.Count() == 0)
                {
                    jouer   = false;
                    gagnant = joueurs[0];
                }
                // Si on a pas de gagnant il faut continuer à jouer
                if (jouer)
                {
                    Stack <Carte>      pliActuelle      = new Stack <Carte>();
                    Stack <Carte>      batailleActuelle = new Stack <Carte>();
                    PliGainedEventArgs args             = new PliGainedEventArgs();
                    int perdantPli;
                    // On joue un pli
                    int gagnantPli = JouerPli(joueurs, ref pliActuelle, ref batailleActuelle);
                    // On prépare les données qui seront envoyer dans l'événement PliGained
                    args.Gagnant = joueurs[gagnantPli];
                    // On calcule qui est le perdant
                    if (gagnantPli == 0)
                    {
                        perdantPli = 1;
                    }
                    else
                    {
                        perdantPli = 0;
                    }
                    args.Perdant = joueurs[perdantPli];
                    // On crée des copie des Stack pour pouvoir utiliser Pop() sans vider les Stack utilisés dans la Bataille
                    args.Pli      = new Stack <Carte>(pliActuelle);
                    args.Bataille = new Stack <Carte>(batailleActuelle);
                    args.Joueurs  = joueurs;
                    // On génère l'événement PliGained
                    OnGained(args);
                    // On donne les cartes en jeux au vainqueur
                    foreach (Carte carte in pliActuelle)
                    {
                        joueurs[gagnantPli].Main.Enqueue(carte);
                    }
                    foreach (Carte carte in batailleActuelle)
                    {
                        joueurs[gagnantPli].Main.Enqueue(carte);
                    }
                }
            }
            return(gagnant);
        }