mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 03:27:45 +00:00
Solitaire: Tweak scoring for three-card draw mode
Currently, the player loses 100 points each time the waste stack is recycled. In three-card draw mode, it's standard to only lose 20 points after the third recycle event.
This commit is contained in:
parent
cf9094cf46
commit
0f80e9e4db
2 changed files with 30 additions and 1 deletions
|
@ -110,6 +110,7 @@ void Game::setup(Mode mode)
|
||||||
|
|
||||||
m_new_deck.clear();
|
m_new_deck.clear();
|
||||||
m_new_game_animation_pile = 0;
|
m_new_game_animation_pile = 0;
|
||||||
|
m_passes_left_before_punishment = recycle_rules().passes_allowed_before_punishment;
|
||||||
m_score = 0;
|
m_score = 0;
|
||||||
update_score(0);
|
update_score(0);
|
||||||
|
|
||||||
|
@ -182,7 +183,11 @@ void Game::mousedown_event(GUI::MouseEvent& event)
|
||||||
stock.push(card);
|
stock.push(card);
|
||||||
}
|
}
|
||||||
|
|
||||||
update_score(-100);
|
if (m_passes_left_before_punishment == 0)
|
||||||
|
update_score(recycle_rules().punishment);
|
||||||
|
else
|
||||||
|
--m_passes_left_before_punishment;
|
||||||
|
|
||||||
update(stock.bounding_box());
|
update(stock.bounding_box());
|
||||||
} else {
|
} else {
|
||||||
auto play_bounding_box = play.bounding_box();
|
auto play_bounding_box = play.bounding_box();
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <AK/Array.h>
|
||||||
#include <LibCards/CardStack.h>
|
#include <LibCards/CardStack.h>
|
||||||
#include <LibGUI/Frame.h>
|
#include <LibGUI/Frame.h>
|
||||||
#include <LibGUI/Painter.h>
|
#include <LibGUI/Painter.h>
|
||||||
|
@ -97,6 +98,11 @@ private:
|
||||||
bool m_dirty { false };
|
bool m_dirty { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct WasteRecycleRules {
|
||||||
|
uint8_t passes_allowed_before_punishment { 0 };
|
||||||
|
int8_t punishment { 0 };
|
||||||
|
};
|
||||||
|
|
||||||
enum StackLocation {
|
enum StackLocation {
|
||||||
Stock,
|
Stock,
|
||||||
Waste,
|
Waste,
|
||||||
|
@ -116,6 +122,23 @@ private:
|
||||||
};
|
};
|
||||||
static constexpr Array piles = { Pile1, Pile2, Pile3, Pile4, Pile5, Pile6, Pile7 };
|
static constexpr Array piles = { Pile1, Pile2, Pile3, Pile4, Pile5, Pile6, Pile7 };
|
||||||
|
|
||||||
|
ALWAYS_INLINE const WasteRecycleRules& recycle_rules()
|
||||||
|
{
|
||||||
|
static constexpr Array<WasteRecycleRules, 2> rules { {
|
||||||
|
{ 0, -100 },
|
||||||
|
{ 2, -20 },
|
||||||
|
} };
|
||||||
|
|
||||||
|
switch (m_mode) {
|
||||||
|
case Mode::SingleCardDraw:
|
||||||
|
return rules[0];
|
||||||
|
case Mode::ThreeCardDraw:
|
||||||
|
return rules[1];
|
||||||
|
default:
|
||||||
|
VERIFY_NOT_REACHED();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void mark_intersecting_stacks_dirty(Card& intersecting_card);
|
void mark_intersecting_stacks_dirty(Card& intersecting_card);
|
||||||
void update_score(int to_add);
|
void update_score(int to_add);
|
||||||
void move_card(CardStack& from, CardStack& to);
|
void move_card(CardStack& from, CardStack& to);
|
||||||
|
@ -156,6 +179,7 @@ private:
|
||||||
uint8_t m_new_game_animation_delay { 0 };
|
uint8_t m_new_game_animation_delay { 0 };
|
||||||
|
|
||||||
uint32_t m_score { 0 };
|
uint32_t m_score { 0 };
|
||||||
|
uint8_t m_passes_left_before_punishment { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue