diff --git a/BitBoard.cpp b/BitBoard.cpp index 00895e1..1acbb4c 100644 --- a/BitBoard.cpp +++ b/BitBoard.cpp @@ -53,6 +53,17 @@ BitBoard BitBoard::kingAttacks(const BitBoard kings) { return result; } +BitBoard BitBoard::castlingMoves(BitBoard kings, BitBoard rooks, BitBoard empty) { + kings |= (kings.east() | kings.west()) & empty; + kings |= (kings.east() | kings.west()) & empty; + kings |= kings.west() & empty; + rooks |= (rooks.east() | rooks.west()) & empty; + rooks |= (rooks.east() | rooks.west()) & empty; + rooks |= (rooks.east()) & empty; + + return kings & rooks & CastlingSquares; +} + BitBoard BitBoard::bishopAttacks(BitBoard bishops, BitBoard empty) { BitBoard result = 0; BitBoard diag1 = bishops; diff --git a/BitBoard.hpp b/BitBoard.hpp index fba4f63..af7009d 100644 --- a/BitBoard.hpp +++ b/BitBoard.hpp @@ -108,6 +108,7 @@ public: static BitBoard bishopAttacks(BitBoard pos, BitBoard empty); static BitBoard kingAttacks(BitBoard kings); + static BitBoard castlingMoves(BitBoard kings, BitBoard rooks, BitBoard empty); static BitBoard pawnNorthAttacks(BitBoard pawns, BitBoard targets); static BitBoard pawnSouthAttacks(BitBoard pawns, BitBoard targets);