- #include <SFML/Graphics.hpp>
- #include <SFML/Window.hpp>
- #include <iostream>
- using namespace std;
- using namespace sf;
- int main()
- {
- const int width = 800;
- const int height= 600;
- //Window rendering
- sf::Vector2f screenDimensions(800, 600);
- sf::RenderWindow window(sf::VideoMode(screenDimensions.x, screenDimensions.y), "SFML game");
- window.setFramerateLimit(60);
- sf::Clock frametime;
- //in-game screen 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);
- sf::Texture texture;
- if (!texture.loadFromFile("PlayerShip.png"))
- {
- // error...
- }
- Texture texture2;
- if (!texture.loadFromFile("PlayerShip2.png"))
- {
- // error...
- }
- Texture bgtexture;
- sf::Sprite bgsprite;
- if(!bgtexture.loadFromFile("BG.png"))
- {
- //error
- }
- bgsprite.setTexture(bgtexture);
- bgsprite.setScale(9.0f, (float)screenDimensions.y / bgtexture.getSize().y);
- Sprite shape;
- shape.setTexture(texture);
- shape.setTextureRect(sf::IntRect(0, 0, 100, 83));
- shape.setPosition(400.f,40.f);
- RectangleShape projectile(sf::Vector2f(40., 40.f));
- projectile.setFillColor(sf::Color::Black);
- Font font;
- if (!font.loadFromFile("HelveticaNeue-UltraLight.otf"))
- return EXIT_FAILURE;
- Text title("Shooter",font,50);
- title.setPosition(width/2-title.getGlobalBounds().width/2,100);
- title.setColor(Color::Blue);
- Text start("Play",font,30);
- start.setPosition(width/2-start.getGlobalBounds().width/2,200);
- start.setColor(Color::Green);
- Text start1("Options",font,30);
- start1.setPosition(width/2-start.getGlobalBounds().width/2,300);
- start1.setColor(Color::Red);
- Text start2("Quit",font,30);
- start2.setPosition(width/2-start.getGlobalBounds().width/2,400);
- start2.setColor(Color::Black);
- sf::Vector2f speed (3.f, 3.f);
- bool holding = true;
- int GameState;
- enum states {INTRO, PLAYING, LOST};
- GameState = {INTRO};
- while (window.isOpen())
- {
- window.clear(Color::White);
- switch(GameState)
- {
- case INTRO:
- window.draw(title);
- window.draw(start);
- window.draw(start1);
- window.draw(start2);
- break;
- case PLAYING:
- window.setView(view);
- window.draw(shape);
- break;
- }
- window.display();
- 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 == INTRO))
- GameState=PLAYING;
- }
- if (GameState!=PLAYING)
- continue;
- float dt = frametime.restart().asSeconds();
- if(speed.x > 6.f)
- speed.x -= 1.f;
- else if(speed.x < -6.f)
- speed.x += 1.f;
- else
- speed.x = 0.f;
- // Adjust vertical speed
- if(speed.y > 6.f)
- speed.y -= 1.f;
- shape.setPosition(shape.getPosition().x + speed.x * dt, shape.getPosition().y + speed.y * dt);
- if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
- speed.y = 300;
- else if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
- speed.x = -290;
- else if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
- speed.x = 290;
- else if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
- speed.y = -300;
- if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
- shape.rotate( 200 * dt);
- if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
- shape.rotate(- 200 * dt);
- if(sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
- window.draw(projectile);
- position.x = shape.getPosition().x + 10 - (screenDimensions.x / 2);
- position.y = shape.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));
- }
- return 0;
- }