aboutsummaryrefslogtreecommitdiff
path: root/src/games/snake
diff options
context:
space:
mode:
Diffstat (limited to 'src/games/snake')
-rw-r--r--src/games/snake/Snake.cpp79
-rw-r--r--src/games/snake/Snake.hpp13
2 files changed, 17 insertions, 75 deletions
diff --git a/src/games/snake/Snake.cpp b/src/games/snake/Snake.cpp
index 7dc7f9d..bb81470 100644
--- a/src/games/snake/Snake.cpp
+++ b/src/games/snake/Snake.cpp
@@ -15,7 +15,7 @@ Snake::Snake()
}
void
-Snake::Start(int32_t map_width, int32_t map_height)
+Snake::Start()
{
m_dt_remaining_seconds = 0.0f;
m_tlast_milliseconds = SDL_GetTicks();
@@ -23,10 +23,10 @@ Snake::Start(int32_t map_width, int32_t map_height)
m_direction = right;
m_last_advanced_direction = right;
- assert(map_width <= max_map_width);
- assert(map_height <= max_map_height);
- m_map_width = map_width;
- m_map_height = map_height;
+ m_map_width = m_starting_map_width;
+ m_map_height = m_starting_map_height;
+ assert(m_map_width <= max_map_width);
+ assert(m_map_height <= max_map_height);
m_tail = 0;
m_head = 1;
@@ -40,56 +40,13 @@ Snake::Start(int32_t map_width, int32_t map_height)
m_dist = std::uniform_int_distribution<int32_t>(0, m_map_width*m_map_height - 3);
SpawnFood();
- m_game_status = game_resuming;
+ m_game_status = game_resume;
}
-bool
-Snake::Update(std::vector<SDL_Event> &events)
+void
+Snake::FinishUpdate(float dt)
{
- Color clear_color = {0.3f, 0.3f, 0.3f, 1.0f};
- g_renderer.SetCameraSize(4.0f, 3.0f);
- g_renderer.SetClearColor(clear_color);
-
-
- if (m_game_status == game_starting) {
- int32_t map_width = 16;
- int32_t map_height = 16;
- Start(map_width, map_height);
- }
-
-
- for (SDL_Event &event : events) {
- if (m_game_status == game_resuming) {
- ProcessEventDuringResume(event);
- }
- else if (m_game_status == game_paused) {
- ProcessEventDuringPause(event);
- }
- }
-
-
- float dt = ProcessDt();
-
- switch (m_game_status) {
- case game_starting: {
- } break;
- case game_resuming: {
- MaybeMoveSnake(dt);
- } break;
- case game_over: {
- DrawDefaultGameOverMenu();
- } break;
- case game_paused: {
- DrawDefaultGamePausedMenu();
- } break;
- case game_exit: {
- return false;
- } break;
- }
-
-
- Draw();
- return true;
+ MaybeMoveSnake(dt);
}
void
@@ -166,20 +123,7 @@ Snake::MaybeMoveSnake(float dt)
}
void
-Snake::ProcessEventDuringPause(SDL_Event &event)
-{
- switch (event.type) {
- case SDL_EVENT_KEY_DOWN: {
- if (event.key.key == SDLK_ESCAPE) {
- m_game_status = game_resuming;
- }
- }
- default:;
- }
-}
-
-void
-Snake::ProcessEventDuringResume(SDL_Event &event)
+Snake::ProcessEvent(SDL_Event& event)
{
switch (event.type) {
case SDL_EVENT_KEY_DOWN: {
@@ -211,9 +155,6 @@ Snake::ProcessEventDuringResume(SDL_Event &event)
m_direction = left;
}
}
- else if (event.key.key == SDLK_ESCAPE) {
- m_game_status = game_paused;
- }
}
default:;
diff --git a/src/games/snake/Snake.hpp b/src/games/snake/Snake.hpp
index 25facd1..81fd30f 100644
--- a/src/games/snake/Snake.hpp
+++ b/src/games/snake/Snake.hpp
@@ -18,19 +18,17 @@ public:
public:
Snake();
- bool Update(std::vector<SDL_Event>& events) override;
private:
- void ProcessEventDuringPause(SDL_Event& event);
- void ProcessEventDuringResume(SDL_Event& event);
-
- void Start(int32_t map_width, int32_t map_height);
+ void Start() override;
+ void ProcessEvent(SDL_Event& event) override;
+ void FinishUpdate(float dt) override;
+ void Draw() override;
void MaybeMoveSnake(float dt_in_seconds);
void SpawnFood();
- void Draw();
private:
@@ -41,6 +39,9 @@ private:
static std::mt19937 s_rng;
std::uniform_int_distribution<int32_t> m_dist;
+ int32_t m_starting_map_width = 16;
+ int32_t m_starting_map_height = 16;
+
Direction m_direction;
Direction m_last_advanced_direction;