[Board] Implement MoveGenerator
This commit is contained in:
24
Board.hpp
24
Board.hpp
@@ -6,10 +6,12 @@
|
||||
#include "Move.hpp"
|
||||
#include "CastlingRights.hpp"
|
||||
#include "BitBoard.hpp"
|
||||
#include "MoveGenerator.hpp"
|
||||
|
||||
#include <optional>
|
||||
#include <iosfwd>
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
|
||||
#define BB_NUM 8 // 6 pieces, 2 colors
|
||||
|
||||
@@ -35,26 +37,30 @@ public:
|
||||
void pseudoLegalMoves(MoveVec &moves) const;
|
||||
void pseudoLegalMovesFrom(const Square &from, MoveVec &moves) const;
|
||||
|
||||
static constexpr int toIndex(PieceType t) {
|
||||
return static_cast<int>(t);
|
||||
}
|
||||
static constexpr int toIndex(PieceColor c) {
|
||||
return static_cast<int>(c);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
BitBoard mPieceBBs[BB_NUM] = {};
|
||||
BitBoard mOccupiedBB = 0;
|
||||
std::shared_ptr<BitBoard[BB_NUM]> mPieceBBs = std::shared_ptr<BitBoard[BB_NUM]>(new BitBoard[BB_NUM]);
|
||||
// BitBoard mPieceBBs[BB_NUM] = {};
|
||||
std::shared_ptr<BitBoard> mOccupiedBB = std::make_shared<BitBoard>(0);
|
||||
|
||||
std::shared_ptr<MoveGenerator> mMoveGenerator = std::make_shared<MoveGenerator>(mPieceBBs, mOccupiedBB);
|
||||
|
||||
PieceColor mTurn = PieceColor::White;
|
||||
CastlingRights mCR = CastlingRights::None;
|
||||
std::optional<Square> mEPS;
|
||||
|
||||
void handleCastlingRights(const Piece &piece, const BitBoard &bb);
|
||||
constexpr bool hasCastlingRights() const;
|
||||
// Check if the move is castling without checking the rights or validity.
|
||||
static bool isMoveCastling(const BitBoard &from, const BitBoard &to, const Piece &piece);
|
||||
|
||||
static inline int toIndex(PieceType t) {
|
||||
return static_cast<int>(t);
|
||||
}
|
||||
static inline int toIndex(PieceColor c) {
|
||||
return static_cast<int>(c);
|
||||
}
|
||||
|
||||
inline PieceColor pieceColor(const BitBoard &mask) const {
|
||||
auto color = PieceColor::White;
|
||||
if (!(mPieceBBs[static_cast<unsigned>(color)] & mask)) {
|
||||
|
Reference in New Issue
Block a user