[BitBoard] Implement bishopAttacks and queenAttacks

This commit is contained in:
2022-12-22 22:34:44 +01:00
parent 4f96d189fa
commit 256b511569
2 changed files with 21 additions and 0 deletions

View File

@@ -79,6 +79,25 @@ BitBoard BitBoard::bishopAttacks(BitBoard bishops, BitBoard empty) {
return (result | diag1.northWest() | diag1.southEast() | diag2.northEast() | diag2.southWest()) & ~bishops; return (result | diag1.northWest() | diag1.southEast() | diag2.northEast() | diag2.southWest()) & ~bishops;
} }
BitBoard BitBoard::rookAttacks(BitBoard rooks, BitBoard empty) {
BitBoard result = 0;
BitBoard diag1 = rooks;
BitBoard diag2 = rooks;
empty ^= rooks;
for (int i = 0; i < 7; i++) {
result |= (diag1 | diag2);
diag1 = (diag1.north() | diag1.south()) & empty;
diag2 = (diag2.east() | diag2.west()) & empty;
}
return (result | diag1.north() | diag1.south() | diag2.east() | diag2.west()) & ~rooks;
}
BitBoard BitBoard::queenAttacks(BitBoard queens, BitBoard empty) {
return rookAttacks(queens, empty) | bishopAttacks(queens, empty);
}
BitBoard BitBoard::pawnNorthAttacks(BitBoard pawns, BitBoard targets) { BitBoard BitBoard::pawnNorthAttacks(BitBoard pawns, BitBoard targets) {
return (pawns.northEast() | pawns.northWest()) & targets; return (pawns.northEast() | pawns.northWest()) & targets;
} }

View File

@@ -107,6 +107,8 @@ public:
BitBoard fileFill() const; BitBoard fileFill() const;
static BitBoard bishopAttacks(BitBoard pos, BitBoard empty); static BitBoard bishopAttacks(BitBoard pos, BitBoard empty);
static BitBoard rookAttacks(BitBoard rooks, BitBoard empty);
static BitBoard queenAttacks(BitBoard queens, BitBoard empty);
static BitBoard kingAttacks(BitBoard kings); static BitBoard kingAttacks(BitBoard kings);
static BitBoard castlingMoves(BitBoard kings, BitBoard rooks, BitBoard empty); static BitBoard castlingMoves(BitBoard kings, BitBoard rooks, BitBoard empty);