diff --git a/CMakeLists.txt b/CMakeLists.txt index 34a32e9..8dbfe23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,8 @@ add_executable(LotoStatek main.cpp sources/AdvancedEnemy.cpp headers/Bomber.h sources/Bomber.cpp + headers/Kamikadze.h + sources/Kamikadze.cpp ) if(WIN32) diff --git a/headers/Bomber.h b/headers/Bomber.h index 7f1a77c..9de6954 100644 --- a/headers/Bomber.h +++ b/headers/Bomber.h @@ -24,6 +24,7 @@ public: void moveRight() override; void moveUp() override; void moveDown() override; + void setRandomDirection(); void update(); diff --git a/headers/Kamikadze.h b/headers/Kamikadze.h new file mode 100644 index 0000000..5fa494c --- /dev/null +++ b/headers/Kamikadze.h @@ -0,0 +1,8 @@ +// +// Created by k on 11.12.2024. +// + +#ifndef KAMIKADZE_H +#define KAMIKADZE_H + +#endif //KAMIKADZE_H diff --git a/sources/Bomber.cpp b/sources/Bomber.cpp index b909971..efb9a63 100644 --- a/sources/Bomber.cpp +++ b/sources/Bomber.cpp @@ -1,21 +1,48 @@ #include "../headers/Bomber.h" #include "../headers/Bullet.h" +#include Bomber::Bomber(int x, int y, const sf::Texture& texture, const sf::Texture& bulletTexture) : Actor(x, y, texture) { actorSprite.setTexture(texture); BombaTexture = bulletTexture; hp = 2; // 2 punkty życia - firerate = 2000; // Strzela co 2 - moving_speed = 2.0f; // Prędkość - BombaTexture.loadFromFile("../assets/img/bullets/bomba.png"); + firerate = 10000; // Strzela co 10 + moving_speed = 1.0f; // Prędkość + // BombaTexture.loadFromFile("../assets/img/bullets/bomba.png"); +} + +// Losuje losowy kierunek dla Bombera +void Bomber::setRandomDirection() { + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution dist(0, 3); + + int randomDirection = dist(gen); + + // Zapobieganie wyjscia poza ekran + switch (randomDirection) { + case 0: + if (position.y > 0) direction = DirectionB::Up; + break; + case 1: + if (position.y < 800) direction = DirectionB::Down; + break; + case 2: + if (position.x > 0) direction = DirectionB::Left; + break; + case 3: + if (position.x < 1200) direction = DirectionB::Right; + break; + } } void Bomber::shoot() { if (shootClock.getElapsedTime().asMilliseconds() >= firerate) { Bullet Bbullet(position.x, position.y + actorSprite.getGlobalBounds().height / 2, BombaTexture); - Bbullet.setSpeed(0.5f); // Prędkość w dół + Bbullet.setSpeed(0.1f); // Prędkość w dół bullets.emplace_back(std::move(Bbullet)); shootClock.restart(); + setRandomDirection(); } } diff --git a/sources/Bullet.cpp b/sources/Bullet.cpp index 17ff7a2..226401f 100644 --- a/sources/Bullet.cpp +++ b/sources/Bullet.cpp @@ -1,9 +1,13 @@ #include "../headers/Bullet.h" +#include +#include + void Bullet::update() { + //std::cout << "Start update: speed = " << speed << ", position.y = " << position.y << std::endl; sprite.move(0.0f, speed); position.y += int(speed); if(position.y < -100) { outOfBounds = true; } -} \ No newline at end of file +} diff --git a/sources/Kamikadze.cpp b/sources/Kamikadze.cpp new file mode 100644 index 0000000..2fcec76 --- /dev/null +++ b/sources/Kamikadze.cpp @@ -0,0 +1,3 @@ +// +// Created by k on 11.12.2024. +// diff --git a/sources/Plansza.cpp b/sources/Plansza.cpp index 9e91303..15beee7 100644 --- a/sources/Plansza.cpp +++ b/sources/Plansza.cpp @@ -42,6 +42,10 @@ Plansza::Plansza(unsigned int windowHeight, unsigned int windowWidth, sf::Render std::cerr << "Failed to load advanced enemy texture!" << std::endl; exit(-1); } + if (!BombaTexture.loadFromFile("../assets/img/bullets/bomba.png")) { + std::cerr << "Failed to load BombaTexture!" << std::endl; + exit(-1); + } spawnClock.restart(); } @@ -489,7 +493,7 @@ void Plansza::spawn_enemy() { } void Plansza::spawn_advanced_enemy() { - if (AenemySpawnClock.getElapsedTime().asSeconds() >= 100) { // Spawn co 10 sekund + if (AenemySpawnClock.getElapsedTime().asSeconds() >= 80) { // Spawn co 10 sekund int spawnX = RandomNumberGenerator::getRandomNumber(50, size.width - 50); AEnemies.emplace_back(spawnX, -50, advancedEnemyTexture, enemyBulletTexture); std::cout << "Spawned Advanced Enemy at X: " << spawnX << std::endl; @@ -498,7 +502,7 @@ void Plansza::spawn_advanced_enemy() { } void Plansza::spawn_bomber() { - if (BomberSpawnClock.getElapsedTime().asSeconds() >= 5) { // Spawn co 10 sekund + if (BomberSpawnClock.getElapsedTime().asSeconds() >= 10) { // Spawn co 10 sekund int spawnX = RandomNumberGenerator::getRandomNumber(50, size.width - 50); BEnemies.emplace_back(spawnX, -50, BomberEnemyTexture, BombaTexture); std::cout << "Spawned Bomber Enemy at X: " << spawnX << std::endl;