[MoveGenerator] Add generateAttackedSquares, fix castling
This commit is contained in:
@@ -59,7 +59,7 @@ void MoveGenerator::generateMovesWithPromotion(const Square &from, BitBoard move
|
||||
}
|
||||
void MoveGenerator::generateKingMoves(const BoardState &bs, const Square &from, MoveGenerator::MoveVec &moves) {
|
||||
auto fromBB = BitBoard::fromIndex(from.index());
|
||||
auto movesBB = BitBoard::kingAttacks(fromBB) & ~(*bs.pieceBBs)[Board::toIndex(bs.turn)];
|
||||
auto movesBB = BitBoard::kingMoves(fromBB) & ~(*bs.pieceBBs)[Board::toIndex(bs.turn)];
|
||||
|
||||
if ((bs.cr & CastlingRights::All) != CastlingRights::None) {
|
||||
|
||||
@@ -74,18 +74,16 @@ void MoveGenerator::generateKingMoves(const BoardState &bs, const Square &from,
|
||||
|
||||
if (checkCR != CastlingRights::None) {
|
||||
// Generate attacked squares
|
||||
// auto opponentBB = (*bs.pieceBBs)[Board::toIndex(!color)];
|
||||
// BitBoard target = CastlingRanks | bs.occupiedBB;
|
||||
// // pawns
|
||||
// BitBoard attacked = 0;
|
||||
// if (!color == PieceColor::White) {
|
||||
// attacked |= BitBoard::pawnNorthAttacks((*bs.pieceBBs)[Board::toIndex(PieceType::Pawn)] & opponentBB, target);
|
||||
// } else {
|
||||
// attacked |= BitBoard::pawnSouthAttacks((*bs.pieceBBs)[Board::toIndex(PieceType::Pawn)] & opponentBB, target);
|
||||
// }
|
||||
BitBoard target = CastlingRanks | bs.occupiedBB;
|
||||
auto attacked = generateAttackedSquares(bs, target, !bs.turn);
|
||||
|
||||
movesBB |= BitBoard::castlingMoves(fromBB, (*bs.pieceBBs)[Board::toIndex(PieceType::Rook)], ~bs.occupiedBB)
|
||||
& castlingRank;// & ~attacked;
|
||||
std::cout << "attacked\n" << attacked;
|
||||
|
||||
movesBB |= BitBoard::castlingMoves(fromBB & ~attacked,
|
||||
(*bs.pieceBBs)[Board::toIndex(PieceType::Rook)],
|
||||
~bs.occupiedBB)
|
||||
& castlingRank;
|
||||
std::cout << "moves\n" << movesBB;
|
||||
|
||||
if ((checkCR & CastlingRights::KingSide) == CastlingRights::None) {
|
||||
movesBB &= ~GFile;
|
||||
@@ -116,20 +114,35 @@ void MoveGenerator::generateQueenMoves(const BoardState &bs, const Square &from,
|
||||
void MoveGenerator::generateKnightMoves(const BoardState &bs, const Square &from, MoveVec &moves) {
|
||||
|
||||
auto fromBB = BitBoard::fromIndex(from.index());
|
||||
auto movesBB = BitBoard::knightAttacks(fromBB) & ~(*bs.pieceBBs)[Board::toIndex(bs.turn)];
|
||||
auto movesBB = BitBoard::knightMoves(fromBB) & ~(*bs.pieceBBs)[Board::toIndex(bs.turn)];
|
||||
generateMoves(from, movesBB, moves);
|
||||
}
|
||||
|
||||
//BitBoard MoveGenerator::generateAttackedSquares(const BoardState &bs, BitBoard target, PieceColor opColor) const {
|
||||
// auto opponentBB = (*bs.pieceBBs)[Board::toIndex(opColor)];
|
||||
//
|
||||
// BitBoard attacked = 0;
|
||||
//
|
||||
// // pawns
|
||||
// if (opColor == PieceColor::White) {
|
||||
// attacked |= BitBoard::pawnNorthAttacks((*bs.pieceBBs)[Board::toIndex(PieceType::Pawn)] & opponentBB, target);
|
||||
// } else {
|
||||
// attacked |= BitBoard::pawnSouthAttacks((*bs.pieceBBs)[Board::toIndex(PieceType::Pawn)] & opponentBB, target);
|
||||
// }
|
||||
//
|
||||
//}
|
||||
BitBoard MoveGenerator::generateAttackedSquares(const BoardState &bs, BitBoard target, PieceColor opColor) {
|
||||
auto opponentBB = (*bs.pieceBBs)[Board::toIndex(opColor)];
|
||||
BitBoard attacked = 0;
|
||||
|
||||
// pawns
|
||||
if (opColor == PieceColor::White) {
|
||||
attacked |= BitBoard::pawnNorthAttacks((*bs.pieceBBs)[Board::toIndex(PieceType::Pawn)] & opponentBB, target);
|
||||
} else {
|
||||
attacked |= BitBoard::pawnSouthAttacks((*bs.pieceBBs)[Board::toIndex(PieceType::Pawn)] & opponentBB, target);
|
||||
}
|
||||
|
||||
// knights
|
||||
attacked |= BitBoard::knightMoves((*bs.pieceBBs)[Board::toIndex(PieceType::Knight)] & opponentBB) & target;
|
||||
|
||||
// Bishop
|
||||
attacked |= BitBoard::bishopAttacks((*bs.pieceBBs)[Board::toIndex(PieceType::Bishop)] & opponentBB, target);
|
||||
|
||||
// Rook
|
||||
attacked |= BitBoard::rookAttacks((*bs.pieceBBs)[Board::toIndex(PieceType::Rook)] & opponentBB, target);
|
||||
|
||||
// Queen
|
||||
attacked |= BitBoard::queenAttacks((*bs.pieceBBs)[Board::toIndex(PieceType::Queen)] & opponentBB, target);
|
||||
|
||||
// King
|
||||
attacked |= BitBoard::kingMoves((*bs.pieceBBs)[Board::toIndex(PieceType::Queen)] & opponentBB) & target;
|
||||
|
||||
return attacked;
|
||||
}
|
||||
|
Reference in New Issue
Block a user