Zaimplementowano pauze
This commit is contained in:
@@ -36,8 +36,15 @@ public:
|
|||||||
void update_meteors();
|
void update_meteors();
|
||||||
void update_hearts();
|
void update_hearts();
|
||||||
void update_power_ups();
|
void update_power_ups();
|
||||||
|
|
||||||
|
|
||||||
void update();
|
void update();
|
||||||
void update_score();
|
void update_score();
|
||||||
|
|
||||||
|
void check_PowerUp_collisions();
|
||||||
|
void check_Heart_collisions();
|
||||||
|
void check_Meteor_collisions();
|
||||||
|
|
||||||
void spawn_player();
|
void spawn_player();
|
||||||
void spawn_enemy();
|
void spawn_enemy();
|
||||||
void spawn_advanced_enemy();
|
void spawn_advanced_enemy();
|
||||||
@@ -50,13 +57,13 @@ public:
|
|||||||
|
|
||||||
static ships selectedShip;
|
static ships selectedShip;
|
||||||
static unsigned int score;
|
static unsigned int score;
|
||||||
|
sf::Font font;
|
||||||
private:
|
private:
|
||||||
Background background;
|
Background background;
|
||||||
AudioManager audioManager;
|
AudioManager audioManager;
|
||||||
Player *ship;
|
Player *ship;
|
||||||
Size size;
|
Size size;
|
||||||
sf::RenderWindow *window;
|
sf::RenderWindow *window;
|
||||||
sf::Font font;
|
|
||||||
sf::Clock meteorSpawnClock;
|
sf::Clock meteorSpawnClock;
|
||||||
sf::Clock heartSpawnClock;
|
sf::Clock heartSpawnClock;
|
||||||
sf::Clock powerUpSpawnClock;
|
sf::Clock powerUpSpawnClock;
|
||||||
|
|||||||
26
main.cpp
26
main.cpp
@@ -19,6 +19,7 @@ int main() {
|
|||||||
icon.loadFromFile("../assets/img/icon/ikonka.png");
|
icon.loadFromFile("../assets/img/icon/ikonka.png");
|
||||||
mainWindow.setIcon(128, 128, icon.getPixelsPtr());
|
mainWindow.setIcon(128, 128, icon.getPixelsPtr());
|
||||||
|
|
||||||
|
bool isPaused = false;
|
||||||
|
|
||||||
Plansza plansza(mainWindow.getSize().y, mainWindow.getSize().x, &mainWindow, selectedShip);
|
Plansza plansza(mainWindow.getSize().y, mainWindow.getSize().x, &mainWindow, selectedShip);
|
||||||
|
|
||||||
@@ -32,9 +33,27 @@ int main() {
|
|||||||
mainWindow.close();
|
mainWindow.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
plansza.update();
|
|
||||||
|
|
||||||
mainWindow.display();
|
// Obsługa pauzy
|
||||||
|
if (event.key.code == sf::Keyboard::P) {
|
||||||
|
isPaused = !isPaused;
|
||||||
|
|
||||||
|
sf::RectangleShape bg(sf::Vector2f(mainWindow.getSize().x, mainWindow.getSize().y));
|
||||||
|
bg.setFillColor(sf::Color(0,0,0,100));
|
||||||
|
sf::Text text("PAUZA", plansza.font, 50);
|
||||||
|
text.setOrigin(text.getLocalBounds().getSize().x/2, text.getLocalBounds().getSize().y/2);
|
||||||
|
text.setFillColor(sf::Color::White);
|
||||||
|
text.setPosition(mainWindow.getSize().x/2, mainWindow.getSize().y/2);
|
||||||
|
plansza.update();
|
||||||
|
mainWindow.draw(bg);
|
||||||
|
mainWindow.draw(text);
|
||||||
|
mainWindow.display();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isPaused) { // jesli nie spauzowane to graj
|
||||||
|
plansza.update();
|
||||||
|
mainWindow.display();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -121,6 +140,9 @@ void menu() {
|
|||||||
menuWindow.close();
|
menuWindow.close();
|
||||||
exit(-2);
|
exit(-2);
|
||||||
}
|
}
|
||||||
|
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Enter)) {
|
||||||
|
menuWindow.close();
|
||||||
|
}
|
||||||
|
|
||||||
if (event.type == sf::Event::MouseButtonPressed) {
|
if (event.type == sf::Event::MouseButtonPressed) {
|
||||||
if (event.mouseButton.button == sf::Mouse::Left) {
|
if (event.mouseButton.button == sf::Mouse::Left) {
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ Plansza::Plansza(unsigned int windowHeight, unsigned int windowWidth, sf::Render
|
|||||||
|
|
||||||
// TODO: Refactor tej metody bo rozrosła się za bardzo już
|
// TODO: Refactor tej metody bo rozrosła się za bardzo już
|
||||||
void Plansza::update() {
|
void Plansza::update() {
|
||||||
srand(time(0));
|
srand(time(0)); // generacja innego ziarna na podstawie zegara systemowego
|
||||||
// tło
|
// tło
|
||||||
background.update();
|
background.update();
|
||||||
background.draw(*window);
|
background.draw(*window);
|
||||||
@@ -109,18 +109,17 @@ void Plansza::update() {
|
|||||||
// audioManager.playSoundEffect("shoot_alt", 70.f); // Odtworzenie dźwięku dla alternatywnego strzału
|
// audioManager.playSoundEffect("shoot_alt", 70.f); // Odtworzenie dźwięku dla alternatywnego strzału
|
||||||
}
|
}
|
||||||
|
|
||||||
// generowanie nowego meteoru
|
|
||||||
ship->update(); // migotanie statku
|
ship->update(); // migotanie statku
|
||||||
update_score(); // naliczanie punktów
|
update_score(); // naliczanie punktów
|
||||||
// Sprawnowanie wszystkich rodzajów wrogów
|
// Sprawnowanie wszystkich rodzajów wrogów
|
||||||
// spawn_meteor();
|
spawn_meteor();
|
||||||
// spawn_hearts();
|
spawn_hearts();
|
||||||
spawn_power_up();
|
spawn_power_up();
|
||||||
// spawn_enemy();
|
spawn_enemy();
|
||||||
// spawn_advanced_enemy();
|
spawn_advanced_enemy();
|
||||||
// spawn_wiazkowiec();
|
spawn_wiazkowiec();
|
||||||
// spawn_bomber();
|
spawn_bomber();
|
||||||
// spawn_kamikadze();
|
spawn_kamikadze();
|
||||||
|
|
||||||
// utrzymanie meteorów i pocisków w ruchu
|
// utrzymanie meteorów i pocisków w ruchu
|
||||||
for (auto &meteor: meteors) {
|
for (auto &meteor: meteors) {
|
||||||
@@ -156,44 +155,9 @@ void Plansza::update() {
|
|||||||
|
|
||||||
window->draw(ship->getSprite());
|
window->draw(ship->getSprite());
|
||||||
|
|
||||||
for (auto &meteor: meteors) {
|
check_Meteor_collisions();
|
||||||
if (ship->getSprite().getGlobalBounds().intersects(meteor.getSprite().getGlobalBounds())) {
|
check_Heart_collisions();
|
||||||
ship->takeDamage();
|
check_PowerUp_collisions();
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto heartIt = hearts.begin(); heartIt != hearts.end();) {
|
|
||||||
if (ship->getSprite().getGlobalBounds().intersects(heartIt->getSprite().getGlobalBounds())) {
|
|
||||||
ship->healUP();
|
|
||||||
heartIt = hearts.erase(heartIt);
|
|
||||||
} else {
|
|
||||||
++heartIt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Dodać obsługę kilku różnych power-upów
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Sprawdzenie kolizji z power-upem na prędkość poruszania się i zwiększenie prędkości statku
|
|
||||||
for (auto powerUpIt = powerUps.begin(); powerUpIt != powerUps.end();) {
|
|
||||||
if (ship->getSprite().getGlobalBounds().intersects(powerUpIt->getSprite().getGlobalBounds())) {
|
|
||||||
if (powerUpIt->getType() == PowerUp::movingSpeedUp) {
|
|
||||||
ship->setMovingSpeed(15.0f);
|
|
||||||
movingSpeedPUTimer.restart();
|
|
||||||
}
|
|
||||||
if (powerUpIt->getType() == PowerUp::firerateUp) {
|
|
||||||
ship->setFirerate(100);
|
|
||||||
fireratePUTimer.restart();
|
|
||||||
}
|
|
||||||
if (powerUpIt->getType() == PowerUp::tripleShotUp) {
|
|
||||||
ship->setTripleShot(true);
|
|
||||||
tripleShotPUTimer.restart();
|
|
||||||
}
|
|
||||||
powerUpIt = powerUps.erase(powerUpIt);
|
|
||||||
} else {
|
|
||||||
++powerUpIt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (movingSpeedPUTimer.getElapsedTime().asSeconds() >= 5.0f) {
|
if (movingSpeedPUTimer.getElapsedTime().asSeconds() >= 5.0f) {
|
||||||
ship->setMovingSpeed(8.0f);
|
ship->setMovingSpeed(8.0f);
|
||||||
@@ -204,43 +168,6 @@ void Plansza::update() {
|
|||||||
if (tripleShotPUTimer.getElapsedTime().asSeconds() >= 5.0f) {
|
if (tripleShotPUTimer.getElapsedTime().asSeconds() >= 5.0f) {
|
||||||
ship->setTripleShot(false);
|
ship->setTripleShot(false);
|
||||||
}
|
}
|
||||||
///////////////////////////////Koniec obsługi kolizji z power-upami//////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
for (auto meteorIt = getMeteors().begin(); meteorIt != getMeteors().end();) {
|
|
||||||
bool meteorHit = false;
|
|
||||||
for (auto rocketIt = ship->getBullets().begin(); rocketIt != ship->getBullets().end();) {
|
|
||||||
if (meteorIt->getSprite().getGlobalBounds().intersects(rocketIt->getSprite().getGlobalBounds())) {
|
|
||||||
ship->getBullets().erase(rocketIt);
|
|
||||||
meteorIt = getMeteors().erase(meteorIt);
|
|
||||||
meteorHit = true;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
++rocketIt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!meteorHit) {
|
|
||||||
++meteorIt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto meteorIt = getMeteors().begin(); meteorIt != getMeteors().end();) {
|
|
||||||
bool meteorHit = false;
|
|
||||||
for (auto rocketIt = ship->getRockets().begin(); rocketIt != ship->getRockets().end();) {
|
|
||||||
if (meteorIt->getSprite().getGlobalBounds().intersects(rocketIt->getSprite().getGlobalBounds())) {
|
|
||||||
ship->getRockets().erase(rocketIt);
|
|
||||||
meteorIt = getMeteors().erase(meteorIt);
|
|
||||||
meteorHit = true;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
++rocketIt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!meteorHit) {
|
|
||||||
++meteorIt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (gameOver) {
|
if (gameOver) {
|
||||||
sf::RenderWindow errorWindow(sf::VideoMode(350, 200), "The end");
|
sf::RenderWindow errorWindow(sf::VideoMode(350, 200), "The end");
|
||||||
@@ -305,6 +232,40 @@ void Plansza::update() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto meteorIt = getMeteors().begin(); meteorIt != getMeteors().end();) {
|
||||||
|
bool meteorHit = false;
|
||||||
|
for (auto bulletIt = ship->getBullets().begin(); bulletIt != ship->getBullets().end();) {
|
||||||
|
if (meteorIt->getSprite().getGlobalBounds().intersects(bulletIt->getSprite().getGlobalBounds())) {
|
||||||
|
ship->getBullets().erase(bulletIt);
|
||||||
|
meteorIt = getMeteors().erase(meteorIt);
|
||||||
|
meteorHit = true;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
++bulletIt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!meteorHit) {
|
||||||
|
++meteorIt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto meteorIt = getMeteors().begin(); meteorIt != getMeteors().end();) {
|
||||||
|
bool meteorHit = false;
|
||||||
|
for (auto rocketIt = ship->getRockets().begin(); rocketIt != ship->getRockets().end();) {
|
||||||
|
if (meteorIt->getSprite().getGlobalBounds().intersects(rocketIt->getSprite().getGlobalBounds())) {
|
||||||
|
ship->getRockets().erase(rocketIt);
|
||||||
|
meteorIt = getMeteors().erase(meteorIt);
|
||||||
|
meteorHit = true;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
++rocketIt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!meteorHit) {
|
||||||
|
++meteorIt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Ruch i render przeciwnika
|
// Ruch i render przeciwnika
|
||||||
for (auto it = enemies.begin(); it != enemies.end();) {
|
for (auto it = enemies.begin(); it != enemies.end();) {
|
||||||
it->update(); // Aktualizacja kierunku i ruchu
|
it->update(); // Aktualizacja kierunku i ruchu
|
||||||
@@ -769,8 +730,8 @@ void Plansza::update_power_ups() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Plansza::spawn_meteor() {
|
void Plansza::spawn_meteor() {
|
||||||
if (meteorSpawnClock.getElapsedTime().asSeconds() > rand() % 10 + 1) { // randomowy spawn meteorytów od 10 do 1 sekundy
|
if (meteorSpawnClock.getElapsedTime().asSeconds() > rand() % 30 + 5) { // randomowy spawn meteorytów od 10 do 1 sekundy
|
||||||
if (meteors.size() < 5) { // jeśli jest mniej niż 5 meteorów na planszy
|
if (meteors.size() < 3) { // jeśli jest mniej niż 5 meteorów na planszy
|
||||||
if (rand() % 2 == 1) {
|
if (rand() % 2 == 1) {
|
||||||
meteors.emplace_back(RandomNumberGenerator::getRandomNumber(50, 499), -100, meteorTexture2);
|
meteors.emplace_back(RandomNumberGenerator::getRandomNumber(50, 499), -100, meteorTexture2);
|
||||||
} else {
|
} else {
|
||||||
@@ -890,5 +851,46 @@ void Plansza::update_score() {
|
|||||||
window->draw(text);
|
window->draw(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Plansza::check_PowerUp_collisions() {
|
||||||
|
for (auto powerUpIt = powerUps.begin(); powerUpIt != powerUps.end();) {
|
||||||
|
if (ship->getSprite().getGlobalBounds().intersects(powerUpIt->getSprite().getGlobalBounds())) {
|
||||||
|
if (powerUpIt->getType() == PowerUp::movingSpeedUp) {
|
||||||
|
ship->setMovingSpeed(15.0f);
|
||||||
|
movingSpeedPUTimer.restart();
|
||||||
|
}
|
||||||
|
if (powerUpIt->getType() == PowerUp::firerateUp) {
|
||||||
|
ship->setFirerate(100);
|
||||||
|
fireratePUTimer.restart();
|
||||||
|
}
|
||||||
|
if (powerUpIt->getType() == PowerUp::tripleShotUp) {
|
||||||
|
ship->setTripleShot(true);
|
||||||
|
tripleShotPUTimer.restart();
|
||||||
|
}
|
||||||
|
powerUpIt = powerUps.erase(powerUpIt);
|
||||||
|
} else {
|
||||||
|
++powerUpIt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Plansza::check_Heart_collisions() {
|
||||||
|
for (auto heartIt = hearts.begin(); heartIt != hearts.end();) {
|
||||||
|
if (ship->getSprite().getGlobalBounds().intersects(heartIt->getSprite().getGlobalBounds())) {
|
||||||
|
ship->healUP();
|
||||||
|
heartIt = hearts.erase(heartIt);
|
||||||
|
} else {
|
||||||
|
++heartIt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Plansza::check_Meteor_collisions() {
|
||||||
|
for (auto &meteor: meteors) {
|
||||||
|
if (ship->getSprite().getGlobalBounds().intersects(meteor.getSprite().getGlobalBounds())) {
|
||||||
|
ship->takeDamage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ships Plansza::selectedShip = none;
|
ships Plansza::selectedShip = none;
|
||||||
unsigned int Plansza::score = 0;
|
unsigned int Plansza::score = 0;
|
||||||
Reference in New Issue
Block a user