mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-24 10:22:05 -05:00
Snake: Add pause/continue game menu action
This patch adds an action in the Snake's game menu that allows for easy pausing/unpausing of the game state. In order to do this, the commit adds new pause()/start() functions in the SnakeGame class ;)
This commit is contained in:
parent
3de5dcf383
commit
b354e858c8
3 changed files with 30 additions and 2 deletions
|
@ -59,6 +59,17 @@ SnakeGame::SnakeGame(NonnullRefPtrVector<Gfx::Bitmap> food_bitmaps)
|
||||||
m_high_score_text = DeprecatedString::formatted("Best: {}", m_high_score);
|
m_high_score_text = DeprecatedString::formatted("Best: {}", m_high_score);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SnakeGame::pause()
|
||||||
|
{
|
||||||
|
stop_timer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SnakeGame::start()
|
||||||
|
{
|
||||||
|
static constexpr int timer_ms = 100;
|
||||||
|
start_timer(timer_ms);
|
||||||
|
}
|
||||||
|
|
||||||
void SnakeGame::reset()
|
void SnakeGame::reset()
|
||||||
{
|
{
|
||||||
m_head = { m_rows / 2, m_columns / 2 };
|
m_head = { m_rows / 2, m_columns / 2 };
|
||||||
|
@ -68,8 +79,8 @@ void SnakeGame::reset()
|
||||||
m_score_text = "Score: 0";
|
m_score_text = "Score: 0";
|
||||||
m_is_new_high_score = false;
|
m_is_new_high_score = false;
|
||||||
m_velocity_queue.clear();
|
m_velocity_queue.clear();
|
||||||
stop_timer();
|
pause();
|
||||||
start_timer(100);
|
start();
|
||||||
spawn_fruit();
|
spawn_fruit();
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,8 @@ public:
|
||||||
static ErrorOr<NonnullRefPtr<SnakeGame>> create();
|
static ErrorOr<NonnullRefPtr<SnakeGame>> create();
|
||||||
virtual ~SnakeGame() override = default;
|
virtual ~SnakeGame() override = default;
|
||||||
|
|
||||||
|
void start();
|
||||||
|
void pause();
|
||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -53,6 +53,21 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
TRY(game_menu->try_add_action(GUI::Action::create("&New Game", { Mod_None, Key_F2 }, TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png"sv)), [&](auto&) {
|
TRY(game_menu->try_add_action(GUI::Action::create("&New Game", { Mod_None, Key_F2 }, TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/reload.png"sv)), [&](auto&) {
|
||||||
game->reset();
|
game->reset();
|
||||||
})));
|
})));
|
||||||
|
static DeprecatedString const pause_text = "&Pause Game"sv;
|
||||||
|
auto const pause_icon = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/pause.png"sv));
|
||||||
|
static DeprecatedString const continue_text = "&Continue Game"sv;
|
||||||
|
auto const continue_icon = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/play.png"sv));
|
||||||
|
TRY(game_menu->try_add_action(GUI::Action::create(pause_text, { Mod_None, Key_Space }, pause_icon, [&](auto& action) {
|
||||||
|
if (game->has_timer()) {
|
||||||
|
game->pause();
|
||||||
|
action.set_text(continue_text);
|
||||||
|
action.set_icon(continue_icon);
|
||||||
|
} else {
|
||||||
|
game->start();
|
||||||
|
action.set_text(pause_text);
|
||||||
|
action.set_icon(pause_icon);
|
||||||
|
}
|
||||||
|
})));
|
||||||
TRY(game_menu->try_add_separator());
|
TRY(game_menu->try_add_separator());
|
||||||
TRY(game_menu->try_add_action(GUI::CommonActions::make_quit_action([](auto&) {
|
TRY(game_menu->try_add_action(GUI::CommonActions::make_quit_action([](auto&) {
|
||||||
GUI::Application::the()->quit();
|
GUI::Application::the()->quit();
|
||||||
|
|
Loading…
Add table
Reference in a new issue