void Button_Click(object sender, RoutedEventArgs e)
        {
            // Bouton clické
            var button = (Button)sender;

            // Trou associé au bouton
            Trou trou = (Trou)button.DataContext;

            // Check si le Joueur clique sur la bonne rangée
            if (trou.Joueur != JoueurCourant)
            {
                MessageBox.Show("Tu triches " + JoueurCourant.Nom + ", ce n'est pas ton trou !");
                return;
            }

            // Check si le trou n'est pas vide
            if (trou.Valeur == 0)
            {
                MessageBox.Show("Tu ne peux pas tricheur " + trou.Joueur.Nom);
                return;
            }

            // Check pour le reseau
            if (IsCombatReseau == true && JoueurCourant != JoueurActuelReseau)
            {
                MessageBox.Show("Ce n'est pas à toi de jouer ! ");
                return;
            }

            // Si partie en réseau
            if (IsCombatReseau == true)
            {
                int indexTrou = ListTrousOrdonnes.IndexOf(trou);

                if (hostGame != null)
                {
                    hostGame.SendAction(indexTrou);
                }
                else
                {
                    connect.SendAction(indexTrou);
                }
            }

            // Gestion de l'action
            TraitementActionJoueur(trou);

            // Si le joueur 2 est une IA ...
            if (J2.IsIA == true)
            {
                // On fait jouer l'IA
                Trou trouChoisiParIA = IA.ChoisirAction(J2, ListTrousOrdonnes);

                // On traite son choix
                TraitementActionJoueur(trouChoisiParIA);
            }
        }
        public void TraitementActionJoueur(Trou trou)
        {
            // Valeur du Trou
            int valeur = trou.Valeur;


            // On vide le Trou
            trou.Valeur = 0;

            // Distribution des graines sur les cases suivantes :
            int indexTrou = ListTrousOrdonnes.IndexOf(trou);

            int indexTrouCourant = indexTrou;

            // Tant que nous n'avons pas distribué toutes les graines :
            while (valeur != 0)
            {
                // On est à la fin de la liste
                if (indexTrouCourant == NbTrous - 1)
                {
                    // -> On retourne au début de la list
                    indexTrouCourant = 0;
                }
                else
                {
                    // On passe au trou suivant
                    indexTrouCourant += 1;
                }

                // Si on repasse par le trou cliqué auparavant
                if (indexTrouCourant == indexTrou)
                {
                    // -> On saute le trou
                    continue;
                }

                // On récupère le Trou courant
                Trou trouCourant = ListTrousOrdonnes[indexTrouCourant];

                // On incrémente de 1
                trouCourant.Valeur += 1;

                // On décrémente valeur de 1
                valeur -= 1;
            }

            // Récupération du trou où on a placé la dernière graine
            int indexDernierTrouPlace = indexTrouCourant;

            Boolean onPeutRecolter = true;

            // On collecte les scores
            // - On parcourt la liste dans l'autre sens à partir du dernier trou
            while (onPeutRecolter)
            {
                // On récupère le Trou courant
                Trou trouCourant = ListTrousOrdonnes[indexTrouCourant];

                // Si condition de récolte bonne
                // - 2 ou 3 graines dans le trou courant
                if (trouCourant.Valeur == 2 || trouCourant.Valeur == 3)
                {
                    // On donne les graines au joueur
                    JoueurCourant.NbGraines += trouCourant.Valeur;

                    // On retire les graines du trou
                    trouCourant.Valeur = 0;

                    // On est au début de la liste
                    if (indexTrouCourant == 0)
                    {
                        // -> On retourne au début de la liste
                        indexTrouCourant = NbTrous - 1;
                    }
                    else
                    {
                        // On passe au trou suivant
                        indexTrouCourant -= 1;
                    }
                }
                // Si ce n'est pas le cas
                else
                {
                    // On s'arrête la
                    onPeutRecolter = false;
                }
            }

            // Changement de Joueur Courant
            if (JoueurCourant == J1)
            {
                JoueurCourant = J2;
            }
            else
            {
                JoueurCourant = J1;
            }

            // Check si il y'a un vainqueur
            CheckSiVainqueur();
        }