예제 #1
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);
        }
예제 #2
0
 /// <summary>
 /// Créateur standard utilisé uniquement à des fins de test
 /// </summary>
 public Bataille()
 {
     joueur1 = new Joueur("Toto");
     joueur2 = new Joueur("Titi");
 }
예제 #3
0
 /// <summary>
 /// Créé une instance de la classe Bataille afin de pouvoir lancer une partie en appuyyant sur Run
 /// </summary>
 /// <param name="nameJ1">Nom du joueur 1</param>
 /// <param name="nameJ2">Nom du joueur 2</param>
 public Bataille(string nameJ1, string nameJ2)
 {
     joueur1 = new Joueur(nameJ1);
     joueur2 = new Joueur(nameJ2);
 }
예제 #4
0
 /// <summary>
 /// Appelé lors du lancement du thread BackgroundWorker
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void tb_DoWork(object sender, DoWorkEventArgs e)
 {
     gagnant = bataille.Run(); // On lance la bataille qui va durer un certain temps dans notre thread en tache de fond
 }