fix(engine): EvaluatePlay honors the single-word rule
CI / changes (pull_request) Successful in 1s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 14s
CI / ui (pull_request) Has been skipped
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m5s
CI / changes (pull_request) Successful in 1s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 14s
CI / ui (pull_request) Has been skipped
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m5s
The move preview (EvaluatePlay) validated under standard rules — it called ValidatePlay without the game's play options — so under the single-word rule it rejected a play whose only flaw was incidental invalid perpendicular cross-words, even though SubmitPlay accepts it. The UI gates the submit button on the preview, so such a play (e.g. КРАН bridging an existing Р on the test contour) could not be made. Pass g.playOpts() via ValidatePlayOpts, mirroring Play, so the preview's legality and score match submission. Robots are unaffected — they search via GenerateMovesOpts and submit via Play, both already opts-aware — and a regression test asserts that too.
This commit is contained in:
@@ -285,8 +285,9 @@ Key points:
|
||||
- **Multiple words per turn (Russian games).** Russian variants carry a per-game
|
||||
**single-word rule**, chosen on New Game (default **off** = single word; on = standard
|
||||
Scrabble). Off, only the **main word** along the play direction is validated and scored —
|
||||
perpendicular cross-words are ignored, including in robot move generation; on, every
|
||||
cross-word must be a real word and is scored. The engine threads it as
|
||||
perpendicular cross-words are ignored, including in robot move generation and the
|
||||
unlimited move preview; on, every cross-word must be a real word and is scored. The
|
||||
engine threads it as
|
||||
`scrabble.PlayOptions{IgnoreCrossWords}` (solver `v1.1.0`); connectivity and the
|
||||
first-move centre rule are unaffected. The "Russian-only" limit is a **UI affordance**:
|
||||
the backend and engine are variant-agnostic about the flag, and English games always send
|
||||
|
||||
Reference in New Issue
Block a user