#include <iostream>
#include <SFML/Graphics.hpp>
#include <vector>
#include <algorithm>
#include "Player.hpp"
#include "Global.hpp"
#include "Enemy.hpp"
float randint(float min, float max) {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(min, max);
return dis(gen);
}
int main() {
Player player;
player.setPos({ gbl::winWidth / 2.f, gbl::winHeight / 2.f });
std::vector<Enemy> enemies;
sf::RenderWindow window(sf::VideoMode(gbl::winWidth, gbl::winHeight), gbl::title);
for (int i = 0; i < 5; i++) {
Enemy newEnemy;
newEnemy.setPos({ randint(10 + newEnemy.getSize().x, gbl::winWidth - newEnemy.getSize().x), 100 });
enemies.push_back(newEnemy);
}
sf::Event ev;
while (window.isOpen()) {
while (window.pollEvent(ev)) {
switch (ev.type) {
case sf::Event::KeyPressed:
if (ev.key.code == sf::Keyboard::Escape) window.close();
break;
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyReleased:
if (ev.key.code == sf::Keyboard::R) {
player.reset();
for (auto& enemy : enemies) {
enemy.setPos({ randint(0, gbl::winWidth), 100 });
}
}
}
}
window.clear(gbl::bgColor);
player.draw(window);
std::for_each(enemies.begin(), enemies.end(), [&window](Enemy& enemy) {
enemy.update();
if (enemy.getPos().y + enemy.getSize().y > gbl::winHeight + enemy.getSize().y) {
enemy.setOffscreen();
}
enemy.draw(window);
});
player.move();
window.display();
}
return 0;
}
I tried manually creating object of type Enemy and push them in the vector. When i run the game doing this everything works as intended. But when i use a for loop to fill the vector and i run the game only the player’s sprite is rendered. I tried putting the for loop inside and outside the main loop but it didn’t work. What should i do?
Note: the random header file is in one of the header files
New contributor
Xcc40 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.