mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:07:35 +00:00
Solitaire: Only update high score after a victorious game
Doesn't make much sense to update the high score on a lost game.
This commit is contained in:
parent
95401d2ca2
commit
0b30a0febb
3 changed files with 14 additions and 9 deletions
|
@ -80,7 +80,7 @@ void Game::start_game_over_animation()
|
||||||
start_timer(s_timer_interval_ms);
|
start_timer(s_timer_interval_ms);
|
||||||
|
|
||||||
if (on_game_end)
|
if (on_game_end)
|
||||||
on_game_end();
|
on_game_end(GameOverReason::Victory, m_score);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::stop_game_over_animation()
|
void Game::stop_game_over_animation()
|
||||||
|
@ -103,7 +103,7 @@ void Game::setup(Mode mode)
|
||||||
m_mode = mode;
|
m_mode = mode;
|
||||||
|
|
||||||
if (on_game_end)
|
if (on_game_end)
|
||||||
on_game_end();
|
on_game_end(GameOverReason::NewGame, m_score);
|
||||||
|
|
||||||
for (auto& stack : m_stacks)
|
for (auto& stack : m_stacks)
|
||||||
stack.clear();
|
stack.clear();
|
||||||
|
|
|
@ -21,6 +21,11 @@ enum class Mode : u8 {
|
||||||
__Count
|
__Count
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class GameOverReason {
|
||||||
|
Victory,
|
||||||
|
NewGame,
|
||||||
|
};
|
||||||
|
|
||||||
class Game final : public GUI::Frame {
|
class Game final : public GUI::Frame {
|
||||||
C_OBJECT(Game)
|
C_OBJECT(Game)
|
||||||
public:
|
public:
|
||||||
|
@ -34,7 +39,7 @@ public:
|
||||||
|
|
||||||
Function<void(uint32_t)> on_score_update;
|
Function<void(uint32_t)> on_score_update;
|
||||||
Function<void()> on_game_start;
|
Function<void()> on_game_start;
|
||||||
Function<void()> on_game_end;
|
Function<void(GameOverReason, uint32_t)> on_game_end;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Game();
|
Game();
|
||||||
|
|
|
@ -93,11 +93,6 @@ int main(int argc, char** argv)
|
||||||
|
|
||||||
game.on_score_update = [&](uint32_t score) {
|
game.on_score_update = [&](uint32_t score) {
|
||||||
statusbar.set_text(0, String::formatted("Score: {}", score));
|
statusbar.set_text(0, String::formatted("Score: {}", score));
|
||||||
|
|
||||||
if (score > high_score) {
|
|
||||||
update_high_score(score);
|
|
||||||
statusbar.set_text(1, String::formatted("High Score: {}", high_score));
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
uint64_t seconds_elapsed = 0;
|
uint64_t seconds_elapsed = 0;
|
||||||
|
@ -116,9 +111,14 @@ int main(int argc, char** argv)
|
||||||
seconds_elapsed = 0;
|
seconds_elapsed = 0;
|
||||||
timer->start();
|
timer->start();
|
||||||
};
|
};
|
||||||
game.on_game_end = [&]() {
|
game.on_game_end = [&](Solitaire::GameOverReason reason, uint32_t score) {
|
||||||
if (timer->is_active())
|
if (timer->is_active())
|
||||||
timer->stop();
|
timer->stop();
|
||||||
|
|
||||||
|
if ((reason == Solitaire::GameOverReason::Victory) && (score > high_score)) {
|
||||||
|
update_high_score(score);
|
||||||
|
statusbar.set_text(1, String::formatted("High Score: {}", high_score));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
GUI::ActionGroup draw_setting_actions;
|
GUI::ActionGroup draw_setting_actions;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue