[BitBoard] Implement bishopAttacks and queenAttacks
This commit is contained in:
19
BitBoard.cpp
19
BitBoard.cpp
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user