Beispiel #1
0
 /// <summary>
 /// Génère l'événement Played si on gestionnaire a été déclaré
 /// </summary>
 /// <param name="e"></param>
 protected void OnPlayed(PlayedEventArgs e)
 {
     if (PlayedEvent != null)
     {
         PlayedEvent(this, e);
     }
 }
Beispiel #2
0
        /// <summary>
        /// Gestionnaire de l'événement Played défini dans Bataille
        /// Il est généré à chaque fois qu'un pli est joué
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PliJouee(object sender, PlayedEventArgs e)
        {
            // Récupération de la carte du premier joueur
            CarteGraphique card = (CarteGraphique)e.CarteJoueurs.Pop();

            // On appelle this.Invoke afin de pouvoir faire les modifications d'IHM dans le thread IHM.
            // En effet l'événement est levé par le BackgroundWorker qui n'a pas accès aux éléments de l'IHM.
            this.Invoke((MethodInvoker) delegate()
            {
                this.rtbDisplay.AppendText(e.Joueurs[0].Nom + " joue : " + card);
                this.pbJ1.Image = card.Image;
                this.rtbDisplay.AppendText("\t");
            });
            // Récupération de la carte du deuxième joueur
            card = (CarteGraphique)e.CarteJoueurs.Pop();
            this.Invoke((MethodInvoker) delegate()
            {
                this.rtbDisplay.AppendText(e.Joueurs[1].Nom + " joue : " + card + "\n");
                this.pbJ2.Image       = card.Image;
                this.lblJ1NbCard.Text = "Nb Cartes : " + e.Joueurs[0].Main.Count;
                this.lblJ2NbCard.Text = "Nb Cartes : " + e.Joueurs[1].Main.Count;
                this.rtbDisplay.ScrollToCaret(); // Force la barre de défilement verticale à aller en bas de la zone de texte
                this.Update();
            });
        }
Beispiel #3
0
        /// <summary>
        /// Joue un pli de la partie de Bataille
        /// </summary>
        /// <param name="joueurs">La liste des joueurs</param>
        /// <param name="pliActuelle">Les cartes actuellement visibles</param>
        /// <param name="batailleActuelle">Les cartes à remporter en cas de bataille</param>
        /// <returns>L'index du Joueur gagnant dans la liste des joueurs</returns>
        private int JouerPli(List <Joueur> joueurs, ref Stack <Carte> pliActuelle, ref Stack <Carte> batailleActuelle)
        {
            int  indexGagnant = 0;
            bool jouer        = true;

            // On vérifie si on a un gagnant
            if ((joueurs[0].Main.Count() == 0))
            {
                jouer        = false;
                indexGagnant = 1;
            }
            else if (joueurs[1].Main.Count() == 0)
            {
                jouer        = false;
                indexGagnant = 0;
            }
            // Si on a pas de gagnant il faut jouer le pli
            if (jouer)
            {
                // Chaque joueur sort une carte
                foreach (Joueur joueur in joueurs)
                {
                    pliActuelle.Push(joueur.Main.Dequeue());
                }
                // On prépare la génération de l'événement Played
                PlayedEventArgs args = new PlayedEventArgs();
                args.CarteJoueurs = new Stack <Carte>(pliActuelle.Reverse());
                args.Joueurs      = joueurs;
                // On génère l'événement Played
                OnPlayed(args);
                Carte meilleureCarte = null;
                int   index          = 0;
                // On vérifie si une carte est meilleure que l'autre
                // La méthode pourrait être améliorée car elle ne fonctionne actuellement que pour 2 joueurs
                foreach (Carte carte in pliActuelle)
                {
                    if (meilleureCarte != null)
                    {
                        if (meilleureCarte.CompareTo(carte) > 0)
                        {
                        }
                        else if (meilleureCarte.CompareTo(carte) == 0)
                        {
                            // On génère l'événement Bataille
                            OnBataille(EventArgs.Empty);
                            // On transfère les cartes dans le paquet des cartes à gagner en fin de bataille
                            foreach (Carte carte2 in pliActuelle)
                            {
                                batailleActuelle.Push(carte2);
                            }
                            pliActuelle.Clear();
                            foreach (Joueur joueur in joueurs)
                            {
                                batailleActuelle.Push(joueur.Main.Dequeue());
                            }
                            // On joue un nouveau pli avec les cartes à gagner en fin de bataille
                            indexGagnant = JouerPli(joueurs, ref pliActuelle, ref batailleActuelle);// Bataille
                            // On sort de la boucle foreach
                            break;
                        }
                        else
                        {
                            meilleureCarte = carte;
                            indexGagnant   = index;
                        }
                    }
                    else
                    {
                        meilleureCarte = carte;
                    }
                    index++;
                }
            }
            return(indexGagnant);
        }