[MoveGenerator] Implement generateKnightMoves
This commit is contained in:
15
BitBoard.cpp
15
BitBoard.cpp
@@ -102,6 +102,21 @@ BitBoard BitBoard::queenAttacks(BitBoard queens, BitBoard 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) {
|
||||
return (pawns.northEast() | pawns.northWest()) & targets;
|
||||
}
|
||||
|
@@ -111,6 +111,7 @@ public:
|
||||
static BitBoard queenAttacks(BitBoard queens, BitBoard empty);
|
||||
static BitBoard kingAttacks(BitBoard kings);
|
||||
static BitBoard castlingMoves(BitBoard kings, BitBoard rooks, BitBoard empty);
|
||||
static BitBoard knightAttacks(BitBoard knights);
|
||||
|
||||
static BitBoard pawnNorthAttacks(BitBoard pawns, BitBoard targets);
|
||||
static BitBoard pawnSouthAttacks(BitBoard pawns, BitBoard targets);
|
||||
|
@@ -160,7 +160,8 @@ void Board::pseudoLegalMovesFrom(const Square &from, Board::MoveVec &moves) cons
|
||||
switch (p.type()) {
|
||||
case PieceType::Pawn: MoveGenerator::generatePawnMoves(bs, from, moves);
|
||||
return;
|
||||
case PieceType::Knight: break;
|
||||
case PieceType::Knight: MoveGenerator::generateKnightMoves(bs, from, moves);
|
||||
return;
|
||||
case PieceType::Bishop: MoveGenerator::generateBishopMoves(bs, from, moves);
|
||||
return;
|
||||
case PieceType::Rook: MoveGenerator::generateRookMoves(bs, from, moves);
|
||||
|
@@ -113,6 +113,13 @@ void MoveGenerator::generateQueenMoves(const BoardState &bs, const Square &from,
|
||||
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 {
|
||||
// auto opponentBB = (*bs.pieceBBs)[Board::toIndex(opColor)];
|
||||
//
|
||||
|
@@ -22,6 +22,7 @@ public:
|
||||
static void generateKingMoves(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 generateKnightMoves(const BoardState &bs, const Square &from, MoveVec &moves);
|
||||
|
||||
private:
|
||||
static void generatePawnMoves(const BoardState &bs, const Square &from, BitBoard targets, MoveVec &moves);
|
||||
|
Reference in New Issue
Block a user