From d2cecee5478aebcceae7404e9e66890fb90a0c38 Mon Sep 17 00:00:00 2001 From: lukel495 Date: Mon, 27 Nov 2023 11:18:34 +0100 Subject: [PATCH] added scoreboard and etc --- assets/data.json | 5 +++-- assets/highscore.csv | 5 +++++ src/Map.cc | 4 ++-- src/Map.h | 2 +- src/States.cc | 39 +++++++++++++++++++++++++++++++++++++-- src/_main.cc | 1 - 6 files changed, 48 insertions(+), 8 deletions(-) diff --git a/assets/data.json b/assets/data.json index ecbd6de..63de909 100644 --- a/assets/data.json +++ b/assets/data.json @@ -28,8 +28,9 @@ "game_constants": { "bottles_per_second" : 2, - "game_time" : 20, - "yf_per_second": 0.125 + "game_time" : 3, + "yf_per_second": 0.125, + "scoreboard" : 5 }, "map": diff --git a/assets/highscore.csv b/assets/highscore.csv index e69de29..16aabef 100644 --- a/assets/highscore.csv +++ b/assets/highscore.csv @@ -0,0 +1,5 @@ +Gorilla,4 +Gorilla,3 +Stina,2 +Gorilla,2 +Gorilla,0 diff --git a/src/Map.cc b/src/Map.cc index 0251aca..de8879f 100644 --- a/src/Map.cc +++ b/src/Map.cc @@ -21,9 +21,9 @@ Map::Map(json& params) : texture{}, sprite{}, point_text{}, font{} } -void Map::update(int const points, int const game_time) +void Map::update(int const collected, int const points, int const time_left) { - point_text.setString("Points: " + std::to_string(points) + "\n" + "Time left: " + std::to_string(game_time) + " s"); + point_text.setString("Collected: " + std::to_string(collected) + "\n" + "Points: " + std::to_string(points) + "\n" + "Time left: " + std::to_string(time_left) + " s"); } void Map::render(sf::RenderWindow& window) const diff --git a/src/Map.h b/src/Map.h index 5d2c9c1..f7a5b06 100644 --- a/src/Map.h +++ b/src/Map.h @@ -12,7 +12,7 @@ public: Map(json& params); ~Map() = default; - void update(int const points, int const game_state); + void update(int const collected, int const points, int const time_left); void render(sf::RenderWindow& window) const; protected: private: diff --git a/src/States.cc b/src/States.cc index 48ac63f..3648414 100644 --- a/src/States.cc +++ b/src/States.cc @@ -7,6 +7,8 @@ #include "json.hpp" #include +#include +#include #include using json = nlohmann::json; @@ -40,6 +42,7 @@ Game_state::Game_state() : bottle_texture.loadFromFile("assets/kir.png"); YF_texture.loadFromFile("assets/YF.png"); + f.close(); } void Game_state::update(Context &context) @@ -57,6 +60,38 @@ void Game_state::update(Context &context) int remaining_time {static_cast(data["game_constants"]["game_time"]) - static_cast(game_time)}; if (remaining_time < 0) { + // LÄGG ALLT NEDAN I GAME OVER MENYN. + std::string current_line{"Gorilla," + std::to_string(points)}; + + std::ifstream highscore_file_r{"assets/highscore.csv"}; + std::vector lines_read; + std::vector lines_write; + for (std::string one_line; std::getline(highscore_file_r, one_line);lines_read.push_back(one_line)); + + bool added {false}; + for (std::string::size_type line_count{0}; line_count < lines_read.size(); line_count++) + { + if (!added && points > std::stoi(lines_read[line_count].substr(lines_read[line_count].find_first_of(',') + 1))) + { + std::cout << "i loop" << std::endl; + lines_write.push_back(current_line); + added = true; + } + lines_write.push_back(lines_read[line_count]); + } + + if (!added) lines_write.push_back(current_line); + + + + if (lines_write.size() > data["game_constants"]["scoreboard"]) lines_write.pop_back(); + + highscore_file_r.close(); + + std::ofstream highscore_file_w{"assets/highscore.csv"}; + for (std::string::size_type line_count{0}; line_count < lines_write.size(); highscore_file_w << lines_write[line_count++] << std::endl); + highscore_file_w.close(); + context.next_state = std::make_unique(); return; } @@ -116,7 +151,7 @@ void Game_state::update(Context &context) } enemy->update(context); - game_map->update(points, remaining_time); + game_map->update(player->get_collected(), points, remaining_time); if (yf.size()>0) { for(unsigned int i {0}; i < yf.size(); ++i) @@ -381,7 +416,7 @@ void Pause_menu::update(Context &context) else if (menu) { context.next_state = std::make_unique(); - context.saved_game.release(); + context.saved_game.reset(); } // changes color on text depending on selection diff --git a/src/_main.cc b/src/_main.cc index 913a5bb..29b2e2d 100644 --- a/src/_main.cc +++ b/src/_main.cc @@ -48,7 +48,6 @@ int main () //om vi har bytt så ska vi byta state, ex Esc hopp till paus meny if (game_context.next_state != nullptr) { - game_context.current_state.release(); game_context.current_state = std::move(game_context.next_state); game_context.next_state = nullptr; -- 2.30.2