Jeu d'échec
 
Loading...
Searching...
No Matches
reine.cpp
Go to the documentation of this file.
1#include "pieces/reine.hpp"
2#include "echiquier.hpp"
3
5{
6
7 int row_org, col_org, row_dest, col_dest;
8 dest.get_row_col(row_dest, col_dest);
9 org.get_row_col(row_org, col_org);
10
11 if (!Piece::est_mouvement_legal(org, dest))
12 return false;
13 if (row_org == row_dest)
14 {
15 // Déplacement horizontal
16 int direction = (col_dest - col_org) > 0 ? 1 : -1;
17 for (int col = col_org + direction; col != col_dest; col += direction)
18 {
19 Piece* piece = echiquier->get_piece(Square(row_dest, col));
20 if (piece != nullptr)
21 return false;
22 }
23 return true;
24 }
25 else if (col_org == col_dest)
26 {
27 // Déplacement vertical
28 int direction = (row_dest - row_org) > 0 ? 1 : -1;
29 for (int row = row_org + direction; row != row_dest; row += direction)
30 {
31 Piece* piece = echiquier->get_piece(Square(row, col_dest));
32 if (piece != nullptr)
33 return false;
34 }
35 return true;
36 }
37 else if (abs(row_org - row_dest) == abs(col_org - col_dest))
38 {
39 // Déplacement diagonal
40 // Vérification si aucune pièce n'est présente entre la case d'origine et de destination
41 int directionRow = (row_dest - row_org) > 0 ? 1 : -1;
42 int directionCol = (col_dest - col_org) > 0 ? 1 : -1;
43 for (int row = row_org + directionRow, col = col_org + directionCol;
44 row != row_dest && col != col_dest;
45 row += directionRow, col += directionCol)
46 {
47 Piece* piece = echiquier->get_piece(Square(row, col));
48 if (piece != nullptr)
49 return false;
50 }
51 return true;
52 } else {
53 return false;
54 }
55}
56
57bool Reine::est_menace(Square org, Square dest) const {
58 return est_mouvement_legal(org, dest);
59}
Piece * get_piece(Square pos) const
Récupère une pièce se trouvant à la position donnée.
Classe décrivant une pièce.
Definition piece.hpp:12
Echiquier * echiquier
Echiquier possédant la pièce.
Definition piece.hpp:38
virtual bool est_mouvement_legal(Square origine, Square destination) const
Vérifie si un mouvement de la case origine à la case destination est valide.
Definition piece.cpp:6
bool est_menace(Square org, Square dest) const override
Vérifie si la pièce est une menace pour l'adversaire.
Definition reine.cpp:57
bool est_mouvement_legal(Square org, Square dest) const override
Vérifie si un mouvement de la case origine à la case destination est valide.
Definition reine.cpp:4
Décrit une case de l'échiquier.
Definition square.hpp:7
void get_row_col(int &row, int &col) const
Récupère la ligne et la colonne décrite par l'objet.
Definition square.hpp:15