[Board] Implement MoveGenerator
This commit is contained in:
18
Board.cpp
18
Board.cpp
@@ -15,18 +15,18 @@ void Board::setPiece(const Square &square, const Piece::Optional &piece) {
|
||||
return;
|
||||
|
||||
auto index = square.index();
|
||||
for (auto &bb : mPieceBBs) {
|
||||
bb.clear(index);
|
||||
for (int i = 0; i < BB_NUM; i++) {
|
||||
mPieceBBs[i].clear(index);
|
||||
}
|
||||
|
||||
mPieceBBs[toIndex(piece->type())].set(index);
|
||||
mPieceBBs[toIndex(piece->color())].set(index);
|
||||
mOccupiedBB.set(index);
|
||||
(*mOccupiedBB).set(index);
|
||||
}
|
||||
|
||||
Piece::Optional Board::piece(const Square &square) const {
|
||||
BitBoard mask = BitBoard::fromIndex(square.index());
|
||||
if (!(mOccupiedBB & mask)) {
|
||||
if (!(*mOccupiedBB & mask)) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
@@ -68,17 +68,17 @@ void Board::makeMove(const Move &move) {
|
||||
BitBoard changeBB = fromBB ^ toBB;
|
||||
|
||||
// If Piece is captured
|
||||
if (mOccupiedBB & toBB) {
|
||||
if (*mOccupiedBB & toBB) {
|
||||
auto capturedPiece = Piece(!mTurn, pieceType(toBB));
|
||||
mPieceBBs[toIndex(capturedPiece.color())] ^= toBB;
|
||||
mPieceBBs[toIndex(capturedPiece.type())] ^= toBB;
|
||||
mOccupiedBB ^= fromBB;
|
||||
*mOccupiedBB ^= fromBB;
|
||||
|
||||
if (toBB & CastlingRanks) { // Check castling rights
|
||||
handleCastlingRights(capturedPiece, toBB);
|
||||
}
|
||||
} else {
|
||||
mOccupiedBB ^= changeBB; // update occupied bitboard
|
||||
*mOccupiedBB ^= changeBB; // update occupied bitboard
|
||||
}
|
||||
|
||||
auto movedPiece = Piece(mTurn, pieceType(fromBB));
|
||||
@@ -105,7 +105,7 @@ void Board::makeMove(const Move &move) {
|
||||
|
||||
mPieceBBs[toIndex(PieceType::Rook)] ^= rookBB;
|
||||
mPieceBBs[toIndex(movedPiece.color())] ^= rookBB;
|
||||
mOccupiedBB ^= rookBB;
|
||||
*mOccupiedBB ^= rookBB;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ void Board::handleEnPassant(const Move &move, const Piece &movedPiece) {
|
||||
|
||||
mPieceBBs[toIndex(capturedPiece.color())] ^= epBB;
|
||||
mPieceBBs[toIndex(capturedPiece.type())] ^= epBB;
|
||||
mOccupiedBB ^= epBB;
|
||||
*mOccupiedBB ^= epBB;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user