mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Simplify slider_blocker calculation
Now that classical evaluation was removed, we can adapt this method to the needs of set_check_info. STC: 2.95 (-2.94,2.94) <-1.75,0.25> Total: 298176 W: 75802 L: 75868 D: 146506 Ptnml(0-2): 908, 33608, 80192, 33402, 978 https://tests.stockfishchess.org/tests/view/64e70b899009777747557b43 closes https://github.com/official-stockfish/Stockfish/pull/4753 no functional change
This commit is contained in:
parent
4f7fe255c7
commit
1f7ff8406d
2 changed files with 16 additions and 20 deletions
|
@ -321,8 +321,8 @@ void Position::set_castling_right(Color c, Square rfrom) {
|
||||||
|
|
||||||
void Position::set_check_info() const {
|
void Position::set_check_info() const {
|
||||||
|
|
||||||
st->blockersForKing[WHITE] = slider_blockers(pieces(BLACK), square<KING>(WHITE), st->pinners[BLACK]);
|
update_slider_blockers(WHITE);
|
||||||
st->blockersForKing[BLACK] = slider_blockers(pieces(WHITE), square<KING>(BLACK), st->pinners[WHITE]);
|
update_slider_blockers(BLACK);
|
||||||
|
|
||||||
Square ksq = square<KING>(~sideToMove);
|
Square ksq = square<KING>(~sideToMove);
|
||||||
|
|
||||||
|
@ -443,37 +443,33 @@ string Position::fen() const {
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// update_slider_blockers() calculates st->blockersForKing[c] and st->pinners[~c],
|
||||||
|
/// which store respectively the pieces preventing king of color c from being in check
|
||||||
|
/// and the slider pieces of color ~c pinning pieces of color c to the king.
|
||||||
|
void Position::update_slider_blockers(Color c) const {
|
||||||
|
|
||||||
/// Position::slider_blockers() returns a bitboard of all the pieces (both colors)
|
Square ksq = square<KING>(c);
|
||||||
/// that are blocking attacks on the square 's' from 'sliders'. A piece blocks a
|
|
||||||
/// slider if removing that piece from the board would result in a position where
|
|
||||||
/// square 's' is attacked. For example, a king-attack blocking piece can be either
|
|
||||||
/// a pinned or a discovered check piece, according if its color is the opposite
|
|
||||||
/// or the same of the color of the slider.
|
|
||||||
|
|
||||||
Bitboard Position::slider_blockers(Bitboard sliders, Square s, Bitboard& pinners) const {
|
st->blockersForKing[c] = 0;
|
||||||
|
st->pinners[~c] = 0;
|
||||||
Bitboard blockers = 0;
|
|
||||||
pinners = 0;
|
|
||||||
|
|
||||||
// Snipers are sliders that attack 's' when a piece and other snipers are removed
|
// Snipers are sliders that attack 's' when a piece and other snipers are removed
|
||||||
Bitboard snipers = ( (attacks_bb< ROOK>(s) & pieces(QUEEN, ROOK))
|
Bitboard snipers = ( (attacks_bb< ROOK>(ksq) & pieces(QUEEN, ROOK))
|
||||||
| (attacks_bb<BISHOP>(s) & pieces(QUEEN, BISHOP))) & sliders;
|
| (attacks_bb<BISHOP>(ksq) & pieces(QUEEN, BISHOP))) & pieces(~c);
|
||||||
Bitboard occupancy = pieces() ^ snipers;
|
Bitboard occupancy = pieces() ^ snipers;
|
||||||
|
|
||||||
while (snipers)
|
while (snipers)
|
||||||
{
|
{
|
||||||
Square sniperSq = pop_lsb(snipers);
|
Square sniperSq = pop_lsb(snipers);
|
||||||
Bitboard b = between_bb(s, sniperSq) & occupancy;
|
Bitboard b = between_bb(ksq, sniperSq) & occupancy;
|
||||||
|
|
||||||
if (b && !more_than_one(b))
|
if (b && !more_than_one(b))
|
||||||
{
|
{
|
||||||
blockers |= b;
|
st->blockersForKing[c] |= b;
|
||||||
if (b & pieces(color_of(piece_on(s))))
|
if (b & pieces(c))
|
||||||
pinners |= sniperSq;
|
st->pinners[~c] |= sniperSq;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return blockers;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,7 @@ public:
|
||||||
// Attacks to/from a given square
|
// Attacks to/from a given square
|
||||||
Bitboard attackers_to(Square s) const;
|
Bitboard attackers_to(Square s) const;
|
||||||
Bitboard attackers_to(Square s, Bitboard occupied) const;
|
Bitboard attackers_to(Square s, Bitboard occupied) const;
|
||||||
Bitboard slider_blockers(Bitboard sliders, Square s, Bitboard& pinners) const;
|
void update_slider_blockers(Color c) const;
|
||||||
template<PieceType Pt> Bitboard attacks_by(Color c) const;
|
template<PieceType Pt> Bitboard attacks_by(Color c) const;
|
||||||
|
|
||||||
// Properties of moves
|
// Properties of moves
|
||||||
|
|
Loading…
Add table
Reference in a new issue