From b412c992ee4fefe9e38e9e8f3a6c0960558b9dff Mon Sep 17 00:00:00 2001 From: brxxh <11dac2t@huhn-online.de> Date: Fri, 30 May 2025 20:10:19 +0200 Subject: [PATCH] Make the game go faster after some time --- examples/tappyplane/tappyplane.cpp | 51 ++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/examples/tappyplane/tappyplane.cpp b/examples/tappyplane/tappyplane.cpp index 4575f67..6e90794 100644 --- a/examples/tappyplane/tappyplane.cpp +++ b/examples/tappyplane/tappyplane.cpp @@ -22,11 +22,15 @@ #include static const unsigned int FRAME_RATE = 60; + static const unsigned int WINDOW_WIDTH = 800; static const unsigned int WINDOW_HEIGHT = 480; static const unsigned int WINDOW_SCALE = 2; + static const char ACTION_KEY = ' '; +static constexpr float SCROLLING_SPEED_INC_FACTOR = 1.0002f; + // x,y+h --- x+w,y+h // | | // | | @@ -45,7 +49,9 @@ struct AABB { }; struct Background { - static constexpr float SCROLLING_SPEED = 0.003f; + static constexpr float INIT_SCROLLING_SPEED = 0.003f; + + float scrolling_speed = INIT_SCROLLING_SPEED; std::array sprites; paradiso::Renderer renderer{}; @@ -54,6 +60,9 @@ struct Background { paradiso::BitmapIO::get().load("PNG/background.png"); void init() { + // For resetting. + scrolling_speed = INIT_SCROLLING_SPEED; + sprites = {paradiso::Sprite{ .bitmap = image, .pivot = {paradiso::Vector2::make(0.0f, 0.0f)}, @@ -66,7 +75,7 @@ struct Background { void update() { for (auto& sprite : sprites) { - sprite.pivot.x() -= SCROLLING_SPEED; + sprite.pivot.x() -= scrolling_speed; if (sprite.pivot.x() <= -2.0f) { sprite.pivot.x() += 4.0f; } @@ -84,7 +93,9 @@ struct Background { }; struct Ground { - static constexpr float SCROLLING_SPEED = 0.009f; + static constexpr float INIT_SCROLLING_SPEED = 0.009f; + + float scrolling_speed = INIT_SCROLLING_SPEED; std::array sprites; paradiso::Renderer renderer{}; @@ -97,6 +108,9 @@ struct Ground { AABB aabb{}; void init() { + // For resetting. + scrolling_speed = INIT_SCROLLING_SPEED; + // The image's height is 71 px. float scale_y = 71.0f / WINDOW_HEIGHT; @@ -120,7 +134,7 @@ struct Ground { void update() { for (auto& sprite : sprites) { - sprite.pivot.x() -= SCROLLING_SPEED; + sprite.pivot.x() -= scrolling_speed; if (sprite.pivot.x() <= -2.0f) { sprite.pivot.x() += 4.0f; } @@ -138,9 +152,11 @@ struct Ground { }; struct Rocks { - static constexpr float SCROLLING_SPEED = 0.006f; + static constexpr float INIT_SCROLLING_SPEED = 0.006f; static constexpr float GAP_SIZE = 1.6f; + float scrolling_speed = INIT_SCROLLING_SPEED; + paradiso::Sprite top_sprite; paradiso::Sprite bottom_sprite; @@ -157,7 +173,11 @@ struct Rocks { AABB top_aabb; AABB bottom_aabb; - void init(float x) { + void init(float x, bool reset_scrolling_speed = false) { + if (reset_scrolling_speed) { + scrolling_speed = INIT_SCROLLING_SPEED; + } + // The image's size is 108x239 px. float scale_x = 108.0f / WINDOW_WIDTH; float scale_y = 239.0f / WINDOW_HEIGHT; @@ -198,8 +218,8 @@ struct Rocks { } void update() { - top_sprite.pivot.x() -= SCROLLING_SPEED; - bottom_sprite.pivot.x() -= SCROLLING_SPEED; + top_sprite.pivot.x() -= scrolling_speed; + bottom_sprite.pivot.x() -= scrolling_speed; // +----------+ // | | @@ -290,7 +310,7 @@ struct Plane { .scale = scale}, }; - // For reseting. + // For resetting. position_y = INIT_POSITION_Y; velocity_y = INIT_VELOCITY_Y; rotation = INIT_ROTATION; @@ -528,8 +548,8 @@ auto main() -> int { background.init(); ground.init(); - rocks1.init(1.2f); - rocks2.init(2.4f); + rocks1.init(1.2f, true); // We don't need to set this to true, + rocks2.init(2.4f, true); // but why not? plane.init(); start_text.init(); game_over_text.init(); @@ -571,6 +591,11 @@ auto main() -> int { plane.update(window.keyboard_input()); + background.scrolling_speed *= SCROLLING_SPEED_INC_FACTOR; + ground.scrolling_speed *= SCROLLING_SPEED_INC_FACTOR; + rocks1.scrolling_speed *= SCROLLING_SPEED_INC_FACTOR; + rocks2.scrolling_speed *= SCROLLING_SPEED_INC_FACTOR; + if (plane.aabb.is_colliding_with(rocks1.top_aabb) || plane.aabb.is_colliding_with(rocks1.bottom_aabb) || plane.aabb.is_colliding_with(rocks2.top_aabb) || @@ -586,8 +611,8 @@ auto main() -> int { // Reset everything. background.init(); ground.init(); - rocks1.init(1.2f); - rocks2.init(2.4f); + rocks1.init(1.2f, true); + rocks2.init(2.4f, true); plane.init(); game_state = GameState::Start; }