From d82860f8438674da8f3db1317aba0ba61bf9e4bb Mon Sep 17 00:00:00 2001 From: sherl Date: Wed, 15 Jan 2025 03:33:44 +0100 Subject: [PATCH] remove unused parts of code, use sleep function which updates screen --- Chinczyk188/Board.cpp | 12 +++- Chinczyk188/Board.hpp | 1 + Chinczyk188/Engine.cpp | 16 ++--- Chinczyk188/Game.cpp | 131 +++-------------------------------------- Chinczyk188/Game.hpp | 16 ----- 5 files changed, 27 insertions(+), 149 deletions(-) diff --git a/Chinczyk188/Board.cpp b/Chinczyk188/Board.cpp index fba0ed3..2737d16 100644 --- a/Chinczyk188/Board.cpp +++ b/Chinczyk188/Board.cpp @@ -1,4 +1,6 @@ #include "Board.hpp" +#include +#include #include #include #include @@ -20,7 +22,7 @@ void Board::initVariables() { "Upewnij sie, ze plik .exe jest we wlasciwym katalogu, " "a gra zostala w pelni wypakowana wraz z folderem \"res\".\n"; - sf::sleep(sf::seconds(10)); + this->smartSleep(10000); this->window->close(); } @@ -157,6 +159,14 @@ void Board::updateAndRender() { } +void Board::smartSleep(int millis) { + for (int i = 0; i < millis / 10; i++) { + sf::sleep(sf::milliseconds(10)); + this->update(); + this->render(); + } +} + void Board::runAsThread() { //this->thread = std::thread([this]() {this->updateAndRender();}); diff --git a/Chinczyk188/Board.hpp b/Chinczyk188/Board.hpp index 3021fb7..d7eba66 100644 --- a/Chinczyk188/Board.hpp +++ b/Chinczyk188/Board.hpp @@ -49,6 +49,7 @@ class Board { void initWindow(); void initBoard(); void initView(); + void smartSleep(int millis); void handleResize(unsigned int newWidth, unsigned int newHeight); }; \ No newline at end of file diff --git a/Chinczyk188/Engine.cpp b/Chinczyk188/Engine.cpp index d38d8cf..0894d2c 100644 --- a/Chinczyk188/Engine.cpp +++ b/Chinczyk188/Engine.cpp @@ -52,7 +52,7 @@ void Engine::nextTurn() { int diceRoll = rollDice(currentPlayer.getSeed(), currentPlayer.getRollCount()); std::cout << "Wylosowano " << diceRoll << ".\n"; currentPlayer.incrementRollCount(); - sf::sleep(sf::milliseconds(1000)); + this->board.smartSleep(1000); // Wybieranie pionka bool pickAPlace = false; @@ -64,7 +64,7 @@ void Engine::nextTurn() { currentPlayer.pawnsAtBase--; currentPlayer.pawnsActive++; this->pawnmoveBuffer.play(); - sf::sleep(sf::milliseconds(2000)); + this->board.smartSleep(2000); } else if (currentPlayer.pawnsActive > 0 && currentPlayer.pawnsActive < 4) { // Może wyjść z bazy albo ruszyć pionek @@ -87,7 +87,7 @@ void Engine::nextTurn() { currentPlayer.pawnsAtBase--; currentPlayer.pawnsActive++; this->pawnmoveBuffer.play(); - sf::sleep(sf::milliseconds(2000)); + this->board.smartSleep(2000); break; } else if (choice == 'b') { @@ -98,7 +98,7 @@ void Engine::nextTurn() { std::cout << currentPlayer.getName() << " rusza jedyny pionek " << diceRoll << " pol do przodu.\n"; this->pawnmoveBuffer.play(); - sf::sleep(sf::milliseconds(2000)); + this->board.smartSleep(2000); } break; @@ -120,7 +120,7 @@ void Engine::nextTurn() { std::cout << currentPlayer.getName() << " rusza jedyny pionek " << diceRoll << " pol do przodu.\n"; this->pawnmoveBuffer.play(); - sf::sleep(sf::milliseconds(2000)); + this->board.smartSleep(2000); } } @@ -137,7 +137,7 @@ void Engine::nextTurn() { while (board.manualUpdate()) { sf::Event currentEvent = board.lastEvent; - std::cout << "this-evtype: " << currentEvent.type << "\n"; + //std::cout << "currentEvent.type: " << currentEvent.type << "\n"; switch (currentEvent.type) { case sf::Event::Closed: @@ -154,7 +154,7 @@ void Engine::nextTurn() { case sf::Event::MouseButtonReleased: std::cout << "pretend i'm releasing a piece\n"; this->pawnmoveBuffer.play(); - sf::sleep(sf::seconds(1.0f)); + this->board.smartSleep(1000); if (pickStatus == 4) pickStatus = 8; break; @@ -183,7 +183,7 @@ void Engine::nextTurn() { currentPlayerIndex = (currentPlayerIndex + 1) % players.size(); } - sf::sleep(sf::milliseconds(1000)); + this->board.smartSleep(1000); std::cout << "\n"; return; } diff --git a/Chinczyk188/Game.cpp b/Chinczyk188/Game.cpp index 2c69fe7..424af4b 100644 --- a/Chinczyk188/Game.cpp +++ b/Chinczyk188/Game.cpp @@ -162,24 +162,8 @@ void Game::playStartTune() { void Game::initVariables() { // Ustaw wartości na domyślne. - this->window = nullptr; this->leaderboardLocation = LEADERBOARD_FILE; - // Wczytaj tło - bitmapę planszy. - // loadFromFile() zwraca True w przypadku pomyślnego - // wczytania tekstury. - if (!this->boardTexture.loadFromFile("res/sprites/board.png")) { - - // Jeśli nie uda nam się wczytać tekstury: - std::cerr << "Uwaga: Nie udalo sie wczytac " - "wymaganej tekstury planszy z \"res/sprites/board.png\"!\n" - "Upewnij sie, ze plik .exe jest we wlasciwym katalogu, " - "a gra zostala w pelni wypakowana wraz z folderem \"res\".\n"; - - sf::sleep(sf::seconds(10)); - this->window->close(); - } - // Spróbuj wczytać listę wyników z pliku this->readLeaderboards(leaderboardLocation); // Zapisz po cichu (stąd false) kopię zapasową listy wyników @@ -187,63 +171,6 @@ void Game::initVariables() { } -void Game::initWindow() { - - // Dwuwymiarowy, wektor typu (u)nsigned int. - sf::Vector2u textureSize = this->boardTexture.getSize(); - - // Aby okno zmieściło się na większości wyświetlaczy, - // sprawmy, aby zajmowało ono około 450x450 pikseli, - // czyli dokładnie połowę z rozdzielczości tekstury planszy. - this->videoMode.width = textureSize.x / 2; - this->videoMode.height = textureSize.y / 2; - - // Stwórz okno. - this->window = new sf::RenderWindow( - this->videoMode, - "Okno planszy - Chinczyk188", - sf::Style::Default); - -} - -void Game::initBoard() { - - // Wczytaj wymaganą teksturę planszy - this->boardSprite.setTexture(this->boardTexture); - - // Ustaw pozycję grafiki. - this->boardSprite.setPosition(0.0f, 0.0f); -} - -void Game::initView() { - - // Ze względu na to, że długość krawędzi okna jest dwa razy mniejsza - // od tekstury planszy, powinniśmy to zrównoważyć powiększając - // widok o tą samą wartość. - sf::Vector2f viewSize( - static_cast(2 * this->videoMode.width), - static_cast(2 * this->videoMode.height) - ); - - this->view.setSize(viewSize); - this->view.setCenter(viewSize.x / 2.0f, viewSize.y / 2.0f); - - // Ustawiamy widok na wyznaczone wartości. - this->window->setView(this->view); - -} - -void Game::handleResize(unsigned int newWidth, unsigned int newHeight) { - - // Aby zapobiec sytuacji, w której po zmianie rozmiaru - // okno byłoby większe od rozdzielczości ekranu, - // niech krawędź okna wynosi minimum z nowej szerokości i wysokości, - // zachowując przy tym proporcję 1:1 planszy. - unsigned int newSize = std::min(newWidth, newHeight); - this->window->setSize(sf::Vector2u(newSize, newSize)); - -} - Game::Game() { //: // thread(std::thread([this]() { @@ -256,6 +183,7 @@ Game::Game() { // Konstruktor klasy. Klasę Game tworzymy poprzez // ustawienie domyślnych wartości i stworzenie okna. + this->initVariables(); this->board.initVariables(); this->board.initWindow(); this->board.initBoard(); @@ -273,7 +201,6 @@ Game::~Game() { // W destruktorze zapisujemy dane i usuwamy okno. this->dumpLeaderboards(); - delete this->window; // alternatywnie: this->window->close(); } @@ -285,55 +212,6 @@ const bool Game::running() const { } -void Game::pollEvents() { - - while (this->window->pollEvent(this->ev)) { - - switch (this->ev.type) { - - case sf::Event::Closed: - this->window->close(); - break; - - case sf::Event::Resized: - this->handleResize(this->ev.size.width, this->ev.size.height); - break; - - case sf::Event::KeyPressed: - if (this->ev.key.code == sf::Keyboard::Escape) - this->window->close(); - break; - - } - } - -} - -void Game::update() { - - // Obecnie wrapper dla metody - // pollEvents(), nasłuchiwanie wydarzeń. - this->pollEvents(); - -} - -void Game::render() { - - // Mechanizm renderowania - - // Czyszczenie ekranu - this->window->clear(sf::Color::White); - // Rysowanie tła - this->window->draw(this->boardSprite); - - - - // Mechanizm wyświetlania - // W celu wyświetlenia na ekranie wyniku renderowania - this->window->display(); - -} - void Game::run() { Engine engine; @@ -401,7 +279,12 @@ void Game::run() { this->printLeaderboards(); std::cout << "\n"; - sf::sleep(sf::seconds(10.0f)); + // Zapisz do pliku CSV + this->dumpLeaderboards(this->leaderboardLocation); + this->dumpLeaderboards("." + this->leaderboardLocation + ".old", false); + + this->board.smartSleep(10000); + board.closeWindow(); } diff --git a/Chinczyk188/Game.hpp b/Chinczyk188/Game.hpp index 8bf6e92..7ea8980 100644 --- a/Chinczyk188/Game.hpp +++ b/Chinczyk188/Game.hpp @@ -11,13 +11,6 @@ class Game { private: - // Wskaźnik na okno. - sf::RenderWindow* window; - sf::VideoMode videoMode; - - sf::Texture boardTexture; - sf::Sprite boardSprite; - std::vector leaderboardName; std::vector leaderboardWins; sf::Music soundBuffer1; @@ -25,18 +18,12 @@ class Game { // Metody void initVariables(); - void initWindow(); - void initBoard(); - void initView(); void playStartTune(); - void handleResize(unsigned int newWidth, unsigned int newHeight); public: // Aby przekazać je do Engine - sf::Event ev; std::string leaderboardLocation; - sf::View view; // Konstruktor, destruktor Game(); @@ -46,9 +33,6 @@ class Game { const bool running() const; // Metody klasy - void pollEvents(); - void update(); - void render(); void printGameWelcomeText() const; void readLeaderboards(std::string leaderboardLocation); void dumpLeaderboards(std::string leaderboardLocation = LEADERBOARD_FILE, bool verbose = true) const;