Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML/Graphics.hpp>
- #include <iostream>
- #define WND_WIDTH 1024
- #define WND_HEIGHT 768
- #define GRID_TILES 12
- const sf::Texture BuildBackgroundGrid(const float size, const sf::Color& color1, const sf::Color& color2);
- int main(int argc, char** argv)
- {
- sf::Clock clock;
- sf::RenderWindow wnd(sf::VideoMode(WND_WIDTH, WND_HEIGHT), "Chicken Run!");
- // Initialise des variables qui seront utilisées dans la boucle
- sf::Vector2u wndSize(0, 0); // Au départ on met 0,0 afin de provoquer la création de la texture
- sf::Texture texBackgroundGrid;
- sf::CircleShape circle;
- sf::Rect<int> scoreArea;
- sf::Rect<int> gameArea;
- sf::Rect<int> gridArea;
- sf::Sprite grid;
- float gridSide;
- float mx = 0;
- float my = 0;
- float eq = 0;
- int pixel = 90;
- while(wnd.isOpen())
- {
- sf::Time time = clock.getElapsedTime();
- sf::Event evt;
- while(wnd.pollEvent(evt))
- {
- if(evt.type == sf::Event::Closed)
- wnd.close();
- }
- wnd.clear(); // Efface la fenêtre
- // Si les dimensions de la fenêtre ont changés, alors on recalcule tout
- sf::Vector2u wndCurrentSize = wnd.getSize();
- if(wndCurrentSize != wndSize)
- {
- wndSize = wndCurrentSize;
- scoreArea = sf::Rect<int>(0, 0, wndSize.x * 0.3, wndSize.y); // Rectangle du panneau des scores
- gameArea = sf::Rect<int>(scoreArea.width, 0, wndSize.x - scoreArea.width, wndSize.y); // Rectangle de la fenêtre moins le panneau des scores
- gridSide = std::min(gameArea.width, gameArea.height) * 0.8; // Côté de la grille = 80% du minimum entre la hauteur et la largeur dispo.
- gridArea = sf::Rect<int>(gameArea.left + ((gameArea.width - gridSide) / 2), gameArea.top + ((gameArea.height - gridSide) / 2), gridSide, gridSide);
- texBackgroundGrid = BuildBackgroundGrid(gridSide, sf::Color::Blue, sf::Color::White);
- grid = sf::Sprite(texBackgroundGrid);
- grid.setPosition(gridArea.left, gridArea.top);
- }
- float tile = gridSide / GRID_TILES;
- wnd.draw(grid); // Affiche la grille a la bonne position
- // Dessine le pion
- sf::CircleShape circle;
- circle.setRadius(tile/2);
- circle.setFillColor(sf::Color::Red);
- my = (clock.getElapsedTime().asMilliseconds() * pixel) / 1000;
- if ( my > (gridArea.height - tile) ) { my = 0; clock.restart(); }
- circle.setPosition(gridArea.left + mx, gridArea.top + my);
- wnd.draw(circle); // Affiche le déplacement du Pion
- wnd.display(); // Dessine la fenêtre
- }
- return 0;
- }
- const sf::Texture BuildBackgroundGrid(const float size, const sf::Color& color1, const sf::Color& color2)
- {
- // Création d'une texture aux dimensions souhaités
- sf::Texture text;
- sf::RenderTexture t;
- t.create(size, size);
- t.clear(color1);
- t.resetGLStates();
- // Création d'un rectangle pour dessiner les tuiles
- float tileSide = size / GRID_TILES;
- sf::RectangleShape tile(sf::Vector2f(tileSide, tileSide));
- tile.setFillColor(color2);
- tile.setOutlineColor(sf::Color::Black);
- tile.setOutlineThickness(1);
- int count = 0;
- for(int i = 0; i < GRID_TILES; i++)
- {
- for(int j = 0; j < GRID_TILES; j++)
- {
- if(count & 1)
- {
- tile.setPosition(i * tileSide, j * tileSide);
- t.draw(tile);
- }
- count++;
- }
- count++;
- }
- t.display();
- text = sf::Texture(t.getTexture());
- return text;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement