1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 16:47:36 +00:00

LibChess+Chess: Ensure no pawns have moved when invoking 50 move rule

The 50 and 75 move rules are no longer invoked if a pawn has advanced
in the last 50 or 75 moves respectively.
This commit is contained in:
Tim Ledbetter 2023-04-29 13:10:36 +01:00 committed by Sam Atkins
parent 4fb200a546
commit ccab25e54e
2 changed files with 5 additions and 3 deletions

View file

@ -774,9 +774,11 @@ Board::Result Board::game_result() const
});
if (are_legal_moves) {
if (m_moves_since_capture >= 75 * 2)
if (m_moves_since_capture >= 75 * 2 && m_moves_since_pawn_advance >= 75 * 2)
return Result::SeventyFiveMoveRule;
if (m_moves_since_capture == 50 * 2)
if ((m_moves_since_capture >= 50 * 2 && m_moves_since_pawn_advance == 50 * 2)
|| (m_moves_since_pawn_advance >= 50 * 2 && m_moves_since_capture == 50 * 2))
return Result::FiftyMoveRule;
auto repeats = m_previous_states.get(Traits<Board>::hash(*this));