Improve Draw Rule Handling#553
Open
ANDREA-1720 wants to merge 6 commits into
Open
Conversation
…ull moves handling
Collaborator
|
I'm not necessarily ruling out changes, but I do think some confusion arises from the fact the a the Chess object both represents a game and the current board state. I think perhaps we need documentation here. The Result header tag is the correct place for storing and retrieving the actual result of the game. The methods such as isDraw(), isThreefoldRepetition() etc are implemented as you would typically find in a chess engine where draws get automatically get claimed. So they are more about enforcing rules and evaluating the position etc, and not so much about giving the result of a human vs human game. |
|
this would be awesome, currently very inconsistent with modern chess apps like chess.com and lichess. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Important
The changes applied by this PR can be described as BREAKING CHANGES as contains changes to the public API as descibed in the Changes sections
Overview
This PR refines the implementation of draw conditions to make them more compliant with official FIDE chess rules.
Changes
Manual Drawing
draw()method to allow players to manually claim a draw.Fifty-Move Rule
canDrawByFiftyMoves()→ detects when the position qualifies for a draw claim.isDrawByFiftyMoves()→ requires explicit claim (_isManuallyDrawn).Threefold Repetition
canThreefoldRepetition()→ detects when the position qualifies for a claim.isThreefoldRepetition()→ requires explicit claim (_isManuallyDrawn).can-threefold-repetition.test.ts) to reflect new semantics.Null Move Handling
_nullMovesCountto track consecutive null moves ( with"--"SAN).canThreefoldRepetition()and 6 consecutive null moves occur.Note
The handling of manual draws must be implemented by the developer using the library, for example:
Why
Tests
canThreefoldRepetition().