Zaimplementowano pauze
This commit is contained in:
@@ -36,8 +36,15 @@ public:
|
||||
void update_meteors();
|
||||
void update_hearts();
|
||||
void update_power_ups();
|
||||
|
||||
|
||||
void update();
|
||||
void update_score();
|
||||
|
||||
void check_PowerUp_collisions();
|
||||
void check_Heart_collisions();
|
||||
void check_Meteor_collisions();
|
||||
|
||||
void spawn_player();
|
||||
void spawn_enemy();
|
||||
void spawn_advanced_enemy();
|
||||
@@ -50,13 +57,13 @@ public:
|
||||
|
||||
static ships selectedShip;
|
||||
static unsigned int score;
|
||||
sf::Font font;
|
||||
private:
|
||||
Background background;
|
||||
AudioManager audioManager;
|
||||
Player *ship;
|
||||
Size size;
|
||||
sf::RenderWindow *window;
|
||||
sf::Font font;
|
||||
sf::Clock meteorSpawnClock;
|
||||
sf::Clock heartSpawnClock;
|
||||
sf::Clock powerUpSpawnClock;
|
||||
|
||||
24
main.cpp
24
main.cpp
@@ -19,6 +19,7 @@ int main() {
|
||||
icon.loadFromFile("../assets/img/icon/ikonka.png");
|
||||
mainWindow.setIcon(128, 128, icon.getPixelsPtr());
|
||||
|
||||
bool isPaused = false;
|
||||
|
||||
Plansza plansza(mainWindow.getSize().y, mainWindow.getSize().x, &mainWindow, selectedShip);
|
||||
|
||||
@@ -32,11 +33,29 @@ int main() {
|
||||
mainWindow.close();
|
||||
}
|
||||
|
||||
plansza.update();
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
@@ -121,6 +140,9 @@ void menu() {
|
||||
menuWindow.close();
|
||||
exit(-2);
|
||||
}
|
||||
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Enter)) {
|
||||
menuWindow.close();
|
||||
}
|
||||
|
||||
if (event.type == sf::Event::MouseButtonPressed) {
|
||||
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ż
|
||||
void Plansza::update() {
|
||||
srand(time(0));
|
||||
srand(time(0)); // generacja innego ziarna na podstawie zegara systemowego
|
||||
// tło
|
||||
background.update();
|
||||
background.draw(*window);
|
||||
@@ -109,18 +109,17 @@ void Plansza::update() {
|
||||
// audioManager.playSoundEffect("shoot_alt", 70.f); // Odtworzenie dźwięku dla alternatywnego strzału
|
||||
}
|
||||
|
||||
// generowanie nowego meteoru
|
||||
ship->update(); // migotanie statku
|
||||
update_score(); // naliczanie punktów
|
||||
// Sprawnowanie wszystkich rodzajów wrogów
|
||||
// spawn_meteor();
|
||||
// spawn_hearts();
|
||||
spawn_meteor();
|
||||
spawn_hearts();
|
||||
spawn_power_up();
|
||||
// spawn_enemy();
|
||||
// spawn_advanced_enemy();
|
||||
// spawn_wiazkowiec();
|
||||
// spawn_bomber();
|
||||
// spawn_kamikadze();
|
||||
spawn_enemy();
|
||||
spawn_advanced_enemy();
|
||||
spawn_wiazkowiec();
|
||||
spawn_bomber();
|
||||
spawn_kamikadze();
|
||||
|
||||
// utrzymanie meteorów i pocisków w ruchu
|
||||
for (auto &meteor: meteors) {
|
||||
@@ -156,44 +155,9 @@ void Plansza::update() {
|
||||
|
||||
window->draw(ship->getSprite());
|
||||
|
||||
for (auto &meteor: meteors) {
|
||||
if (ship->getSprite().getGlobalBounds().intersects(meteor.getSprite().getGlobalBounds())) {
|
||||
ship->takeDamage();
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
check_Meteor_collisions();
|
||||
check_Heart_collisions();
|
||||
check_PowerUp_collisions();
|
||||
|
||||
if (movingSpeedPUTimer.getElapsedTime().asSeconds() >= 5.0f) {
|
||||
ship->setMovingSpeed(8.0f);
|
||||
@@ -204,43 +168,6 @@ void Plansza::update() {
|
||||
if (tripleShotPUTimer.getElapsedTime().asSeconds() >= 5.0f) {
|
||||
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) {
|
||||
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
|
||||
for (auto it = enemies.begin(); it != enemies.end();) {
|
||||
it->update(); // Aktualizacja kierunku i ruchu
|
||||
@@ -769,8 +730,8 @@ void Plansza::update_power_ups() {
|
||||
}
|
||||
|
||||
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
|
||||
if (meteorSpawnClock.getElapsedTime().asSeconds() > rand() % 30 + 5) { // randomowy spawn meteorytów od 10 do 1 sekundy
|
||||
if (meteors.size() < 3) { // jeśli jest mniej niż 5 meteorów na planszy
|
||||
if (rand() % 2 == 1) {
|
||||
meteors.emplace_back(RandomNumberGenerator::getRandomNumber(50, 499), -100, meteorTexture2);
|
||||
} else {
|
||||
@@ -890,5 +851,46 @@ void Plansza::update_score() {
|
||||
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;
|
||||
unsigned int Plansza::score = 0;
|
||||
Reference in New Issue
Block a user