15 for (
auto & row : board)
17 for (
auto & col : row)
45 for (
int i = 0; i < 8; i++)
75 if(is_check)
return false;
98 auto &vec = pieces[player];
99 auto it = std::find_if(vec.begin(), vec.end(), [
id](
const Piece* piece) {
100 return piece->get_id() == id;
102 if(it != vec.end())
return *it;
107 for(
int row = 0; row < 8; row++){
108 for(
int col = 0; col < 8; col++){
110 if(piece ==
nullptr)
continue;
111 if(piece->
get_color() == player)
continue;
124 for (
int row = 0; row <= 7; row++)
126 for (
int col = 0; col <= 7; col++)
129 output += (piece ==
nullptr ?
"" : piece->canonical(
true,
true)) +
",";
137 std::cout <<
" a b c d e f g h " << std::endl;
138 std::cout <<
"┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐" << std::endl;
140 for (
int row = 7; row >= 0; row--)
142 if (row != 7) std::cout <<
"├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤" << std::endl;
144 for (
int col = 0; col <= 7; col++)
147 std::cout <<
" " << ((piece ==
nullptr) ?
" " : piece->
get_name()) <<
" │";
149 std::cout <<
" " << row + 1 << std::endl;
152 std::cout <<
"└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘" << std::endl;
158 if (piece ==
nullptr)
return false;
163 Piece *old_board[8][8];
165 for(
int i = 0; i < 8; i++){
166 std::copy_n(board[i], 8, old_board[i]);
175 if(roi_player !=
nullptr) {
185 for(
int i = 0; i < 8; i++){
186 std::copy_n(old_board[i], 8, board[i]);
197 auto vect = pieces[player];
198 for (
Piece *piece : vect) {
199 if(!piece->get_is_active())
continue;
200 for (
int i = 0; i < 8; ++i) {
201 for (
int j = 0; j < 8; ++j) {
218 if (piece ==
nullptr)
return false;
219 if (!
check_move(from, to, player))
return false;
229 if (roi_player !=
nullptr && is_check) {
243 moves.emplace_back(*piece, from, to);
249 for (
auto piece : pieces[
WHITE])
set_pos(piece, piece->get_pos());
250 for (
auto piece : pieces[
BLACK])
set_pos(piece, piece->get_pos());
257 return board[7 - row][col];
264 board[7 - row][col] = piece;
265 if(piece ==
nullptr)
return;
271 for (
Piece *piece : pieces[
WHITE])
delete piece;
272 for (
Piece *piece : pieces[
BLACK])
delete piece;
287 new_piece->set_has_moved(
true);
288 vect.push_back(new_piece);
292 auto new_piece =
new Reine(
300 new_piece->set_has_moved(
true);
301 vect.push_back(new_piece);
305 auto new_piece =
new Fou(
313 new_piece->set_has_moved(
true);
314 vect.push_back(new_piece);
318 auto new_piece =
new Tour(
326 new_piece->set_has_moved(
true);
327 vect.push_back(new_piece);
Cavalier dans le jeu d'échec.
bool check_stalemate(Color player)
Vérifie si le joueur est en situation de pat.
Piece * get_piece(Square pos) const
Récupère une pièce se trouvant à la position donnée.
void set_pos(Piece *piece, Square pos)
Place une pièce à un endroit sur le plateau.
bool check_castling(Color player, bool big) const
Vérifie si un joueur peut roquer ou non.
bool promote(Pion *pion, const std::string &type)
Permet de promouvoir un pion en une autre pièce.
void setup()
Place les pions et pièces à leur emplacement de départ.
bool move(Square from, Square to, Color player)
Permet d'effectuer un mouvement de pièce.
const std::list< Move > & get_moves() const
Récupère la liste des coups effectués lors de la partie.
Piece * get_piece_from_id(int id, Color player) const
Récupère une pièce d'un joueur à partir de son id.
void print_board() const
Affiche l'échiquier.
bool check_move(Square from, Square to, Color player)
Vérifie si le coup entre from et to est légal pour le joueur player.
bool castling(Color player, bool big)
Effectue le roque d'un joueur.
bool check_check(Color player, Square pos, Piece *exclude=nullptr) const
Vérifie si une case est menacée par un joueur.
void set_is_check(bool is_check)
Définit s'il y a un échec ou non.
std::string canonical_position() const
Retourne la position canonique de l'échiquier.
bool check_check_mate(Color player)
Vérifie si le joueur est en situation d'échec et mat.
Classe décrivant une pièce.
void set_pos(const Square pos)
Définit la position de la pièce.
virtual std::string get_name() const
Square get_pos() const
Récupère la position actuelle de la pièce.
bool get_has_moved() const
Vérifie si la pièce a déjà bougée ou non.
virtual bool est_mouvement_legal(Square origine, Square destination) const
Vérifie si un mouvement de la case origine à la case destination est valide.
virtual void move_event(Square from)
Fonction appelée quand une pièce bouge.
virtual bool est_menace(Square origine, Square destination) const
Vérifie si la pièce est une menace pour l'adversaire.
void set_is_active(bool is_active)
Définit si la pièce est mangée ou non.
Pion dans le jeu d'échec.
Reine dans le jeu d'échec.
void set_is_checked(bool is_checked)
Définit si le roi est en échec ou non.
Décrit une case de l'échiquier.
void get_row_col(int &row, int &col) const
Récupère la ligne et la colonne décrite par l'objet.
Tour dans le jeu d'échec.