[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);
|
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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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)];
|
||||||
//
|
//
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user