38 lines
1.5 KiB
C++
38 lines
1.5 KiB
C++
#ifndef CHESS_ENGINE_MOVEGENERATOR_HPP
|
|
#define CHESS_ENGINE_MOVEGENERATOR_HPP
|
|
|
|
#include "Piece.hpp"
|
|
#include "Square.hpp"
|
|
#include "Move.hpp"
|
|
#include "CastlingRights.hpp"
|
|
#include "BitBoard.hpp"
|
|
#include "BoardState.hpp"
|
|
|
|
#include <optional>
|
|
#include <iosfwd>
|
|
#include <vector>
|
|
#include <memory>
|
|
|
|
class MoveGenerator {
|
|
public:
|
|
using MoveVec = std::vector<Move>;
|
|
|
|
static void generatePawnMoves(const BoardState &bs, const Square &from,
|
|
const std::optional<Square> &eps,
|
|
PieceColor color,
|
|
MoveVec &moves);
|
|
static void generatePawnMoves(const BoardState &bs, const Square &from, PieceColor color, MoveVec &moves);
|
|
static void generateBishopMoves(const BoardState &bs, const Square &from, PieceColor color, MoveVec &moves);
|
|
static void generateKingMoves(const BoardState &bs, const Square &from, PieceColor color, CastlingRights cr, MoveVec &moves);
|
|
static void generateRookMoves(const BoardState &bs, const Square &from, PieceColor color, MoveVec &moves);
|
|
static void generateQueenMoves(const BoardState &bs, const Square &from, PieceColor color, MoveVec &moves);
|
|
|
|
private:
|
|
static void generatePawnMoves(const BoardState &bs, const Square &from, BitBoard targets, PieceColor color, MoveVec &moves);
|
|
|
|
static void generateMoves(const Square &from, BitBoard movesBB, MoveVec &moves);
|
|
static void generateMovesWithPromotion(const Square &from, BitBoard movesBB, MoveVec &moves);
|
|
};
|
|
|
|
#endif //CHESS_ENGINE_MOVEGENERATOR_HPP
|