Dziala powerup na prędkość poruszania się
This commit is contained in:
BIN
assets/img/powerups/PUSpeed.png
Normal file
BIN
assets/img/powerups/PUSpeed.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.0 KiB |
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
class ObjectItem {
|
||||
public:
|
||||
virtual ~ObjectItem() = default;
|
||||
ObjectItem(float x, float y, sf::Texture &texture);
|
||||
sf::Sprite &getSprite();
|
||||
bool getStatus();
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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ą
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +1,20 @@
|
||||
#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ą
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user