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); }
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; }
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); } }
public Fou(bool color, int x, int y, Echiquier e) : base(30, color, x, y, e) { }
public Cavalier(bool color, int x, int y, Echiquier e) : base(30, color, x, y, e) { }
public Tour(bool color, int x, int y, Echiquier e) : base(50, color, x, y, e) { }
public PionNoir(bool color, int x, int y, Echiquier e) : base(10, color, x, y, e) { }
/// <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; }
/// <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; }
public void Percept(int[] tabVal) { environement = new Echiquier(tabVal); }
private ChessGame(Echiquier echiquier) { _echiquier = echiquier; }
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; }
/// <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>(); }
public Dame(bool color, int x, int y, Echiquier e) : base(90, color, x, y, e) { }
/// <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; }
public Roi(bool color, int x, int y, Echiquier e) : base(900, color, x, y, e) { }
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(); } }
/// <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);