예제 #1
0
파일: Agent.cs 프로젝트: kwidz/ChessGameAI
    private Coups minimaxFirst(int depth, Echiquier e, Boolean player)
    {
        int          bestValue = -9000;
        Coups        leBest    = null;
        List <Coups> lesCoups  = e.playable();

        foreach (Coups c in lesCoups)
        {
            e.playMove(c);
            int value = minimax(depth - 1, e, -10000, 10000, !player);
            e.undo();
            if (value > bestValue)
            {
                leBest    = c;
                bestValue = value;
            }
            if (value == bestValue)
            {
                Random rand = new Random();
                if (rand.Next(0, 2) == 0)
                {
                    leBest    = c;
                    bestValue = value;
                }
            }
        }
        return(leBest);
    }
예제 #2
0
 public Piece(int value, bool color, int x, int y, Echiquier e)
 {
     this.value    = value;
     this.color    = color;
     this.position = tabCoord[y * 8 + x];
     this.x        = x;
     this.e        = e;
     this.y        = y;
 }
예제 #3
0
파일: Agent.cs 프로젝트: kwidz/ChessGameAI
 private int minimax(int depth, Echiquier e, int alpha, int beta, Boolean player)
 {
     if (depth == 0)
     {
         return(e.evaluate());
     }
     if (player)
     {
         int          bestValue = -9000;
         List <Coups> lesCoups  = e.playable();
         foreach (Coups c in lesCoups)
         {
             e.playMove(c);
             bestValue = Math.Max(bestValue, minimax(depth - 1, e, alpha, beta, !player));
             e.undo();
             alpha = Math.Max(alpha, bestValue);
             if (beta <= alpha)
             {
                 return(bestValue);
             }
         }
         return(bestValue);
     }
     else
     {
         int          bestValue = 9000;
         List <Coups> lesCoups  = e.playableAdversary();
         foreach (Coups c in lesCoups)
         {
             e.playMove(c);
             bestValue = Math.Min(bestValue, minimax(depth - 1, e, alpha, beta, !player));
             e.undo();
             beta = Math.Min(beta, bestValue);
             if (beta <= alpha)
             {
                 return(bestValue);
             }
         }
         return(bestValue);
     }
 }
예제 #4
0
 public Fou(bool color, int x, int y, Echiquier e) : base(30, color, x, y, e)
 {
 }
예제 #5
0
 public Cavalier(bool color, int x, int y, Echiquier e) : base(30, color, x, y, e)
 {
 }
예제 #6
0
 public Tour(bool color, int x, int y, Echiquier e) : base(50, color, x, y, e)
 {
 }
예제 #7
0
 public PionNoir(bool color, int x, int y, Echiquier e) : base(10, color, x, y, e)
 {
 }
예제 #8
0
        /// <summary>
        /// retourne une liste de mouvement possible
        /// </summary>
        /// <param name="echiquier">il resois les coordonnées de la piece</param>
        /// <returns>retourne les mouvement possible dans une liste</returns>
        public override List<Point> MouvementPossible(Echiquier echiquier)
        {
            List<Point> lesMouvements = new List<Point>();
            Point pointAAjouter;

            Piece LaPieceDiago;
            //regarde vers la bas
            #region mouvement bas...
            //inisialise la case suivante
            int caseSuivante = 1;
            //met la condition de la boucle a vrai
            bool boucler = true;
            //boucle tant que la condition est respecter
            while (boucler)
            {
                //regarde si la case en bas est un case dans le table
                if (this.Coor__Y + caseSuivante <= 7 && this.Coor__Y + caseSuivante >= 0 && this.Coor__X + caseSuivante <= 7 && this.Coor__X + caseSuivante >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPieceTour
                    LaPieceDiago = echiquier.TabPiece[this.Coor__X + caseSuivante, this.Coor__Y + caseSuivante];
                    //regarde si la coordonnée en face de laPieceTour est vide    sinon...
                    if (LaPieceDiago.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivante, this.Coor__Y + caseSuivante));
                        //ensuite passe a la case suivante
                        caseSuivante++;
                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceDiago.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivante, this.Coor__Y + caseSuivante));
                        //ensuite arrete de regarder dans cette ligne
                        boucler = false;
                    }
                    //sinon arrete
                    else
                        boucler = false;
                }
                //sinon arrete
                else
                    boucler = false;
            }
            #endregion
            //regarde vers la haut
            #region mouvement haut....
            //remet la caseSuivante a regarder a 1
            caseSuivante = 1;
            //remet la boucle suivante a vrai
            boucler = true;
            //boucle tant que la condition est respecter
            while (boucler)
            {
                //regarde si la case en bas est un case dans le table
                if (this.Coor__Y + caseSuivante <= 7 && this.Coor__Y + caseSuivante >= 0 && this.Coor__X - caseSuivante <= 7 && this.Coor__X - caseSuivante >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPieceTour
                    LaPieceDiago = echiquier.TabPiece[this.Coor__X - caseSuivante, this.Coor__Y + caseSuivante];
                    //regarde si la coordonnée en face de laPieceTour est vide    sinon...
                    if (LaPieceDiago.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivante, this.Coor__Y + caseSuivante));
                        //ensuite passe a la case suivante
                        caseSuivante++;
                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceDiago.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivante, this.Coor__Y + caseSuivante));
                        //ensuite arrete de regarder dans cette ligne
                        boucler = false;
                    }
                    //sinon arrete
                    else
                        boucler = false;
                }
                //sinon arrete
                else
                    boucler = false;
            }
            #endregion
            //regarde vers la droite
            #region mouvement droite...
            //remet la boucle suivante a vrai
            boucler = true;
            //remet la caseSuivante a regarder a 1
            caseSuivante = 1;
            //boucle tant que la condition est respecter
            while (boucler)
            {
                //regarde si la case en bas est un case dans le table
                if (this.Coor__Y - caseSuivante <= 7 && this.Coor__Y - caseSuivante >= 0 && this.Coor__X + caseSuivante <= 7 && this.Coor__X + caseSuivante >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPieceTour
                    LaPieceDiago = echiquier.TabPiece[this.Coor__X + caseSuivante, this.Coor__Y - caseSuivante];
                    //regarde si la coordonnée en face de laPieceTour est vide    sinon...
                    if (LaPieceDiago.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivante, this.Coor__Y - caseSuivante));
                        //ensuite passe a la case suivante
                        caseSuivante++;
                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceDiago.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivante, this.Coor__Y - caseSuivante));
                        //ensuite arrete de regarder dans cette ligne
                        boucler = false;
                    }
                    //sinon arrete
                    else
                        boucler = false;
                }
                //sinon arrete
                else
                    boucler = false;
            }
            #endregion
            //regarde vers la gauche
            #region mouvement gauche....
            //remet la boucle suivante a vrai
            boucler = true;
            //remet la caseSuivante a regarder a 1
            caseSuivante = 1;
            while (boucler)
            {
                //regarde si la case en bas est un case dans le table
                if (this.Coor__Y - caseSuivante <= 7 && this.Coor__Y - caseSuivante >= 0 && this.Coor__X - caseSuivante <= 7 && this.Coor__X - caseSuivante >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPieceTour
                    LaPieceDiago = echiquier.TabPiece[this.Coor__X - caseSuivante, this.Coor__Y - caseSuivante];
                    //regarde si la coordonnée en face de laPieceTour est vide    sinon...
                    if (LaPieceDiago.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivante, this.Coor__Y - caseSuivante));
                        //ensuite passe a la case suivante
                        caseSuivante++;
                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceDiago.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivante, this.Coor__Y - caseSuivante));
                        //ensuite arrete de regarder dans cette ligne
                        boucler = false;
                    }
                    //sinon arrete
                    else
                        boucler = false;
                }
                //sinon arrete
                else
                    boucler = false;
            }
            #endregion

            Piece LaPieceHV;
            //regarde vers la bas
            #region mouvement bas...
            //inisialise la case suivante
            caseSuivante = 1;
            //met la condition de la boucle a vrai
            boucler = true;
            //boucle tant que la condition est respecter
            while (boucler)
            {
                //regarde si la case en bas est un case dans le table
                if (this.Coor__Y + caseSuivante <= 7 && this.Coor__Y + caseSuivante >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPieceTour
                    LaPieceHV = echiquier.TabPiece[this.Coor__X, this.Coor__Y + caseSuivante];
                    //regarde si la coordonnée en face de laPieceTour est vide    sinon...
                    if (LaPieceHV.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X, this.Coor__Y + caseSuivante));
                        //ensuite passe a la case suivante
                        caseSuivante++;
                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceHV.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X, this.Coor__Y + caseSuivante));
                        //ensuite arrete de regarder dans cette ligne
                        boucler = false;
                    }
                    //sinon arrete
                    else
                        boucler = false;
                }
                //sinon arrete
                else
                    boucler = false;
            }
            #endregion
            //regarde vers la haut
            #region mouvement haut....
            //remet la caseSuivante a regarder a 1
            caseSuivante = 1;
            //remet la boucle suivante a vrai
            boucler = true;
            //boucle tant que la condition est respecter
            while (boucler)
            {
                //regarde si la case en bas est un case dans le table
                if (this.Coor__Y - caseSuivante <= 7 && this.Coor__Y - caseSuivante >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPieceTour
                    LaPieceHV = echiquier.TabPiece[this.Coor__X, this.Coor__Y - caseSuivante];
                    //regarde si la coordonnée en face de laPieceTour est vide    sinon...
                    if (LaPieceHV.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X, this.Coor__Y - caseSuivante));
                        //ensuite passe a la case suivante
                        caseSuivante++;
                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceHV.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X, this.Coor__Y - caseSuivante));
                        //ensuite arrete de regarder dans cette ligne
                        boucler = false;
                    }
                    //sinon arrete
                    else
                        boucler = false;
                }
                //sinon arrete
                else
                    boucler = false;
            }
            #endregion
            //regarde vers la droite
            #region mouvement droite...
            //remet la boucle suivante a vrai
            boucler = true;
            //remet la caseSuivante a regarder a 1
            caseSuivante = 1;
            //boucle tant que la condition est respecter
            while (boucler)
            {
                //regarde si la case en bas est un case dans le table
                if (this.Coor__X + caseSuivante <= 7 && this.Coor__X + caseSuivante >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPieceTour
                    LaPieceHV = echiquier.TabPiece[this.Coor__X + caseSuivante, this.Coor__Y];
                    //regarde si la coordonnée en face de laPieceTour est vide    sinon...
                    if (LaPieceHV.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivante, this.Coor__Y));
                        //ensuite passe a la case suivante
                        caseSuivante++;
                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceHV.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivante, this.Coor__Y));
                        //ensuite arrete de regarder dans cette ligne
                        boucler = false;
                    }
                    //sinon arrete
                    else
                        boucler = false;
                }
                //sinon arrete
                else
                    boucler = false;
            }
            #endregion
            //regarde vers la gauche
            #region mouvement gauche....
            //remet la boucle suivante a vrai
            boucler = true;
            //remet la caseSuivante a regarder a 1
            caseSuivante = 1;
            while (boucler)
            {
                //regarde si la case en bas est un case dans le table
                if (this.Coor__X - caseSuivante <= 7 && this.Coor__X - caseSuivante >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPieceTour
                    LaPieceHV = echiquier.TabPiece[this.Coor__X - caseSuivante, this.Coor__Y];
                    //regarde si la coordonnée en face de laPieceTour est vide    sinon...
                    if (LaPieceHV.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivante, this.Coor__Y));
                        //ensuite passe a la case suivante
                        caseSuivante++;
                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceHV.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivante, this.Coor__Y));
                        //ensuite arrete de regarder dans cette ligne
                        boucler = false;
                    }
                    //sinon arrete
                    else
                        boucler = false;
                }
                //sinon arrete
                else
                    boucler = false;
            }
            #endregion
            //retourne les mouvements possibles dans la liste
            return lesMouvements;
        }
예제 #9
0
 /// <summary>
 /// retourne une liste de mouvement possible
 /// </summary>
 /// <param name="echiquier">il resois les coordonnées de la piece</param>
 /// <returns>retourne les mouvement possible dans une liste</returns>
 public override List<Point> MouvementPossible(Echiquier echiquier)
 {
     List<Point> lesMouvements = new List<Point>();
     return lesMouvements;
 }
예제 #10
0
파일: Agent.cs 프로젝트: kwidz/ChessGameAI
 public void Percept(int[] tabVal)
 {
     environement = new Echiquier(tabVal);
 }
예제 #11
0
 private ChessGame(Echiquier echiquier)
 {
     _echiquier = echiquier;
 }
예제 #12
0
 private ChessGame(Echiquier echiquier)
 {
     _echiquier = echiquier;
 }
예제 #13
0
        public override List<Point> MouvementPossible(Echiquier echiquier)
        {
            List<Point> lesMouvements = new List<Point>();
            Point pointAAjouter;
            Piece LaPieceCheval;
            //de gauche a droite
            #region mouvement droite bas...
            //inisialise la case suivante
            int caseSuivanteX = 2;
            int caseSuivanteY = 1;

                //regarde si la case en bas est un case dans le table
            if (this.Coor__X + caseSuivanteX <= 7 && this.Coor__X + caseSuivanteX >= 0 && this.Coor__Y + caseSuivanteY <= 7 && this.Coor__Y + caseSuivanteY >= 0)
            {
                //si oui
                //sauvegarde la coordonnée en face de laPiece
                LaPieceCheval = echiquier.TabPiece[this.Coor__X + caseSuivanteX, this.Coor__Y + caseSuivanteY];
                //regarde si la coordonnée en face de laPiece est vide    sinon...
                if (LaPieceCheval.CodeNom == FormEchec.TypePion.Vide)
                {
                    //si oui j'ajoute la coordonnée en avant de lui dans une list
                    lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivanteX, this.Coor__Y + caseSuivanteY));

                }
                // sinon si la case en avant est ennemie
                else if (LaPieceCheval.Couleur != echiquier.CouleurEnCours)
                {
                    //si oui j'ajoute la coordonnée en avant de lui dans une list
                    lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivanteX, this.Coor__Y + caseSuivanteY));
                    //ensuite arrete de regarder dans cette ligne

                }
            }

            #endregion

            #region mouvement droite haut...
            //inisialise la case suivante
            caseSuivanteX = 2;
            caseSuivanteY = 1;

                //regarde si la case en bas est un case dans le table
            if (this.Coor__X + caseSuivanteX <= 7 && this.Coor__X + caseSuivanteX >= 0 && this.Coor__Y - caseSuivanteY <= 7 && this.Coor__Y - caseSuivanteY >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPiece
                    LaPieceCheval = echiquier.TabPiece[this.Coor__X + caseSuivanteX, this.Coor__Y - caseSuivanteY];
                    //regarde si la coordonnée en face de laPiece est vide    sinon...
                    if (LaPieceCheval.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivanteX, this.Coor__Y - caseSuivanteY));

                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceCheval.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivanteX, this.Coor__Y - caseSuivanteY));
                        //ensuite arrete de regarder dans cette ligne

                    }

            }
            #endregion

            #region mouvement gauche haut...
            //inisialise la case suivante
            caseSuivanteX = 2;
            caseSuivanteY = 1;

                //regarde si la case en bas est un case dans le table
            if (this.Coor__X - caseSuivanteX <= 7 && this.Coor__X - caseSuivanteX >= 0 && this.Coor__Y - caseSuivanteY <= 7 && this.Coor__Y - caseSuivanteY >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPiece
                    LaPieceCheval = echiquier.TabPiece[this.Coor__X - caseSuivanteX, this.Coor__Y - caseSuivanteY];
                    //regarde si la coordonnée en face de laPiece est vide    sinon...
                    if (LaPieceCheval.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X- caseSuivanteX, this.Coor__Y - caseSuivanteY));

                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceCheval.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivanteX, this.Coor__Y - caseSuivanteY));
                        //ensuite arrete de regarder dans cette ligne

                    }

            }
            #endregion

            #region mouvement gauche haut...
            //inisialise la case suivante
            caseSuivanteX = 2;
            caseSuivanteY = 1;

                //regarde si la case en bas est un case dans le table
            if (this.Coor__X - caseSuivanteX <= 7 && this.Coor__X - caseSuivanteX >= 0 && this.Coor__Y + caseSuivanteY <= 7 && this.Coor__Y + caseSuivanteY >= 0)
            {
                //si oui
                //sauvegarde la coordonnée en face de laPiece
                LaPieceCheval = echiquier.TabPiece[this.Coor__X - caseSuivanteX, this.Coor__Y + caseSuivanteY];
                //regarde si la coordonnée en face de laPiece est vide    sinon...
                if (LaPieceCheval.CodeNom == FormEchec.TypePion.Vide)
                {
                    //si oui j'ajoute la coordonnée en avant de lui dans une list
                    lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivanteX, this.Coor__Y + caseSuivanteY));

                }
                // sinon si la case en avant est ennemie
                else if (LaPieceCheval.Couleur != echiquier.CouleurEnCours)
                {
                    //si oui j'ajoute la coordonnée en avant de lui dans une list
                    lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivanteX, this.Coor__Y + caseSuivanteY));
                    //ensuite arrete de regarder dans cette ligne

                }
            }
            #endregion

            //de haut en bas
            #region mouvement droite bas...
            //inisialise la case suivante
            caseSuivanteX = 1;
            caseSuivanteY = 2;

                //regarde si la case en bas est un case dans le table
            if (this.Coor__X + caseSuivanteX <= 7 && this.Coor__X + caseSuivanteX >= 0 && this.Coor__Y + caseSuivanteY <= 7 && this.Coor__Y + caseSuivanteY >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPiece
                    LaPieceCheval = echiquier.TabPiece[this.Coor__X + caseSuivanteX, this.Coor__Y + caseSuivanteY];
                    //regarde si la coordonnée en face de laPiece est vide    sinon...
                    if (LaPieceCheval.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivanteX, this.Coor__Y + caseSuivanteY));

                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceCheval.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivanteX, this.Coor__Y + caseSuivanteY));
                        //ensuite arrete de regarder dans cette ligne

                    }

            }
            #endregion

            #region mouvement droite haut...
            //inisialise la case suivante
            caseSuivanteX = 1;
            caseSuivanteY = 2;

                //regarde si la case en bas est un case dans le table
            if (this.Coor__X + caseSuivanteX <= 7 && this.Coor__X + caseSuivanteX >= 0 && this.Coor__Y - caseSuivanteY <= 7 && this.Coor__Y - caseSuivanteY >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPiece
                    LaPieceCheval = echiquier.TabPiece[this.Coor__X + caseSuivanteX, this.Coor__Y - caseSuivanteY];
                    //regarde si la coordonnée en face de laPiece est vide    sinon...
                    if (LaPieceCheval.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivanteX, this.Coor__Y - caseSuivanteY));

                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceCheval.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X + caseSuivanteX, this.Coor__Y - caseSuivanteY));
                        //ensuite arrete de regarder dans cette ligne

                    }

            }
            #endregion

            #region mouvement gauche haut...
            //inisialise la case suivante
            caseSuivanteX = 1;
            caseSuivanteY = 2;

                //regarde si la case en bas est un case dans le table
            if (this.Coor__X - caseSuivanteX <= 7 && this.Coor__X - caseSuivanteX >= 0 && this.Coor__Y - caseSuivanteY <= 7 && this.Coor__Y - caseSuivanteY >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPiece
                    LaPieceCheval = echiquier.TabPiece[this.Coor__X - caseSuivanteX, this.Coor__Y - caseSuivanteY];
                    //regarde si la coordonnée en face de laPiece est vide    sinon...
                    if (LaPieceCheval.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivanteX, this.Coor__Y - caseSuivanteY));

                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceCheval.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivanteX, this.Coor__Y - caseSuivanteY));
                        //ensuite arrete de regarder dans cette ligne

                    }

            }
            #endregion

            #region mouvement gauche haut...
            //inisialise la case suivante
            caseSuivanteX = 1;
            caseSuivanteY = 2;

                //regarde si la case en bas est un case dans le table
            if (this.Coor__X - caseSuivanteX <= 7 && this.Coor__X - caseSuivanteX >= 0 && this.Coor__Y + caseSuivanteY <= 7 && this.Coor__Y + caseSuivanteY >= 0)
                {
                    //si oui
                    //sauvegarde la coordonnée en face de laPiece
                    LaPieceCheval = echiquier.TabPiece[this.Coor__X - caseSuivanteX, this.Coor__Y + caseSuivanteY];
                    //regarde si la coordonnée en face de laPiece est vide    sinon...
                    if (LaPieceCheval.CodeNom == FormEchec.TypePion.Vide)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivanteX, this.Coor__Y + caseSuivanteY));
                    }
                    // sinon si la case en avant est ennemie
                    else if (LaPieceCheval.Couleur != echiquier.CouleurEnCours)
                    {
                        //si oui j'ajoute la coordonnée en avant de lui dans une list
                        lesMouvements.Add(pointAAjouter = new Point(this.Coor__X - caseSuivanteX, this.Coor__Y + caseSuivanteY));
                        //ensuite arrete de regarder dans cette ligne
                    }

            }
            #endregion
            //retourne les mouvements possibles dans la liste
            return lesMouvements;
        }
예제 #14
0
        /// <summary>
        /// Initialise le contenu
        /// </summary>
        public void Initialiser()
        {
            for (int i = 0; i < tableLayoutPanel.ColumnCount; i++)
            {
                for (int j = 0; j < tableLayoutPanel.RowCount; j++)
                {
                    PictureBox boite = new PictureBox();
                    boite.Width = imageListPiece.ImageSize.Width;
                    boite.Height = imageListPiece.ImageSize.Height;
                    boite.Margin = new Padding(0,0,0,0);
                    tableLayoutPanel.Controls.Add(boite, i, j);
                    boite.Click += new System.EventHandler(Case_Click);
                    boite.BackColor = Color.Transparent;
                }
            }

            leJeu = new Echiquier();
            leJeu.NouvellePartie();
            selectionX = -1;
            selectionY = -1;
            listeMouvementPossible = new List<Point>();
        }
예제 #15
0
 public Dame(bool color, int x, int y, Echiquier e) : base(90, color, x, y, e)
 {
 }
예제 #16
0
        /// <summary>
        /// retourne une liste de mouvement possible
        /// </summary>
        /// <param name="echiquier">il resois les coordonnées de la piece</param>
        /// <returns>retourne les mouvement possible dans une liste</returns>
        public override List<Point> MouvementPossible(Echiquier echiquier)
        {
            List<Point> lesMouvements = new List<Point>();
            Point pointAAjouter;
            int multiplicateurSiNoir = (this.Couleur == FormEchec.CodeCouleurPion.Noir) ? 1 : -1;

            if (echiquier.TabPiece[this.Coor__X, this.Coor__Y + multiplicateurSiNoir].CodeNom == FormEchec.TypePion.Vide)
            {
                pointAAjouter = new Point(this.Coor__X, this.Coor__Y + multiplicateurSiNoir);
                lesMouvements.Add(pointAAjouter);
                if (this.NbMouvement == 0 && echiquier.TabPiece[this.Coor__X, this.Coor__Y + 2 * multiplicateurSiNoir].CodeNom == FormEchec.TypePion.Vide)
                {
                    pointAAjouter = new Point(this.Coor__X, this.Coor__Y + 2 * multiplicateurSiNoir);
                    lesMouvements.Add(pointAAjouter);
                }
            }

            // faire le cas général des case index 1 a 6
            if (this.Coor__X >= 1 && this.Coor__X <= 6)
            {

                Piece laPieceEnDiagonale = echiquier.TabPiece[this.Coor__X + 1, this.Coor__Y + multiplicateurSiNoir];
                if (laPieceEnDiagonale.CodeNom != FormEchec.TypePion.Vide)
                {
                    if (laPieceEnDiagonale.Couleur != echiquier.CouleurEnCours)
                    {
                        pointAAjouter = new Point(this.Coor__X + 1, this.Coor__Y + multiplicateurSiNoir);
                        lesMouvements.Add(pointAAjouter);
                    }
                }
                //en passant
                else
                {
                    Piece laPieceACoteDroite = echiquier.TabPiece[this.Coor__X + 1, this.Coor__Y];
                    if (laPieceACoteDroite.Couleur != this.Couleur && echiquier.DernierMouvement.X == laPieceACoteDroite.Coor__X && echiquier.DernierMouvement.Y == laPieceACoteDroite.Coor__Y)
                    {
                        if (laPieceACoteDroite.NbMouvement == 1 && (laPieceACoteDroite.CodeNom == FormEchec.TypePion.PionBlanc || laPieceACoteDroite.CodeNom == FormEchec.TypePion.PionNoir))
                        {
                            if (this.Couleur == FormEchec.CodeCouleurPion.Noir && this.Coor__Y == 4)
                            {
                                pointAAjouter = new Point(this.Coor__X + 1, this.Coor__Y + multiplicateurSiNoir);
                                lesMouvements.Add(pointAAjouter);
                            }
                            else if (this.Couleur == FormEchec.CodeCouleurPion.Blanc && this.Coor__Y == 3)
                            {
                                pointAAjouter = new Point(this.Coor__X + 1, this.Coor__Y + multiplicateurSiNoir);
                                lesMouvements.Add(pointAAjouter);
                            }
                        }
                    }
                }

                laPieceEnDiagonale = echiquier.TabPiece[this.Coor__X - 1, this.Coor__Y + multiplicateurSiNoir];
                if (laPieceEnDiagonale.CodeNom != FormEchec.TypePion.Vide)
                {
                    if (laPieceEnDiagonale.Couleur != echiquier.CouleurEnCours)
                    {
                        pointAAjouter = new Point(this.Coor__X - 1, this.Coor__Y + multiplicateurSiNoir);
                        lesMouvements.Add(pointAAjouter);
                    }
                }
                //en passant
                else
                {
                    Piece laPieceACoteGauche = echiquier.TabPiece[this.Coor__X - 1, this.Coor__Y];
                    if (laPieceACoteGauche.Couleur != this.Couleur && echiquier.DernierMouvement.X == laPieceACoteGauche.Coor__X && echiquier.DernierMouvement.Y == laPieceACoteGauche.Coor__Y)
                    {
                        if (laPieceACoteGauche.NbMouvement == 1 && (laPieceACoteGauche.CodeNom == FormEchec.TypePion.PionBlanc || laPieceACoteGauche.CodeNom == FormEchec.TypePion.PionNoir))
                        {
                            if (this.Couleur == FormEchec.CodeCouleurPion.Noir && this.Coor__Y == 4)
                            {
                                pointAAjouter = new Point(this.Coor__X - 1, this.Coor__Y + multiplicateurSiNoir);
                                lesMouvements.Add(pointAAjouter);
                            }
                            else if (this.Couleur == FormEchec.CodeCouleurPion.Blanc && this.Coor__Y == 3)
                            {
                                pointAAjouter = new Point(this.Coor__X - 1, this.Coor__Y + multiplicateurSiNoir);
                                lesMouvements.Add(pointAAjouter);
                            }
                        }
                    }
                }
            }

            // faire le cas spécial des case index 0 et 7
            else if (this.Coor__X == 0)
            {
                if (echiquier.TabPiece[this.Coor__X + 1, this.Coor__Y + multiplicateurSiNoir].CodeNom != FormEchec.TypePion.Vide)
                {
                    if (echiquier.TabPiece[this.Coor__X + 1, this.Coor__Y + multiplicateurSiNoir].Couleur != echiquier.CouleurEnCours)
                    {
                        pointAAjouter = new Point(this.Coor__X + 1, this.Coor__Y + multiplicateurSiNoir);
                        lesMouvements.Add(pointAAjouter);
                    }
                }
                else
                {
                    Piece laPieceACoteDroite = echiquier.TabPiece[this.Coor__X + 1, this.Coor__Y];
                    if (laPieceACoteDroite.Couleur != this.Couleur && echiquier.DernierMouvement.X == laPieceACoteDroite.Coor__X && echiquier.DernierMouvement.Y == laPieceACoteDroite.Coor__Y)
                    {
                        if (laPieceACoteDroite.NbMouvement == 1 && (laPieceACoteDroite.CodeNom == FormEchec.TypePion.PionBlanc || laPieceACoteDroite.CodeNom == FormEchec.TypePion.PionNoir))
                        {
                            if (this.Couleur == FormEchec.CodeCouleurPion.Noir && this.Coor__Y == 4)
                            {
                                pointAAjouter = new Point(this.Coor__X + 1, this.Coor__Y + multiplicateurSiNoir);
                                lesMouvements.Add(pointAAjouter);
                            }
                            else if (this.Couleur == FormEchec.CodeCouleurPion.Blanc && this.Coor__Y == 3)
                            {
                                pointAAjouter = new Point(this.Coor__X + 1, this.Coor__Y + multiplicateurSiNoir);
                                lesMouvements.Add(pointAAjouter);
                            }
                        }
                    }
                }
            }
            else
            {
                if (echiquier.TabPiece[this.Coor__X - 1, this.Coor__Y + multiplicateurSiNoir].CodeNom != FormEchec.TypePion.Vide)
                {
                    if (echiquier.TabPiece[this.Coor__X - 1, this.Coor__Y + multiplicateurSiNoir].Couleur != echiquier.CouleurEnCours)
                    {
                        pointAAjouter = new Point(this.Coor__X - 1, this.Coor__Y + multiplicateurSiNoir);
                        lesMouvements.Add(pointAAjouter);
                    }
                }
                else
                {
                    Piece laPieceACoteGauche = echiquier.TabPiece[this.Coor__X - 1, this.Coor__Y];
                    if (laPieceACoteGauche.Couleur != this.Couleur && echiquier.DernierMouvement.X == laPieceACoteGauche.Coor__X && echiquier.DernierMouvement.Y == laPieceACoteGauche.Coor__Y)
                    {
                        if (laPieceACoteGauche.NbMouvement == 1 && (laPieceACoteGauche.CodeNom == FormEchec.TypePion.PionBlanc || laPieceACoteGauche.CodeNom == FormEchec.TypePion.PionNoir))
                        {
                            if (this.Couleur == FormEchec.CodeCouleurPion.Noir && this.Coor__Y == 4)
                            {
                                pointAAjouter = new Point(this.Coor__X - 1, this.Coor__Y + multiplicateurSiNoir);
                                lesMouvements.Add(pointAAjouter);
                            }
                            else if (this.Couleur == FormEchec.CodeCouleurPion.Blanc && this.Coor__Y == 3)
                            {
                                pointAAjouter = new Point(this.Coor__X - 1, this.Coor__Y + multiplicateurSiNoir);
                                lesMouvements.Add(pointAAjouter);
                            }
                        }
                    }
                }
            }
            return lesMouvements;
        }
예제 #17
0
 public Roi(bool color, int x, int y, Echiquier e) : base(900, color, x, y, e)
 {
 }
예제 #18
0
        static void Main(string[] args)
        {
            try
            {
                bool     stop   = false;
                int[]    tabVal = new int[64];
                String   value;
                String[] coord    = new String[] { "", "", "" };
                String[] tabCoord = new string[] { "a8", "b8", "c8", "d8", "e8", "f8", "g8", "h8",
                                                   "a7", "b7", "c7", "d7", "e7", "f7", "g7", "h7",
                                                   "a6", "b6", "c6", "d6", "e6", "f6", "g6", "h6",
                                                   "a5", "b5", "c5", "d5", "e5", "f5", "g5", "h5",
                                                   "a4", "b4", "c4", "d4", "e4", "f4", "g4", "h4",
                                                   "a3", "b3", "c3", "d3", "e3", "f3", "g3", "h3",
                                                   "a2", "b2", "c2", "d2", "e2", "f2", "g2", "h2",
                                                   "a1", "b1", "c1", "d1", "e1", "f1", "g1", "h1" };

                while (!stop)
                {
                    using (var mmf = MemoryMappedFile.OpenExisting("plateau"))
                    {
                        using (var mmf2 = MemoryMappedFile.OpenExisting("repAI2"))
                        {
                            Mutex mutexStartAI2 = Mutex.OpenExisting("mutexStartAI2");
                            Mutex mutexAI2      = Mutex.OpenExisting("mutexAI2");
                            mutexAI2.WaitOne();
                            mutexStartAI2.WaitOne();

                            using (var accessor = mmf.CreateViewAccessor())
                            {
                                ushort Size   = accessor.ReadUInt16(0);
                                byte[] Buffer = new byte[Size];
                                accessor.ReadArray(0 + 2, Buffer, 0, Buffer.Length);

                                value = ASCIIEncoding.ASCII.GetString(Buffer);
                                if (value == "stop")
                                {
                                    stop = true;
                                }
                                else
                                {
                                    String[] substrings = value.Split(',');
                                    for (int i = 0; i < substrings.Length; i++)
                                    {
                                        tabVal[i] = Convert.ToInt32(substrings[i]);
                                    }
                                }
                            }
                            if (!stop)
                            {
                                /******************************************************************************************************/
                                /***************************************** ECRIRE LE CODE DE L'IA *************************************/
                                /******************************************************************************************************/


                                //Commenter le code si dessous pour jouer en ia

                                Echiquier    e        = new Echiquier(tabVal);
                                List <Coups> lesCoups = e.playable();
                                Random       rnd      = new Random();
                                int          r        = rnd.Next(lesCoups.Count);
                                Coups        move     = lesCoups[r];

                                /************************************
                                 *
                                 * Agent a = new Agent();
                                 * a.Percept(tabVal);
                                 * a.SearchBestMove();
                                 * Coups move = a.joue();
                                 */
                                coord[0] = move.positionDepart;
                                coord[1] = move.positionArrivee;

                                /********************************************************************************************************/
                                /********************************************************************************************************/
                                /********************************************************************************************************/

                                using (var accessor = mmf2.CreateViewAccessor())
                                {
                                    value = coord[0];
                                    for (int i = 1; i < coord.Length; i++)
                                    {
                                        value += "," + coord[i];
                                    }
                                    byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(value);
                                    accessor.Write(0, (ushort)Buffer.Length);
                                    accessor.WriteArray(0 + 2, Buffer, 0, Buffer.Length);
                                }
                            }
                            mutexAI2.ReleaseMutex();
                            mutexStartAI2.ReleaseMutex();
                        }
                    }
                }
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine("Memory-mapped file does not exist. Run Process A first.");
                Console.ReadLine();
            }
        }
예제 #19
0
 /// <summary>
 /// Retourne la liste des mouvements possible de la pièce
 /// </summary>
 /// <param name="echiquier">L'échiquier dans lequel la pièce est</param>
 /// <returns>Retourne la liste des points possibles</returns>
 public abstract List<Point> MouvementPossible(Echiquier echiquier);