示例#1
0
        private void TextBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            System.Console.WriteLine("/**** Action sur un TextBox ****/");
            TextBox objclick = (TextBox)sender;

            Trou elementRecherche = null;

            for (int i = 0; i < this.trous.Count; i++)
            {
                if (this.trous.ElementAt(i).nom == objclick.Name)
                {
                    elementRecherche = this.trous.ElementAt(i);
                }
            }

            if (elementRecherche.nombreGraines > 0)
            {
                this.moteur.faireAction(elementRecherche);

                System.Console.WriteLine("/**** MISE A JOUR DE LA VUE ****/");
                this.trous = this.moteur.trous;

                //On modifie le joueur courant
                updateCurrentJoueur();

                // si online envoi du trou joué
                if (moteur.typeDepartie == "online")
                {
                    envoyerMsg(elementRecherche.nom);
                }
            }
            else
            {
                labelInformation.Text = "Vous ne pouvez pas jouer une case vide";
            }


            /*
             * System.Console.WriteLine("*** Contenu des trous ***");
             * foreach (var trou in this.trous)
             * {
             *  System.Console.WriteLine(trou.nombreGraines);
             * }*/

            if (finPartie())
            {
                labelInformation.Text = "Fin de la partie ";
                if (this.joueur1.score > this.joueur2.score)
                {
                    labelInformation.Text += "\n Le joueur : " + this.joueur1.nom + " gagne !";
                }
                else
                {
                    labelInformation.Text += "\n Le joueur : " + this.joueur2.nom + " gagne !";
                }
                this.historique.enregistrerInfos(this.joueur1, this.joueur2);
            }
        }
示例#2
0
 public void getGraines(Trou trouATest)
 {
     while (trouATest.nombreGraines == 2 || trouATest.nombreGraines == 3)
     {
         this.currentJoueur.score += trouATest.nombreGraines;
         trouATest.nombreGraines   = 0;
         updateElementList(trouATest);
         //On test le trou d'avant
         trouATest = trouATest.predecesseur;
     }
 }
示例#3
0
 //Mis a jour du nombre de graines dans un trou
 public void updateElementList(Trou trouAUpdate)
 {
     for (int i = 0; i < this.trous.Count; i++)
     {
         //Si c'est l'element qu'on cherche
         if (this.trous.ElementAt(i).nom == trouAUpdate.nom)
         {
             //On modifie son nombre de graines
             this.trous.ElementAt(i).nombreGraines = trouAUpdate.nombreGraines;
             return;
         }
     }
 }
示例#4
0
        /*public Boolean actionPossible(Trou trouAtester)
         * {
         *  for (int i = 0; i < this.currentJoueur.listTrouPerso.Count; i++)
         *  {
         *      //Si c'est l'element qu'on cherche
         *      if (this.currentJoueur.listTrouPerso.ElementAt(i).nom == trouAtester.nom)
         *      {
         *          //Il est proprio du trou il peut donc jouer
         *          return true;
         *      }
         *  }
         *  //Si on arrive ici c'est que l'utilisateur ne possede pas le trou
         *  //il ne peut donc pas jouer
         *  return false;
         * }*/

        public Trou meilleureActionIA()
        {
            System.Console.WriteLine("/**** Choix de la meilleure action pour l'IA ****/");

            Trou bestTrou     = null;
            Trou lePlusRempli = null;

            //pour chacun de ses trous
            foreach (var trou in this.currentJoueur.listTrouPerso)
            {
                if (trou.nombreGraines > 0)
                {
                    //on regarde le trou dans lequel la derniere graine tombe
                    Trou troufinal = trou;
                    int  nb        = trou.nombreGraines;
                    while (nb > 0)
                    {
                        troufinal = troufinal.successeur;
                        nb--;
                    }
                    //si il contient déjà 1 ou 2 graine
                    if (troufinal.nombreGraines == 1 || troufinal.nombreGraines == 2)
                    {
                        //on garde ce coup
                        bestTrou = trou;
                    }

                    if (lePlusRempli == null)
                    {
                        lePlusRempli = trou;
                    }
                    else
                    //si il n'y a pas de bon coup on joue le dernier trou le plus rempli
                    if (trou.nombreGraines > lePlusRempli.nombreGraines)
                    {
                        lePlusRempli = trou;
                    }
                }
            }
            if (bestTrou != null)
            {
                return(bestTrou);
            }
            return(lePlusRempli);
        }
示例#5
0
        public void faireAction(Trou trouDepart)
        {
            System.Console.WriteLine("/**** On effectue l'action ****/");
            //On récupére toutes les graines de la case de départ
            int graineEnMain = trouDepart.nombreGraines;

            trouDepart.nombreGraines = 0;
            //On met a jour le trou correspondant dans la liste
            updateElementList(trouDepart);

            Trou currentTrou = trouDepart;
            //Element pour tester si on met a jour en fonction
            Boolean firstTour = true;

            //Tant qu'on a des graines en jeu
            while (graineEnMain != 0)
            {
                //Si c'est le premier tour
                if (firstTour)
                {
                    firstTour = false;
                    //On met pour le prochain tour le successeur de l'element de départ
                    currentTrou = trouDepart.successeur;
                }
                else
                {
                    //On ajoute une graine au trou
                    currentTrou.nombreGraines++;
                    //On met a jour le trou correspondant dans la liste
                    updateElementList(currentTrou);
                    //On met a jour le trou pour le tour suivant
                    currentTrou = currentTrou.successeur;
                    //On retire une graine de la main du joueur
                    graineEnMain--;
                }
            }

            getGraines(currentTrou.predecesseur);
        }
示例#6
0
        public void initializeList()
        {
            System.Console.WriteLine("/**** Initialisation de la list ****/");
            this.trous = new ObservableCollection <Trou>();
            //Trous "Ally"
            Trou trouA = new Trou("A", 4);
            Trou trouB = new Trou("B", 4, trouA);
            Trou trouC = new Trou("C", 4, trouB);
            Trou trouD = new Trou("D", 4, trouC);
            Trou trouE = new Trou("E", 4, trouD);
            Trou trouF = new Trou("F", 4, trouE);
            //Trous "Ennemy"
            Trou troua = new Trou("a", 4, trouF);
            Trou troub = new Trou("b", 4, troua);
            Trou trouc = new Trou("c", 4, troub);
            Trou troud = new Trou("d", 4, trouc);
            Trou troue = new Trou("e", 4, troud);
            Trou trouf = new Trou("f", 4, troue);

            //Definition du predecesseur manquant
            trouA.predecesseur = trouf;

            //Definition des successeur
            trouA.successeur = trouB;
            trouB.successeur = trouC;
            trouC.successeur = trouD;
            trouD.successeur = trouE;
            trouE.successeur = trouF;
            trouF.successeur = troua;
            troua.successeur = troub;
            troub.successeur = trouc;
            trouc.successeur = troud;
            troud.successeur = troue;
            troue.successeur = trouf;
            trouf.successeur = trouA;

            //Ajout des elements à la liste
            trous.Add(trouA);
            trous.Add(trouB);
            trous.Add(trouC);
            trous.Add(trouD);
            trous.Add(trouE);
            trous.Add(trouF);
            trous.Add(troua);
            trous.Add(troub);
            trous.Add(trouc);
            trous.Add(troud);
            trous.Add(troue);
            trous.Add(trouf);

            System.Console.WriteLine("/**** FIN Initialisation de la list ****/");
            this.joueur1 = new Personne("Joueur 1");
            this.joueur2 = new Personne("Joueur 2");


            //On assigne aux joueurs leurs trous
            for (int i = 0; i < this.trous.Count / 2; i++)
            {
                this.joueur1.listTrouPerso.Add(this.trous.ElementAt(i));
            }
            System.Console.WriteLine("Nombre d'element dans la liste de trous " + this.trous.Count);
            for (int i = this.trous.Count - 1; i >= this.trous.Count / 2; i--)
            {
                this.joueur2.listTrouPerso.Add(this.trous.ElementAt(i));
            }

            this.moteur = new MoteurDeJeu(this.trous);
            this.moteur.currentJoueur = joueur1;
        }
示例#7
0
        private void updateCurrentJoueur()
        {
            System.Console.WriteLine("/**** Mise à jour du joueur courant : " + moteur.currentJoueur.nom);
            //Si le joueur courrant est le joueur 1
            if (this.moteur.currentJoueur.nom == this.joueur1.nom)
            {
                //this.joueur1.score = this.moteur.currentJoueur.score;
                PropertyChanged(this, new PropertyChangedEventArgs("joueur1"));
                this.moteur.currentJoueur = this.joueur2;
            }
            //Sinon c'est forcement le joueur 2
            else
            {
                //this.joueur2.score = this.moteur.currentJoueur.score;
                PropertyChanged(this, new PropertyChangedEventArgs("joueur2"));
                this.moteur.currentJoueur = this.joueur1;
            }

            if (this.moteur.typeDepartie == "local")
            {
                if (this.joueur2.nom == this.moteur.currentJoueur.nom)
                {
                    a.IsEnabled = true;
                    b.IsEnabled = true;
                    c.IsEnabled = true;
                    d.IsEnabled = true;
                    e.IsEnabled = true;
                    f.IsEnabled = true;
                    A.IsEnabled = false;
                    B.IsEnabled = false;
                    C.IsEnabled = false;
                    D.IsEnabled = false;
                    E.IsEnabled = false;
                    F.IsEnabled = false;
                }
                else
                {
                    a.IsEnabled = false;
                    b.IsEnabled = false;
                    c.IsEnabled = false;
                    d.IsEnabled = false;
                    e.IsEnabled = false;
                    f.IsEnabled = false;
                    A.IsEnabled = true;
                    B.IsEnabled = true;
                    C.IsEnabled = true;
                    D.IsEnabled = true;
                    E.IsEnabled = true;
                    F.IsEnabled = true;
                }
            }
            //Si c'est ensuite au tour du joueur 2 en vs ia
            if (this.moteur.typeDepartie == "IA" && this.joueur2.nom == this.moteur.currentJoueur.nom)
            {
                Trou bestChoix = this.moteur.meilleureActionIA();
                this.moteur.faireAction(bestChoix);
                PropertyChanged(this, new PropertyChangedEventArgs("joueur2"));
                this.moteur.currentJoueur = this.joueur1;
            }
            if (this.moteur.typeDepartie == "online")
            {
                foreach (TextBox trou in myTrous)
                {
                    trou.IsEnabled = !trou.IsEnabled;
                }
            }
            System.Console.WriteLine("/**** Mise à jour du joueur - maj : " + moteur.currentJoueur.nom);
            labelInformation.Text = "Au tour du joueur : " + this.moteur.currentJoueur.nom;
        }
示例#8
0
 public Trou(string nom, int nombreGraines, Trou predecesseur, Trou successeur) : this(nom, nombreGraines)
 {
     this.predecesseur = predecesseur;
     this.successeur   = successeur;
 }