[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;
|
||||
}
|
||||
|
||||
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) {
|
||||
return (pawns.northEast() | pawns.northWest()) & targets;
|
||||
}
|
||||
|
Reference in New Issue
Block a user