From 80a4b1b397b13ff179a40912154c11e2a53b38eb Mon Sep 17 00:00:00 2001 From: Andrii Solianyk Date: Fri, 13 Dec 2024 20:05:11 +0100 Subject: [PATCH] =?UTF-8?q?Z=C5=82=C4=85czono=20i=20wszystko=20dzia=C5=82a?= =?UTF-8?q?,=20ale=20trzeba=20zrobi=C4=87=20mocny=20refactor=20Planszy=20b?= =?UTF-8?q?o=20za=20du=C5=BCo=20niewiadomo=20sk=C4=85d=20bior=C4=85cych=20?= =?UTF-8?q?si=C4=99=20p=C4=99tli?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/Actor.h | 6 ------ headers/Plansza.h | 34 ++++++++++++++++------------------ headers/Player.h | 7 +------ sources/Plansza.cpp | 26 ++++++++++---------------- sources/Player.cpp | 40 +++------------------------------------- 5 files changed, 30 insertions(+), 83 deletions(-) diff --git a/headers/Actor.h b/headers/Actor.h index 4f6a82e..741cf42 100644 --- a/headers/Actor.h +++ b/headers/Actor.h @@ -26,16 +26,11 @@ public: virtual void moveDown() = 0; virtual void shoot() = 0; - std::vector& getBullets(); - sf::Sprite& getSprite(); - Position getPosition(); void updateBullets(); void setMovingSpeed(float speed); void dealDamage(); void healUP(); - void updateBullets(); - protected: Position position; sf::Sprite actorSprite; @@ -44,7 +39,6 @@ protected: sf::Texture rocketTexture; std::vector bullets; sf::Clock damageDealClock; - Position position; int hp; unsigned int damage; unsigned int firerate; diff --git a/headers/Plansza.h b/headers/Plansza.h index d67a800..9bff345 100644 --- a/headers/Plansza.h +++ b/headers/Plansza.h @@ -39,30 +39,14 @@ public: delete ship; // usuwanie wskaźnika ship } private: - sf::RenderWindow *window; Background background; AudioManager audioManager; Player *ship; + Size size; sf::RenderWindow *window; sf::Font font; - Size size; - sf::Texture meteorTexture1; - sf::Texture meteorTexture2; - sf::Texture heartTexture; - sf::Texture heartTextureGray; sf::Clock meteorSpawnClock; sf::Clock heartSpawnClock; - sf::Texture enemyBulletTexture; - sf::Texture WiazkaTexture; - sf::Texture BombaTexture; - sf::Texture playerTexture; - sf::Texture playerBulletTexture; - sf::Texture playerRocketTexture; - sf::Texture enemyTexture; - sf::Texture advancedEnemyTexture; - sf::Texture BomberEnemyTexture; - sf::Texture KamikadzeTexture; - sf::Texture WiazkowiecTexture; sf::Clock spawnClock; sf::Clock scoreClock; sf::Clock shooterSpawnClock; @@ -71,6 +55,21 @@ private: sf::Clock BomberSpawnClock; sf::Clock KamikadzeSpawnClock; sf::Clock WiazkowiecSpawnClock; + sf::Texture playerTexture; + sf::Texture playerBulletTexture; + sf::Texture playerRocketTexture; + sf::Texture enemyTexture; + sf::Texture enemyBulletTexture; + sf::Texture advancedEnemyTexture; + sf::Texture BomberEnemyTexture; + sf::Texture BombaTexture; + sf::Texture KamikadzeTexture; + sf::Texture WiazkowiecTexture; + sf::Texture WiazkaTexture; + sf::Texture meteorTexture1; + sf::Texture meteorTexture2; + sf::Texture heartTexture; + sf::Texture heartTextureGray; std::vector enemies; std::vector AEnemies; std::vector BEnemies; @@ -81,7 +80,6 @@ private: std::vector heartStats; bool gameOver = false; unsigned int score = 0; - bool isPlayerSpawned = false; }; #endif //PLANSZA_H diff --git a/headers/Player.h b/headers/Player.h index f0a566d..0e4823e 100644 --- a/headers/Player.h +++ b/headers/Player.h @@ -29,9 +29,7 @@ public: void moveUp() override; void moveDown() override; void takeDamage(); - bool isAlive() const; - void update(); - void onHit(); + void update(); std::vector& getRockets(); @@ -42,11 +40,8 @@ private: std::vector rockets; sf::Texture rocketTexture; sf::Texture bulletTexture; - bool isBlinking = false; sf::Color originalColor; - sf::Clock immortalityClock; // Zegar kontrolujący czas nieśmiertelności - int health = 3; // Liczba punktów życia gracza float immortalityDuration = 1.5f; // Czas trwania nieśmiertelności w sec bool isImmortal = false; // flaga na immortal }; diff --git a/sources/Plansza.cpp b/sources/Plansza.cpp index a1d4477..a30bc28 100644 --- a/sources/Plansza.cpp +++ b/sources/Plansza.cpp @@ -59,7 +59,7 @@ Plansza::Plansza(unsigned int windowHeight, unsigned int windowWidth, sf::Render spawnClock.restart(); } - +// TODO: Refactor tej metody bo rozrosła się za bardzo już void Plansza::update() { // tło background.update(); @@ -136,18 +136,18 @@ void Plansza::update() { update_hearts(); ship->updateBullets(); - ship.update(); + ship->update(); window->draw(ship->getSprite()); for (auto &meteor: meteors) { if (ship->getSprite().getGlobalBounds().intersects(meteor.getSprite().getGlobalBounds())) { - ship.onHit(); + ship->takeDamage(); } } for (auto heartIt = hearts.begin(); heartIt != hearts.end();) { - if (ship.getSprite().getGlobalBounds().intersects(heartIt->getSprite().getGlobalBounds())) { - ship.healUP(); + if (ship->getSprite().getGlobalBounds().intersects(heartIt->getSprite().getGlobalBounds())) { + ship->healUP(); heartIt = hearts.erase(heartIt); } else { ++heartIt; @@ -156,9 +156,9 @@ void Plansza::update() { for (auto meteorIt = getMeteors().begin(); meteorIt != getMeteors().end();) { bool meteorHit = false; - for (auto rocketIt = ship.getBullets().begin(); rocketIt != ship.getBullets().end();) { + for (auto rocketIt = ship->getBullets().begin(); rocketIt != ship->getBullets().end();) { if (meteorIt->getSprite().getGlobalBounds().intersects(rocketIt->getSprite().getGlobalBounds())) { - ship.getBullets().erase(rocketIt); + ship->getBullets().erase(rocketIt); meteorIt = getMeteors().erase(meteorIt); meteorHit = true; break; @@ -173,9 +173,9 @@ void Plansza::update() { for (auto meteorIt = getMeteors().begin(); meteorIt != getMeteors().end();) { bool meteorHit = false; - for (auto rocketIt = ship.getRockets().begin(); rocketIt != ship.getRockets().end();) { + for (auto rocketIt = ship->getRockets().begin(); rocketIt != ship->getRockets().end();) { if (meteorIt->getSprite().getGlobalBounds().intersects(rocketIt->getSprite().getGlobalBounds())) { - ship.getRockets().erase(rocketIt); + ship->getRockets().erase(rocketIt); meteorIt = getMeteors().erase(meteorIt); meteorHit = true; break; @@ -189,13 +189,7 @@ void Plansza::update() { } - // Warunek przeganej if (gameOver) { - ship->takeDamage(); - } - } - - if (!ship->isAlive()) { sf::RenderWindow errorWindow(sf::VideoMode(350, 200), "The end"); sf::Font font; if (!font.loadFromFile("../assets/fonts/arial.ttf")) { @@ -662,7 +656,7 @@ void Plansza::update() { // Statystyka życia gracza (wyświetlanie) - switch (ship.getHP()) { + switch (ship->getHP()) { case 0: heartStats[0].setTexture(heartTextureGray); heartStats[1].setTexture(heartTextureGray); diff --git a/sources/Player.cpp b/sources/Player.cpp index 6cb593c..a52629b 100644 --- a/sources/Player.cpp +++ b/sources/Player.cpp @@ -8,7 +8,7 @@ #include Player::Player(int x, int y, const sf::Texture& texture) : Actor(x, y, texture) { - + hp = 3; } Player* Player::getInstance(int x, int y, const sf::Texture& texture) { @@ -21,7 +21,6 @@ Player* Player::getInstance(int x, int y, const sf::Texture& texture) { void Player::loadTexture() { bulletTexture.loadFromFile("../assets/img/bullets/bullet_pink.png"); rocketTexture.loadFromFile("../assets/img/rockets/Rocket_111.png"); - hp = 3; damageDealClock.restart(); originalColor = actorSprite.getColor(); } @@ -64,43 +63,10 @@ void Player::update() { void Player::takeDamage() { if (!isImmortal) { - if (health > 0) { - health--; - std::cout << "Player hit! Remaining health: " << health << "\n"; + if (hp > 0) { + hp--; isImmortal = true; // Aktywuj chwilową nieśmiertelność immortalityClock.restart(); - - - if (health <= 0) { - std::cout << "Player has been destroyed!\n"; - std::cout << "You lost the game!\n"; - - } - } - } -} - -bool Player::isAlive() const { - return health > 0; -} - -void Player::onHit() { - dealDamage(); - isBlinking = true; -} - -void Player::update() { - if (isBlinking) { - auto elapsed = damageDealClock.getElapsedTime().asMilliseconds(); - if (elapsed < 1000) { // miganie przez 1 sekundę - if ((elapsed / 100) % 2 == 0) { - actorSprite.setColor(sf::Color(255, 255, 255, 128)); // półprzeźroczysty - } else { - actorSprite.setColor(originalColor); // oryginalny kolor - } - } else { - isBlinking = false; - actorSprite.setColor(originalColor); // przywróć oryginalny kolor } } }