[MoveGenerator] Implement generateKnightMoves

This commit is contained in:
2022-12-22 23:35:07 +01:00
parent 79b5dd4a86
commit 2c31de83b7
5 changed files with 26 additions and 1 deletions

View File

@@ -102,6 +102,21 @@ BitBoard BitBoard::queenAttacks(BitBoard queens, BitBoard empty) {
return rookAttacks(queens, empty) | bishopAttacks(queens, empty); return rookAttacks(queens, empty) | bishopAttacks(queens, empty);
} }
BitBoard BitBoard::knightAttacks(BitBoard knights) {
BitBoard east, west, result;
east = knights.east();
west = knights.west();
result = (east | west) << 16;
result |= (east | west) >> 16;
east = east.east();
west = west.west();
result |= (east | west) << 8;
result |= (east | west) >> 8;
return result;
}
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

@@ -111,6 +111,7 @@ public:
static BitBoard queenAttacks(BitBoard queens, 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);
static BitBoard knightAttacks(BitBoard knights);
static BitBoard pawnNorthAttacks(BitBoard pawns, BitBoard targets); static BitBoard pawnNorthAttacks(BitBoard pawns, BitBoard targets);
static BitBoard pawnSouthAttacks(BitBoard pawns, BitBoard targets); static BitBoard pawnSouthAttacks(BitBoard pawns, BitBoard targets);

View File

@@ -160,7 +160,8 @@ void Board::pseudoLegalMovesFrom(const Square &from, Board::MoveVec &moves) cons
switch (p.type()) { switch (p.type()) {
case PieceType::Pawn: MoveGenerator::generatePawnMoves(bs, from, moves); case PieceType::Pawn: MoveGenerator::generatePawnMoves(bs, from, moves);
return; return;
case PieceType::Knight: break; case PieceType::Knight: MoveGenerator::generateKnightMoves(bs, from, moves);
return;
case PieceType::Bishop: MoveGenerator::generateBishopMoves(bs, from, moves); case PieceType::Bishop: MoveGenerator::generateBishopMoves(bs, from, moves);
return; return;
case PieceType::Rook: MoveGenerator::generateRookMoves(bs, from, moves); case PieceType::Rook: MoveGenerator::generateRookMoves(bs, from, moves);

View File

@@ -113,6 +113,13 @@ void MoveGenerator::generateQueenMoves(const BoardState &bs, const Square &from,
generateMoves(from, movesBB, moves); generateMoves(from, movesBB, moves);
} }
void MoveGenerator::generateKnightMoves(const BoardState &bs, const Square &from, MoveVec &moves) {
auto fromBB = BitBoard::fromIndex(from.index());
auto movesBB = BitBoard::knightAttacks(fromBB) & ~(*bs.pieceBBs)[Board::toIndex(bs.turn)];
generateMoves(from, movesBB, moves);
}
//BitBoard MoveGenerator::generateAttackedSquares(const BoardState &bs, BitBoard target, PieceColor opColor) const { //BitBoard MoveGenerator::generateAttackedSquares(const BoardState &bs, BitBoard target, PieceColor opColor) const {
// auto opponentBB = (*bs.pieceBBs)[Board::toIndex(opColor)]; // auto opponentBB = (*bs.pieceBBs)[Board::toIndex(opColor)];
// //

View File

@@ -22,6 +22,7 @@ public:
static void generateKingMoves(const BoardState &bs, const Square &from, MoveVec &moves); static void generateKingMoves(const BoardState &bs, const Square &from, MoveVec &moves);
static void generateRookMoves(const BoardState &bs, const Square &from, MoveVec &moves); static void generateRookMoves(const BoardState &bs, const Square &from, MoveVec &moves);
static void generateQueenMoves(const BoardState &bs, const Square &from, MoveVec &moves); static void generateQueenMoves(const BoardState &bs, const Square &from, MoveVec &moves);
static void generateKnightMoves(const BoardState &bs, const Square &from, MoveVec &moves);
private: private:
static void generatePawnMoves(const BoardState &bs, const Square &from, BitBoard targets, MoveVec &moves); static void generatePawnMoves(const BoardState &bs, const Square &from, BitBoard targets, MoveVec &moves);