From 256b51156930c66d9b15935db6e103c101756352 Mon Sep 17 00:00:00 2001 From: Arthur Bols Date: Thu, 22 Dec 2022 22:34:44 +0100 Subject: [PATCH] [BitBoard] Implement bishopAttacks and queenAttacks --- BitBoard.cpp | 19 +++++++++++++++++++ BitBoard.hpp | 2 ++ 2 files changed, 21 insertions(+) diff --git a/BitBoard.cpp b/BitBoard.cpp index 1acbb4c..f9a43c9 100644 --- a/BitBoard.cpp +++ b/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; } diff --git a/BitBoard.hpp b/BitBoard.hpp index af7009d..d6e69a5 100644 --- a/BitBoard.hpp +++ b/BitBoard.hpp @@ -107,6 +107,8 @@ public: BitBoard fileFill() const; 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 castlingMoves(BitBoard kings, BitBoard rooks, BitBoard empty);