Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML/Graphics.hpp>
- #include <vector>
- #include <cstdlib>
- #include <ctime>
- class Game {
- public:
- Game();
- void run();
- private:
- void processEvents();
- void handleUserInput(sf::Keyboard::Key key, bool isPressed);
- void update(sf::Time deltaTime);
- void render();
- private:
- static const sf::Time TimePerFrame;
- static const float PlayerSpeed;
- sf::RenderWindow mWindow;
- sf::View mView;
- std::vector<sf::RectangleShape> mRectangles;
- sf::RectangleShape mPlayer;
- bool mIsMovingUp;
- bool mIsMovingDown;
- bool mIsMovingLeft;
- bool mIsMovingRight;
- };
- const sf::Time Game::TimePerFrame = sf::seconds(1.f/60.f);
- const float Game::PlayerSpeed = 150.f;
- Game::Game()
- : mWindow(sf::VideoMode(800, 600), "Test")
- , mIsMovingUp(false)
- , mIsMovingDown(false)
- , mIsMovingLeft(false)
- , mIsMovingRight(false)
- {
- mView = mWindow.getView();
- mPlayer.setPosition(100.f, 100.f);
- mPlayer.setSize(sf::Vector2f(10.f, 10.f));
- mPlayer.setFillColor(sf::Color::Green);
- //create some shapes just for viewing
- float pos_x;
- float pos_y = 20.f;
- for (int i = 0; i < 20; i++)
- {
- pos_x = rand()%800;
- pos_y = rand()%600;
- sf::RectangleShape rect;
- rect.setPosition(pos_x, pos_y);
- rect.setSize(sf::Vector2f(20.f, 20.f));
- mRectangles.push_back(rect);
- }
- }
- void Game::run()
- {
- mWindow.setVerticalSyncEnabled(true); //can be changed later to take from config file
- sf::Clock clock;
- sf::Time timeSinceLastUpdate = sf::Time::Zero;
- while (mWindow.isOpen())
- {
- sf::Time elapsedTime = clock.restart();
- timeSinceLastUpdate += elapsedTime;
- while (timeSinceLastUpdate > TimePerFrame)
- {
- timeSinceLastUpdate -= TimePerFrame;
- processEvents();
- update(TimePerFrame);
- }
- render();
- }
- }
- void Game::handleUserInput(sf::Keyboard::Key key, bool isPressed)
- {
- if (key == sf::Keyboard::W)
- mIsMovingUp = isPressed;
- else if (key == sf::Keyboard::S)
- mIsMovingDown = isPressed;
- else if (key == sf::Keyboard::A)
- mIsMovingLeft = isPressed;
- else if (key == sf::Keyboard::D)
- mIsMovingRight = isPressed;
- }
- void Game::processEvents()
- {
- sf::Event event;
- while (mWindow.pollEvent(event))
- {
- switch(event.type)
- {
- case sf::Event::KeyPressed:
- handleUserInput(event.key.code, true);
- break;
- case sf::Event::KeyReleased:
- handleUserInput(event.key.code, false);
- break;
- case sf::Event::Closed:
- mWindow.close();
- break;
- }
- }
- }
- void Game::update(sf::Time deltaTime)
- {
- sf::Vector2f movement(0.f, 0.f);
- if (mIsMovingUp)
- movement.y -= PlayerSpeed;
- if (mIsMovingDown)
- movement.y += PlayerSpeed;
- if (mIsMovingLeft)
- movement.x -= PlayerSpeed;
- if (mIsMovingRight)
- movement.x += PlayerSpeed;
- mPlayer.move(movement*deltaTime.asSeconds());
- }
- void Game::render()
- {
- mWindow.clear();
- mView.setCenter(mPlayer.getPosition());
- mWindow.setView(mView);
- mWindow.draw(mPlayer);
- for (int i = 0; i < mRectangles.size(); i++)
- mWindow.draw(mRectangles[i]);
- mWindow.display();
- }
- int main()
- {
- srand(time(NULL));
- Game game;
- game.run();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement