Add Forty Thieves game variant - #61
Merged
Merged
Conversation
# Conflicts: # ComputerSolitaire/Fixtures/ScreenshotFixtures.swift # ComputerSolitaire/Game/Shared/AutoMoveAdvisor.swift # ComputerSolitaire/Game/Shared/GameMode.swift # ComputerSolitaire/Game/Shared/GamePersistence.swift # ComputerSolitaire/Game/Shared/GameSessionInteraction.swift # ComputerSolitaire/Game/Shared/GameState.swift # ComputerSolitaire/Game/Shared/GameVariant.swift # ComputerSolitaire/Game/Shared/HintAdvisor.swift # ComputerSolitaire/Game/Shared/TapMovePolicy.swift # ComputerSolitaire/Views/RulesAndScoringView.swift # ComputerSolitaire/Views/Shared/ContentView.swift # ComputerSolitaire/Views/Shared/GameModePickerView.swift # ComputerSolitaire/Views/StatisticsView.swift # ComputerSolitaireTests/Shared/ScreenshotFixtureTests.swift # README.md # tools/hint-probe/README.md # tools/hint-probe/main.swift # tools/hint-probe/run.sh
a gameplay move landing during a deal flight could relocate a card the overlay was still flying toward (a scorpion group move carries an in-flight card away with the cards beneath it), so the flight now lands the moment any other move arrives, matching the undo path's existing rule. the pre-flight frame wait also stalled 240ms whenever a dealt card completed a run and banked on arrival — run piles publish only their top card's frame — so the wait now covers only cards still on the tableau, the only cards that ever publish a landing frame.
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.
What Changed
docs/rules/fortythieves.md.FortyThievesPlanner— a Spider-family cached improving-line best-first search with two-deck-aware canonicalization (twin-top and same-suit-foundation dedup, first-empty-column) and a monotone stock-tap fallback that structurally cannot loop. Wired intoHintPlannerwith a 0.3s interactive budget.GameVariant.allowsFoundationRollbackseparates locked foundations from Klondike-style rollback foundations; the tap policy gains a Forty Thieves-specific safe-banking rule (rank r is safe once both same-suit foundations reach r − 2), and auto-finish fires once the stock is empty, playing tableau tops and the waste.Why
Closes #49. Forty Thieves is the best-known two-deck patience and builds on the two-deck support introduced for Spider, while being the app's first variant to combine two decks with player-built foundations — hence the new rollback distinction rather than overloading
playerBuildsFoundations.Validation
fortythieves3.4% hint-following vs 0.0% random control, every loss an honest deadlock, zero stalemate loops, zero revisit events (now gated like Yukon's); baseline and measured tuning directions recorded in the ledger. Thescorpionbaseline reproduces exactly post-merge (14.8% / 2.8%), confirming the sync changed nothing behaviorally.UI Changes