1
Fork 0
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:
Timothy Flynn 2021-05-25 11:44:25 -04:00 committed by Andreas Kling
parent 95401d2ca2
commit 0b30a0febb
3 changed files with 14 additions and 9 deletions

View file

@ -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();

View file

@ -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();

View file

@ -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;