1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 23:27:43 +00:00

LibCards: Support non-alternating colour patience games

This introduces a new MovementType concept to LibCards, starting the
process to allow other patience games to be implemented using it - that
differ more substantially from Klondike in logic.

This is currently used for two purposes: 1. to verify that the
'grabbed' stack of cards is valid* (sequential and correct colours) and
2. to allow 'grabbed' stacks to be pushed onto same-colour,
either-colour, or alternating-colour stacks

* Klondike doesn't need this logic, as per how the game works any
  'grabbed' selection is guaranteed to be valid.
This commit is contained in:
Jamie Mansfield 2021-06-16 01:29:08 +01:00 committed by Andreas Kling
parent 84c0f98fb2
commit b7e806e15e
2 changed files with 67 additions and 7 deletions

View file

@ -24,6 +24,12 @@ public:
Foundation
};
enum MovementRule {
Alternating,
Same,
Any,
};
CardStack();
CardStack(const Gfx::IntPoint& position, Type type);
CardStack(const Gfx::IntPoint& position, Type type, NonnullRefPtr<CardStack> associated_stack);
@ -44,8 +50,8 @@ public:
void move_to_stack(CardStack&);
void rebound_cards();
bool is_allowed_to_push(const Card&, size_t stack_size = 1) const;
void add_all_grabbed_cards(const Gfx::IntPoint& click_location, NonnullRefPtrVector<Card>& grabbed);
bool is_allowed_to_push(const Card&, size_t stack_size = 1, MovementRule movement_rule = Alternating) const;
void add_all_grabbed_cards(const Gfx::IntPoint& click_location, NonnullRefPtrVector<Card>& grabbed, MovementRule movement_rule = Alternating);
void draw(GUI::Painter&, const Gfx::Color& background_color);
void clear();