From 33bda6381dda936eed0c2beb00be59c06acc7819 Mon Sep 17 00:00:00 2001 From: Crizomb Date: Tue, 17 Jun 2025 18:47:07 +0200 Subject: [PATCH] Ecran fin + feuille --- AsepriteThings/bureau.aseprite | Bin 1455 -> 1611 bytes AsepriteThings/end_screen.aseprite | Bin 0 -> 1487 bytes AsepriteThings/feuille.aseprite | Bin 0 -> 1355 bytes SimpleGame/media/sprites/bureau.png | Bin 828 -> 813 bytes SimpleGame/media/sprites/end_screen.png | Bin 0 -> 1763 bytes SimpleGame/media/sprites/feuille.png | Bin 0 -> 1560 bytes SimpleGame/src/Include/AudioEmitter.hpp | 14 ++++---- SimpleGame/src/Include/Game.hpp | 3 ++ SimpleGame/src/Include/GameData.hpp | 2 ++ SimpleGame/src/Include/NoteTile.hpp | 1 + SimpleGame/src/Source/Game.cpp | 42 ++++++++++++++++++++++-- 11 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 AsepriteThings/end_screen.aseprite create mode 100644 AsepriteThings/feuille.aseprite create mode 100644 SimpleGame/media/sprites/end_screen.png create mode 100644 SimpleGame/media/sprites/feuille.png diff --git a/AsepriteThings/bureau.aseprite b/AsepriteThings/bureau.aseprite index 6f20a38056d763b2b97704f47b8d02e47796c457..23f474cd3de33fa33dc9a59b561d272abacc1a00 100644 GIT binary patch literal 1611 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 Hl+XkKc7BJ> diff --git a/SimpleGame/media/sprites/end_screen.png b/SimpleGame/media/sprites/end_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..a259dd1e812519fe23e1452d3b6348d41092e741 GIT binary patch literal 1763 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 chords; - std::vector drums; - std::vector notes; + std::vector chords; + std::vector drums; + std::vector notes; std::vector> markov_matrix_chords; std::vector> markov_matrix_melody; int nbr_melo_max{4}; - int nbr_melo_total{ 64 }; int current_beat{0}; std::vector> rythmes; int index_note; @@ -25,7 +24,8 @@ private: std::vector activeChannels; public: - int tempo{ 170 }; + int nbr_melo_total{48}; + int tempo{170}; AudioEmitter(); ~AudioEmitter(); std::vector> generateMusic(); diff --git a/SimpleGame/src/Include/Game.hpp b/SimpleGame/src/Include/Game.hpp index 251a561..a73748b 100644 --- a/SimpleGame/src/Include/Game.hpp +++ b/SimpleGame/src/Include/Game.hpp @@ -3,6 +3,7 @@ #include #include #include +#include #ifndef BOOK_GAME_HPP #define BOOK_GAME_HPP @@ -48,6 +49,8 @@ private: int score_multiplier = 1; // number of good press without misses sf::Sprite backGround; + sf::Sprite paper; + sf::Sprite endScreen; Carrot carrot; }; diff --git a/SimpleGame/src/Include/GameData.hpp b/SimpleGame/src/Include/GameData.hpp index 4d9cb1e..b3d5989 100644 --- a/SimpleGame/src/Include/GameData.hpp +++ b/SimpleGame/src/Include/GameData.hpp @@ -13,6 +13,8 @@ static constexpr unsigned int NOTE_PLACE_X_POS[3] = { SCREEN_WIDTH * 6 / 10, SCREEN_WIDTH * 7 / 10, SCREEN_WIDTH * 8 / 10}; static constexpr unsigned int FLOWER_SIZE = SCREEN_WIDTH * 0.05; +static const sf::Vector2f PAPER_POS = + sf::Vector2f(SCREEN_WIDTH * 0.19, SCREEN_HEIGHT * 0.17); static const sf::Vector2f CARROT_POS = sf::Vector2f(SCREEN_WIDTH * 9 / 20, SCREEN_HEIGHT * 0.4); diff --git a/SimpleGame/src/Include/NoteTile.hpp b/SimpleGame/src/Include/NoteTile.hpp index d255e15..02dc961 100644 --- a/SimpleGame/src/Include/NoteTile.hpp +++ b/SimpleGame/src/Include/NoteTile.hpp @@ -46,4 +46,5 @@ public: static const std::vector> &getExistingTiles() { return existing_tiles; }; + static bool isFinished() { return existing_tiles.size() == 0; } }; diff --git a/SimpleGame/src/Source/Game.cpp b/SimpleGame/src/Source/Game.cpp index 2d19044..ba5e55f 100644 --- a/SimpleGame/src/Source/Game.cpp +++ b/SimpleGame/src/Source/Game.cpp @@ -5,6 +5,7 @@ #include "NoteTile.hpp" #include "TilePattern.hpp" #include +#include #include #include #include @@ -17,9 +18,12 @@ const sf::Time Game::TimePerFrame = sf::seconds(1.f / 60.f); sf::Texture bgTexture; +sf::Texture paperTexture; +sf::Texture endScreenTexture; Game::Game() - : backGround(PLACE_HOLDER_TEXTURE), + : backGround(PLACE_HOLDER_TEXTURE), paper(PLACE_HOLDER_TEXTURE), + endScreen(PLACE_HOLDER_TEXTURE), carrot(ANGRY_PATHS, NEUTRAL_PATHS, HAPPY_PATHS, mFont) { assert(mFont.openFromFile("media/Sansation.ttf")); mStatisticsText.setPosition({5.f, 5.f}); @@ -55,6 +59,23 @@ Game::Game() float sy = backGround.getTexture().getSize().y; backGround.setScale(sf::Vector2f(SCREEN_WIDTH / sx, SCREEN_HEIGHT / sy)); + if (!endScreenTexture.loadFromFile("media/sprites/end_screen.png")) { + printf("sprite end_screen not loaded\n"); + } + + endScreen.setTexture(endScreenTexture, true); + endScreen.setScale(sf::Vector2f(SCREEN_WIDTH / sx, SCREEN_HEIGHT / sy)); + + if (!paperTexture.loadFromFile("media/sprites/feuille.png")) { + printf("paper not loaded\n"); + } + paper.setPosition(PAPER_POS); + paper.setTexture(paperTexture, true); + paper.setScale(sf::Vector2f(SCREEN_WIDTH / sx, SCREEN_HEIGHT / sy)); + + paper.setTextureRect(sf::IntRect( + sf::Vector2i(0, 0), sf::Vector2i(paper.getTexture().getSize().x, 0))); + carrot.setPosition(CARROT_POS); carrot.setScale(sf::Vector2f(5, 5)); @@ -81,8 +102,13 @@ bool updateAudio(AudioEmitter &audioEmitter, bool generated) { return generated; } +int nb_melo_total; +float tempo; + void Game::run() { AudioEmitter audioEmitter = AudioEmitter(); + nb_melo_total = audioEmitter.nbr_melo_total; + tempo = audioEmitter.tempo; generateTilePatternAndMusic(audioEmitter); bool generated = false; @@ -123,11 +149,20 @@ void Game::processEvents(AudioEmitter &audioEmitter) { } } -void Game::update(const sf::Time elapsedTime) {} +float totalTime = 0.0f; +void Game::update(const sf::Time elapsedTime) { + float maxTime = nb_melo_total * 8 * 60 / tempo; + int paperAdvancement = paper.getTexture().getSize().y * totalTime / maxTime; + paper.setTextureRect(sf::IntRect( + sf::Vector2i(0, 0), + sf::Vector2i(paper.getTexture().getSize().x, paperAdvancement))); + totalTime += elapsedTime.asSeconds(); +} void Game::render() { mWindow.clear(sf::Color::Yellow); mWindow.draw(backGround); + mWindow.draw(paper); mWindow.draw(leftPressZone); mWindow.draw(middlePressZone); mWindow.draw(rightPressZone); @@ -137,6 +172,9 @@ void Game::render() { if (!NoteTile::update(TimePerFrame.asSeconds(), mWindow)) update_scores(false); + if (NoteTile::isFinished()) { + mWindow.draw(endScreen); + } mWindow.draw(mStatisticsText); mWindow.draw(ScoreText); mWindow.draw(ScoreMultiplierText);