Skip to content

Instantly share code, notes, and snippets.

@kenpower
Created October 9, 2025 08:34
Show Gist options
  • Save kenpower/4799a560615f2979b0da2e38485acdb8 to your computer and use it in GitHub Desktop.
Save kenpower/4799a560615f2979b0da2e38485acdb8 to your computer and use it in GitHub Desktop.
#include <SFML/Graphics.hpp>
#include <vector>
// --- helper functions --------------------------------------------------------
void handlePlayerInput(sf::Sprite& player)
{
const float speed = 5.f;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
player.move(-speed, 0);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
player.move(speed, 0);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
player.move(0, -speed);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
player.move(0, speed);
}
void updateEnemies(std::vector<sf::Sprite>& enemies, float delta)
{
for (auto& e : enemies)
e.move(0, 100.f * delta);
}
void detectCollisions(sf::Sprite& player,
std::vector<sf::Sprite>& enemies,
const sf::Texture& explosionTex)
{
for (auto& e : enemies)
if (player.getGlobalBounds().intersects(e.getGlobalBounds()))
e.setTexture(explosionTex);
}
void renderFrame(sf::RenderWindow& window,
sf::Sprite& player,
const std::vector<sf::Sprite>& enemies)
{
window.clear(sf::Color::Black);
window.draw(player);
for (auto& e : enemies)
window.draw(e);
window.display();
}
// --- clean update function ---------------------------------------------------
void updateGameWorld(sf::RenderWindow& window,
sf::Sprite& player,
std::vector<sf::Sprite>& enemies,
const sf::Texture& explosionTex,
float deltaTime)
{
handlePlayerInput(player);
updateEnemies(enemies, deltaTime);
detectCollisions(player, enemies, explosionTex);
renderFrame(window, player, enemies);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment