Dziala powerup na prędkość poruszania się

This commit is contained in:
2025-01-06 01:31:59 +01:00
parent 3d83a3a767
commit b1b5858fb6
10 changed files with 85 additions and 28 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -6,7 +6,7 @@
class Heart : public ObjectItem {
public:
Heart(float x, float y, sf::Texture &texture);
Heart(float x, float y, sf::Texture &texture_);
void update() override;
};

View File

@@ -7,6 +7,7 @@
class ObjectItem {
public:
virtual ~ObjectItem() = default;
ObjectItem(float x, float y, sf::Texture &texture);
sf::Sprite &getSprite();
bool getStatus();

View File

@@ -15,6 +15,7 @@
#include "AudioManager.h"
#include "Plansza.h"
#include "Heart.hpp"
#include "PowerUp.h"
#include "Size.h"
enum ships{
@@ -31,8 +32,10 @@ public:
std::vector<Meteor> &getMeteors();
void spawn_meteor();
void spawn_hearts();
void spawn_power_up();
void update_meteors();
void update_hearts();
void update_power_ups();
void update();
void update_score();
void spawn_player();
@@ -56,6 +59,7 @@ private:
sf::Font font;
sf::Clock meteorSpawnClock;
sf::Clock heartSpawnClock;
sf::Clock powerUpSpawnClock;
sf::Clock spawnClock;
sf::Clock scoreClock;
sf::Clock shooterSpawnClock;
@@ -79,6 +83,7 @@ private:
sf::Texture meteorTexture2;
sf::Texture heartTexture;
sf::Texture heartTextureGray;
sf::Texture powerUpTexture;
std::vector<Enemy> enemies;
std::vector<AdvancedEnemy> AEnemies;
std::vector<Bomber> BEnemies;
@@ -87,6 +92,7 @@ private:
std::vector<Meteor> meteors;
std::vector<Heart> hearts;
std::vector<sf::Sprite> heartStats;
std::vector<PowerUp> powerUps;
bool gameOver = false;
};

View File

@@ -2,8 +2,10 @@
#define POWERUP_H
#include "ObjectItem.hpp"
class PowerUp : ObjectItem {
class PowerUp : public ObjectItem {
public:
PowerUp(float x, float y, sf::Texture &texture_);
void update() override;
};
#endif //POWERUP_H

View File

@@ -1,13 +1,11 @@
#include "../headers/Heart.hpp"
Heart::Heart(float x, float y, sf::Texture &texture) : ObjectItem(x,y,texture) {
outOfBounds = false;
texture = texture;
sprite.setTexture(texture);
texture_ = texture;
sprite.setTexture(texture_);
sprite.setOrigin(sprite.getLocalBounds().width / 2, sprite.getLocalBounds().height / 2); // wycentrowanie sprite
sprite.setPosition(x, y);
movingSpeed = 3.0f;
// sprite.scale(0.05f, 0.05f);
position.x = x;
position.y = y;
rotationSpeed = 0;
@@ -16,7 +14,6 @@ Heart::Heart(float x, float y, sf::Texture &texture) : ObjectItem(x,y,texture) {
void Heart::update() {
sprite.move(0.0f, movingSpeed); // przesunięcie sprajta
position.y += int(movingSpeed); // przesunięcie pozycji
// sprite.rotate(rotationSpeed); // obracanie tym meteorkiem pięknym
if(position.y > 900) {
outOfBounds = true; // jeżeli wyszedł poza granice ekranu ustaw tą zmienną
}

View File

@@ -1,7 +1,6 @@
#include "../headers/Meteor.h"
Meteor::Meteor(float x, float y, sf::Texture &texture) : ObjectItem(x, y, texture) {
outOfBounds = false;
texture_ = texture;
sprite.setTexture(texture);
sprite.setOrigin(sprite.getLocalBounds().width / 2, sprite.getLocalBounds().height / 2); // wycentrowanie sprite

View File

@@ -1,6 +1,7 @@
#include "../headers/ObjectItem.hpp"
ObjectItem::ObjectItem(float x, float y, sf::Texture &texture) {
outOfBounds = false;
Position position_ = {0,0};
position_.x = static_cast<int>(x);
position_.y = static_cast<int>(y);

View File

@@ -21,8 +21,12 @@ Plansza::Plansza(unsigned int windowHeight, unsigned int windowWidth, sf::Render
} else {
playerTexture.loadFromFile("../assets/ship/Dreadnought-Base.png");
}
// Ładowanie tekstur itemów
meteorTexture1.loadFromFile("../assets/img/meteors/meteor-1.png");
meteorTexture2.loadFromFile("../assets/img/meteors/meteor-2.png");
heartTexture.loadFromFile("../assets/img/hearts/heart.png");
heartTextureGray.loadFromFile("../assets/img/hearts/heart_gray.png");
powerUpTexture.loadFromFile("../assets/img/powerups/PUSpeed.png");
// Ładowanie tekstur wrogów
enemyTexture.loadFromFile("../assets/img/enemy/enemy.png");
advancedEnemyTexture.loadFromFile("../assets/img/enemy/advanced_enemy.png");
@@ -50,12 +54,6 @@ Plansza::Plansza(unsigned int windowHeight, unsigned int windowWidth, sf::Render
audioManager.loadSoundEffect("shoot_alt", "../assets/sounds/shoot_alt.ogg");
audioManager.loadSoundEffect("fail", "../assets/sounds/fail.mp3");
meteorTexture1.loadFromFile("../assets/img/meteors/meteor-1.png");
meteorTexture2.loadFromFile("../assets/img/meteors/meteor-2.png");
heartTexture.loadFromFile("../assets/img/hearts/heart.png");
heartTextureGray.loadFromFile("../assets/img/hearts/heart_gray.png");
heartStats.emplace_back(heartTexture);
heartStats.emplace_back(heartTexture);
heartStats.emplace_back(heartTexture);
@@ -64,6 +62,7 @@ Plansza::Plansza(unsigned int windowHeight, unsigned int windowWidth, sf::Render
heartStats[2].setPosition(495, 10);
meteorSpawnClock.restart();
powerUpSpawnClock.restart();
spawn_player();
spawnClock.restart();
@@ -111,13 +110,14 @@ void Plansza::update() {
ship->update(); // migotanie statku
update_score(); // naliczanie punktów
// Sprawnowanie wszystkich rodzajów wrogów
spawn_meteor();
spawn_hearts();
spawn_enemy();
spawn_advanced_enemy();
spawn_wiazkowiec();
spawn_bomber();
spawn_kamikadze();
// spawn_meteor();
// spawn_hearts();
spawn_power_up();
// spawn_enemy();
// spawn_advanced_enemy();
// spawn_wiazkowiec();
// spawn_bomber();
// spawn_kamikadze();
// utrzymanie meteorów i pocisków w ruchu
for (auto &meteor: meteors) {
@@ -130,6 +130,11 @@ void Plansza::update() {
window->draw(heart.getSprite());
}
for (auto &powerUp: powerUps) {
powerUp.update();
window->draw(powerUp.getSprite());
}
for (auto &bullet: ship->getBullets()) {
bullet.update();
window->draw(bullet.getSprite());
@@ -162,6 +167,16 @@ void Plansza::update() {
}
}
// TODO: Dodać obsługę kilku różnych power-upów
for (auto powerUpIt = powerUps.begin(); powerUpIt != powerUps.end();) {
if (ship->getSprite().getGlobalBounds().intersects(powerUpIt->getSprite().getGlobalBounds())) {
ship->setMovingSpeed(10.0f);
powerUpIt = powerUps.erase(powerUpIt);
} else {
++powerUpIt;
}
}
for (auto meteorIt = getMeteors().begin(); meteorIt != getMeteors().end();) {
bool meteorHit = false;
for (auto rocketIt = ship->getBullets().begin(); rocketIt != ship->getBullets().end();) {
@@ -706,6 +721,23 @@ void Plansza::update_meteors() {
}
}
void Plansza::update_hearts() {
// usuwanie serduszek, które wyleciały poza ekran
for (auto& heart : hearts) {
if(heart.getStatus()) {
hearts.erase(hearts.begin());
}
}
}
void Plansza::update_power_ups() {
for (auto& power : powerUps) {
if(power.getStatus()) {
powerUps.erase(powerUps.begin());
}
}
}
void Plansza::spawn_meteor() {
if (meteorSpawnClock.getElapsedTime().asSeconds() > rand() % 10 + 1) { // randomowy spawn meteorytów od 10 do 1 sekundy
if (meteors.size() < 5) { // jeśli jest mniej niż 5 meteorów na planszy
@@ -728,12 +760,12 @@ void Plansza::spawn_hearts() {
}
}
void Plansza::update_hearts() {
// usuwanie serduszek, które wyleciały poza ekran
for (auto& heart : hearts) {
if(heart.getStatus()) {
hearts.erase(hearts.begin());
void Plansza::spawn_power_up() {
if (powerUpSpawnClock.getElapsedTime().asSeconds() > 5) {
if (powerUps.size() < 2) {
powerUps.emplace_back(RandomNumberGenerator::getRandomNumber(50, 499), -100, powerUpTexture);
}
powerUpSpawnClock.restart();
}
}

View File

@@ -1 +1,20 @@
#include "../headers/PowerUp.h"
#include "../headers/PowerUp.h"
PowerUp::PowerUp(float x, float y, sf::Texture &texture): ObjectItem(x, y, texture) {
position.x = x;
position.y = y;
texture_ = texture;
sprite.setTexture(texture);
sprite.setOrigin(sprite.getLocalBounds().width / 2, sprite.getLocalBounds().height / 2); // wycentrowanie sprite
sprite.setScale(0.5f, 0.5f);
sprite.setPosition(x, y);
movingSpeed = 3.0f;
}
void PowerUp::update() {
sprite.move(0.0f, movingSpeed); // przesunięcie sprajta
position.y += int(movingSpeed); // przesunięcie pozycji
if(position.y > 900) {
outOfBounds = true; // jeżeli wyszedł poza granice ekranu ustaw tą zmienną
}
}