10#include <initializer_list>
17#include <forward_list>
31template <std::
size_t N = 8, std::
size_t M = N>
39 std::initializer_list<
40 Piece>>
const &board);
71 std::size_t m)
const noexcept;
148 template <class UnitaryFunction>
151 UnitaryFunction func,
152 std::optional<
Color> color_player =
std::nullopt) const noexcept;
205 template <
std::
size_t _N,
std::
size_t _M>
208 Board<_N, _M> const &board,
211 std::
size_t position,
214 template <
std::
size_t _N,
std::
size_t _M>
217 Board<_N, _M> const &board,
220 std::
size_t position,
223 template <
std::
size_t _N,
std::
size_t _M>
226 Board<_N, _M> const &board,
229 std::
size_t position,
243 std::optional<
bool> val_mes =
std::nullopt);
277 std::function<
bool(
Board<N, M> const &,
282 check_path) const noexcept;
294 Coord const &rook) const noexcept;
332 std::optional<
bool> val_mes =
std::nullopt);
390 std::optional<
bool> val_mes =
std::nullopt);
460 std::optional<
bool> val_mes =
std::nullopt);
483 std::optional<
bool> val_mes =
std::nullopt);
500 std::optional<
bool> val_mes =
std::nullopt);
520 std::optional<
bool> val_mes =
std::nullopt);
534 std::optional<
bool> val_mes =
std::nullopt);
553 std::function<
bool(
Board<N, M> const &,
558 std::optional<
bool> val_mes =
std::nullopt);
569 std::optional<
bool> val_mes);
615 std::optional<
bool> val_mes =
std::nullopt) noexcept;
626 std::
size_t colonne) noexcept;
638 std::ranges::common_range auto const &board,
639 std::array<
bool, N * M> &first_instance,
640 std::array<
Piece, N * M> &piece_board) noexcept;
653 std::array<
int, (N + 4) * (M + 2)>
654 &L_mailbox) noexcept;
673 template <
std::
size_t Q>
675 std::complex<
double>>,
676 2> const &arrayQubit,
677 std::
size_t position_board,
678 std::array<
std::
size_t, Q> const &tab_positions);
694 template <
std::
size_t Q>
696 std::
size_t position,
698 std::array<
std::
size_t, Q> const
699 &tab_positions) noexcept;
712 std::optional<
bool> val_mes =
std::nullopt);
727 std::optional<
bool> val_mes =
std::nullopt);
742 std::optional<
bool> val_mes =
std::nullopt);
748 std::vector<
std::pair<
std::array<
bool, N * M>,
749 std::complex<
double>>>
793#include "get_proba_move.tpp"
Matrix< std::complex< double >, N > CMatrix
Objet représentant les matrices carrées complexe de dimension N.
Definition CMatrix.hpp:15
#define _2POW(n)
Réalise l'opération 2^n.
Definition CMatrix.hpp:38
Color
Représente la couleur d'un joueur.
Definition Color.hpp:8
#define CONSTEXPR
Utilisé pour utiliser ou non constexpr.
Definition Constexpr.hpp:7
CONSTEXPR void move_split_slide(Coord const &s, Coord const &t1, Coord const &t2, std::function< bool(Board< N, M > const &, Coord const &, Coord const &, std::size_t, std::optional< Coord >)> check_path)
Mouvement "split slide".
CONSTEXPR bool mesure(Coord const &p, std::optional< bool > val_mes=std::nullopt)
Mesure la présence d'une pièce.
CONSTEXPR bool move_is_legal(Move const &move) const
Test si un mouvement est réalisable.
CONSTEXPR bool check_if_use_move_promote(Coord const &pos) const noexcept
Teste si les mouvement de la piece sont si la pièce est un pion un mouvement de promotion.
CONSTEXPR Piece const & operator()(std::size_t n, std::size_t m) const noexcept
Retourne un pointeur sur la piece à l'emplacement cible.
CONSTEXPR void move_classic(Coord const &s, Coord const &t, std::optional< bool > val_mes)
Mouvement classique d'une pièce (pion exclu)
CONSTEXPR void move_1_instance(std::array< bool, Q > const &case_modif, std::size_t position, CMatrix< _2POW(Q)> const &matrix, std::array< std::size_t, Q > const &tab_positions) noexcept
Fonction qui permet d'effectuer un mouvement sur une instance du plateau.
CONSTEXPR std::forward_list< Coord > get_list_normal_move(Coord const &pos) const
Renvoie la liste dans tous les mouvements classiques légaux d'une pièce.
CONSTEXPR double get_proba_mesure(Coord const &p) const noexcept
Renvoie la probabilité que la fonction mesure renvoie true, c'est-à-dire la proba que le mouvement so...
std::optional< Coord > m_ep
Contient la case sur laquelle il est possible de faire une prise en passant qui est vide (la case occ...
Definition Board.hpp:788
CONSTEXPR ~Board()=default
static CONSTEXPR std::size_t offset(std::size_t ligne, std::size_t colonne) noexcept
Renvoie une position 1D d'une coordonnée 2D.
void update_case(std::size_t pos) noexcept
Vérifie si la case à une possibilité de contenir une pièce, et si elle n'en a pas modifie m_piece_boa...
CONSTEXPR std::forward_list< Coord > get_list_split_move(Coord const &pos) const
Renvoie la liste de toutes les cases qu'une pièce peut atteindre lors d'un mouvement split,...
CONSTEXPR void move(Move const &movement, std::optional< bool > val_mes=std::nullopt)
Réalise un mouvement d'une pièce quelque soit le type du mouvement (classic, split,...
CONSTEXPR void queen_side_castle(Coord const &king, Coord const &rook, std::optional< bool > val_mes=std::nullopt)
Mouvement du grand roque.
CONSTEXPR bool mesure_castle(Coord const &king, Coord const &rook, std::optional< bool > val_mes=std::nullopt)
Fonction qui permet de mesurer la possibilité de faire le roque.
CONSTEXPR bool winning_position(Color c) const noexcept
Test si un plateau est gagnant pour une couleur.
CONSTEXPR void move_split_jump(Coord const &s, Coord const &t1, Coord const &t2)
Mouvement "split jump".
CONSTEXPR void move_split(Coord const &s, Coord const &t1, Coord const &t2)
Mouvement split d'une pièce (pion exclu)
std::array< Piece, N *M > m_piece_board
Le plateau indiquant le type des pièces.
Definition Board.hpp:755
CONSTEXPR void move_classic_slide(Coord const &s, Coord const &t, std::function< bool(Board< N, M > const &, Coord const &, Coord const &, std::size_t, std::optional< Coord >)> check_path, std::optional< bool > val_mes=std::nullopt)
Mouvement classique d'un pièce qui "glisse" (fou, dame, tour)
CONSTEXPR Board(std::initializer_list< std::initializer_list< Piece > > const &board)
CONSTEXPR std::forward_list< Move > get_list_promote(Coord const &pos) const noexcept
Renvoie la liste de toutes les promotions.
friend CONSTEXPR bool check_path_queen_1_instance(Board< _N, _M > const &board, Coord const &dpt, Coord const &arv, std::size_t position, std::optional< Coord >)
CONSTEXPR void modify(std::array< std::pair< std::array< bool, Q >, std::complex< double > >, 2 > const &arrayQubit, std::size_t position_board, std::array< std::size_t, Q > const &tab_positions)
fonction auxiliaire qui permet de modifier un plateau à l'aide d'un array de la forme du type de reto...
void update_board_classic() noexcept
std::array< int, N *M > m_S_mailbox
La petite mailbox.
Definition Board.hpp:760
CONSTEXPR void move_promotion(Move const &move, std::optional< bool > val_mes=std::nullopt)
Fonction qui permet de faire un mouvement de pion quelconque avec une promotion.
CONSTEXPR void move_merge(Coord const &s1, Coord const &s2, Coord const &t)
Mouvement de merge de pièce (pion exclu)
static CONSTEXPR std::size_t numberLines() noexcept
Retourne le nombre de ligne du plateau.
CONSTEXPR bool move_pawn(Coord const &s, Coord const &t, std::optional< bool > val_mes=std::nullopt) noexcept
Gère tout les mouvements d'un pion.
CONSTEXPR double get_proba_mesure_castle(Coord const &king, Coord const &rook) const noexcept
Renvoie laprobabilité que la fonction mesure_castle renvoie true, c'est-à-dire la proba que le mouvem...
CONSTEXPR void all_move(UnitaryFunction func, std::optional< Color > color_player=std::nullopt) const noexcept
Applique une fonction à l'entiéreté des mouvements possible.
std::vector< std::pair< std::array< bool, N *M >, std::complex< double > > > m_board
Le tableau de toutes les instances possibles du plateau.
Definition Board.hpp:750
static CONSTEXPR void init_mailbox(std::array< int, N *M > &S_mailbox, std::array< int,(N+4) *(M+2)> &L_mailbox) noexcept
Construit les mailbox en fonction des dimenssions du plateau.
CONSTEXPR void king_side_castle(Coord const &king, Coord const &rook, std::optional< bool > val_mes=std::nullopt)
Mouvement du petit roque.
friend CONSTEXPR bool check_path_straight_1_instance(Board< _N, _M > const &board, Coord const &dpt, Coord const &arv, std::size_t position, std::optional< Coord >)
CONSTEXPR void change_player() noexcept
Change le joueur actuel et passe la main à l'autre joueur.
static CONSTEXPR void range_to_2_array(std::ranges::common_range auto const &board, std::array< bool, N *M > &first_instance, std::array< Piece, N *M > &piece_board) noexcept
Initialise un plateau à l'aide d'un container 2D.
CONSTEXPR void move_merge_jump(Coord const &s, Coord const &t1, Coord const &t2)
Mouvement de merge.
CONSTEXPR bool move_pawn_one_step(Coord const &s, Coord const &t, std::optional< bool > val_mes=std::nullopt)
Le mouvement de piond'une case fonctionne comme un mouvementde jump classique, à la différence qu'un ...
CONSTEXPR void move_merge_slide(Coord const &s1, Coord const &s2, Coord const &t, std::function< bool(Board< N, M > const &, Coord const &, Coord const &, std::size_t, std::optional< Coord >)> check_path)
Mouvement de merge.
CONSTEXPR Board(Board &&)=default
static CONSTEXPR std::size_t numberColumns() noexcept
Retourne le nombre de colonne.
std::array< bool, 2 > m_k_castle
Vrai si les noirs[0] / blancs[1] peuvent faire le petit roque.
Definition Board.hpp:775
CONSTEXPR Board & operator=(Board const &)=default
void update_board() noexcept
Fonction qui permet de mattre à jour le plateau, car ce mouvement entraine l'apparition de plusieurs ...
CONSTEXPR Color get_current_player() const noexcept
Recupère la couleur du joueur au tour de jouer.
CONSTEXPR bool mesure_capture_slide(Coord const &s, Coord const &t, std::function< bool(Board< N, M > const &, Coord const &, Coord const &, std::size_t, std::optional< Coord >)> check_path, std::optional< bool > val_mes=std::nullopt)
Fonction qui permet de faire une mesure dans le cas d'un mouvement "capture slide".
CONSTEXPR double get_proba_move(Move const &move) const noexcept
Renvoie la probabilité que le mouvement soit réalisé
CONSTEXPR Board & operator=(Board &&)=default
std::array< int,(N+4) *(M+2)> m_L_mailbox
La grande mailbox.
Definition Board.hpp:765
friend class Piece
Definition Board.hpp:203
CONSTEXPR bool move_enpassant(Coord const &s, Coord const &t, Coord const &ep, std::optional< bool > val_mes=std::nullopt)
Permet d'effectuer un mouvement de prise en passant.
CONSTEXPR double get_proba(Coord const &pos) const noexcept
Renvoie la probabilité qu'il y ait une pièce à une position.
CONSTEXPR bool capture_pawn(Coord const &s, Coord const &t, std::optional< bool > val_mes=std::nullopt)
Mouvement de capture dun pion. A la différence d'un mouvement de "capture jump", on mesure la présenc...
CONSTEXPR bool move_pawn_two_step(Coord const &s, Coord const &t, std::optional< bool > val_mes=std::nullopt)
Le mouvement de pion de deux cases fonctionne comme un mouvement de slide classique,...
CONSTEXPR double get_proba_mesure_capture_slide(Coord const &s, Coord const &t, std::function< bool(Board< N, M > const &, Coord const &, Coord const &, std::size_t, std::optional< Coord >)> check_path) const noexcept
Renvoie la probabilité que la fonction mesure_capture_slide renvoie true, c'est-à-dire la proba que l...
Color m_color_current_player
Color::WHITE si c'est aux blanc de jouer aux noirs sinon.
Definition Board.hpp:770
CONSTEXPR void move_classic_jump(Coord const &s, Coord const &t, std::optional< bool > val_mes=std::nullopt)
Mouvement classique d'une pièce qui "saute" (cavalier, roi)
CONSTEXPR Board(Board const &)=default
std::array< bool, 2 > m_q_castle
Vrai si les noirs[0] / blancs[1] peuvent faire le grand roque.
Definition Board.hpp:780
CONSTEXPR Board(std::ranges::common_range auto const &board)
Initialise le plateau à partir d'un ensemble de pièce, les pièces ne sont pas divisées initialement.
friend CONSTEXPR bool check_path_diagonal_1_instance(Board< _N, _M > const &board, Coord const &dpt, Coord const &arv, std::size_t position, std::optional< Coord >)
Class conservant le type et la couleur d'une pièce. Elle permet aussi de recuperer ses mouvement poss...
Definition Piece.hpp:21
Definition Complex_printer.hpp:9
La structure qui représente une coordonnée sur le plateau.
Definition Coord.hpp:11
Stoque tout les mouvements possibles.
Definition Move.hpp:38