#include #include #include using namespace sf; int main() { const int width = 640; const int height= 480; // Create window sf::Vector2f screenDimensions(800, 600); sf::RenderWindow window; window.create (sf::VideoMode(screenDimensions.x, screenDimensions.y), "SFML game"); // Limit frame-rate window.setFramerateLimit(60); // Keep track of the frametime sf::Clock frametime; Font font; if (!font.loadFromFile("HelveticaNeue-UltraLight.otf")) return EXIT_FAILURE; // Big floor sf::RectangleShape floor(sf::Vector2f(1000.f, 50.f)); floor.setPosition(0.f, 400.f); floor.setFillColor(sf::Color(10, 180, 30)); //Big floor 2 sf::RectangleShape floor2(sf::Vector2f(500.f, 50.f)); floor2.setPosition(1000.f, 700.f); floor2.setFillColor(sf::Color(10, 200, 30)); //Big Floor 3 sf::RectangleShape floor3(sf::Vector2f(500.f, 50.f)); floor3.setPosition(1000.f, 900.f); floor3.setFillColor(sf::Color(10, 200, 30)); //platform1 sf::RectangleShape platform(sf::Vector2f(90.f, 50.f)); platform.setPosition(1140.f, 700.f); platform.setFillColor(sf::Color::Red); //platform2 sf::RectangleShape platform2(sf::Vector2f(200.f, 50.f)); platform2.setPosition(1600.f, 700.f); platform2.setFillColor(sf::Color::Yellow); //platform3 sf::RectangleShape platform3(sf::Vector2f(200.f, 50.f)); platform3.setPosition(1800.f, 700.f); platform3.setFillColor(sf::Color::Yellow); //platform4 sf::RectangleShape floor4(sf::Vector2f(1000.f, 50.f)); floor4.setPosition(0.f, 400.f); floor4.setFillColor(sf::Color(10, 180, 30)); //platform5 sf::RectangleShape floor5(sf::Vector2f(200.f, 50.f)); floor5.setPosition(2200.f, 700.f); floor5.setFillColor(sf::Color::Green); //Circle sf::CircleShape shape(50); shape.setFillColor(sf::Color(100, 250, 50)); // Movable player sf::RectangleShape player(sf::Vector2f(40.f, 40.f)); player.setOrigin(20.f, 20.f); player.setPosition(400.f, 40.f); player.setFillColor(sf::Color(10, 30, 180)); // Player for level 2 sf::RectangleShape player1(sf::Vector2f(40.f, 40.f)); player1.setOrigin(20.f, 20.f); player1.setPosition(400.f, 40.f); player1.setFillColor(sf::Color(10, 30, 180)); // Player speed sf::Vector2f speed(3.f, 3.f); // Platform speed sf::Vector2f platspeed(3.f, 3.f); // Gravity value const float gravity = 980.f; // Check if we're touching any floor/box bool touching = false; //view sf::View view; view.reset(sf::FloatRect(0, 0, screenDimensions.x, screenDimensions.y)); view.setViewport(sf::FloatRect(0, 0, 1.0f, 1.0f)); sf::Vector2f position(screenDimensions.x / 2, screenDimensions.y / 2); //view1 sf::View view1; view1.reset(sf::FloatRect(0, 0, screenDimensions.x, screenDimensions.y)); view1.setViewport(sf::FloatRect(0, 0, 1.0f, 1.0f)); //Intro Text title("TEST PLATFORMER",font,50); title.setPosition(width/2-title.getGlobalBounds().width/2,100); title.setColor(Color::Blue); Text start("PRESS ENTER TO CONTIUE",font,30); start.setPosition(width/2-start.getGlobalBounds().width/2,400); start.setColor(Color::Red); //Welcome to level 2 Text LEVEL2("WELCOME TO LEVEL 2",font,50); LEVEL2.setPosition(width/2-title.getGlobalBounds().width/2,100); LEVEL2.setColor(Color::Blue); //Level state enum state {STARTSCREEN, Level1, Level2}; int GameState=STARTSCREEN; while(window.isOpen()) { window.clear(); switch(GameState) { case STARTSCREEN: window.draw(title); window.draw(start); break; case Level1: window.setView(view); window.draw(player); window.draw(floor); window.draw(floor2); window.draw(floor3); window.draw(platform); window.draw(platform2); window.draw(platform3); break; case Level2: window.setView(view1); window.draw(player); window.draw(floor4); window.draw(floor5); window.draw(LEVEL2); break; } window.display(); // Get delta time for frame-rate depended movement float dt = frametime.restart().asSeconds(); // Event handling sf::Event event; while(window.pollEvent(event)) { if ( (event.type == Event::Closed) || ((event.type == Event::KeyPressed) && (event.key.code==Keyboard::Escape)) ) window.close(); else if ((event.type == Event::KeyPressed) && (GameState == STARTSCREEN)) GameState=Level1; } if (GameState!=Level1) continue; // Slow down horizontal speed if(speed.x > 6.f) speed.x -= 3.f; else if(speed.x < -6.f) speed.x += 3.f; else speed.x = 0.f; // Adjust vertical speed if(touching) speed.y = gravity; else if(speed.y < gravity) speed.y += 10.f; else if(speed.y > gravity) speed.y = gravity; // Horizontal movement if(sf::Keyboard::isKeyPressed(sf::Keyboard::A) && sf::Keyboard::isKeyPressed(sf::Keyboard::D)) speed.x = 0.f; else if(sf::Keyboard::isKeyPressed(sf::Keyboard::A)) speed.x = -120.f; else if(sf::Keyboard::isKeyPressed(sf::Keyboard::D)) speed.x = 120.f; else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Return)) GameState!=Level1; // Jumping if(sf::Keyboard::isKeyPressed(sf::Keyboard::W) && touching) speed.y = -300.f; // Move the player player.setPosition(player.getPosition().x + speed.x * dt, player.getPosition().y + speed.y * dt); //Moving the last platform // Check collision & position adjustment if(floor.getGlobalBounds().intersects(player.getGlobalBounds())) // Floor { player.setPosition(player.getPosition().x, floor.getPosition().y-player.getOrigin().y); touching = true; } else if(floor2.getGlobalBounds().intersects(player.getGlobalBounds())) { player.setPosition(player.getPosition().x, floor2.getPosition().y-player.getOrigin().y); touching = true; } else if(platform.getGlobalBounds().intersects(player.getGlobalBounds())) { player.setFillColor(sf::Color::Red); player.setPosition(player.getPosition().x, platform.getPosition().y-player.getOrigin().y); touching = true; } else if (platform2.getGlobalBounds().intersects(player.getGlobalBounds())) { player.setPosition(player.getPosition().x, platform2.getPosition().y-player.getOrigin().y); touching = true; } else if (platform3.getGlobalBounds().intersects(player.getGlobalBounds())) { player.setPosition(player.getPosition().x, platform3.getPosition().y-player.getOrigin().y); touching = true; } else if (floor4.getGlobalBounds().intersects(player.getGlobalBounds())) { player.setPosition(player.getPosition().x, floor4.getPosition().y-player.getOrigin().y); touching = true; } else if (floor5.getGlobalBounds().intersects(player.getGlobalBounds())) { player.setPosition(player.getPosition().x, floor5.getPosition().y-player.getOrigin().y); touching = true; } else if (floor3.getGlobalBounds().intersects(player.getGlobalBounds())) { player.setPosition(player.getPosition().x, floor3.getPosition().y-player.getOrigin().y); touching = true; GameState=Level2; } else if (floor4.getGlobalBounds().intersects(player.getGlobalBounds())) { player.setPosition(player.getPosition().x, floor4.getPosition().y-player.getOrigin().y); touching = true; } else // We're not colliding touching = false; position.x = player.getPosition().x + 10 - (screenDimensions.x / 2); position.y = player.getPosition().y + 10 - (screenDimensions.y / 2); if(position.x < 0) position.x = 0; if(position.y < 0) position.y = 0; view.reset(sf::FloatRect(position.x, position.y, screenDimensions.x, screenDimensions.y)); } }