Advertisement
Guest User

reformatté

a guest
Dec 14th, 2012
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.27 KB | None | 0 0
  1. #include <SFML/Graphics.hpp>
  2. #include <iostream>
  3.  
  4. #define WND_WIDTH 1024
  5. #define WND_HEIGHT 768
  6. #define GRID_TILES 12
  7.  
  8. const sf::Texture BuildBackgroundGrid(const float size, const sf::Color& color1, const sf::Color& color2);
  9.  
  10. int main(int argc, char** argv)
  11. {              
  12.     sf::Clock clock;
  13.     sf::RenderWindow wnd(sf::VideoMode(WND_WIDTH, WND_HEIGHT), "Chicken Run!");
  14.    
  15.     // Initialise des variables qui seront utilisées dans la boucle
  16.     sf::Vector2u wndSize(0, 0); // Au départ on met 0,0 afin de provoquer la création de la texture
  17.     sf::Texture texBackgroundGrid;
  18.     sf::CircleShape circle;
  19.     sf::Rect<int> scoreArea;
  20.     sf::Rect<int> gameArea;
  21.     sf::Rect<int> gridArea;
  22.     sf::Sprite grid;
  23.  
  24.     float gridSide;
  25.     float mx = 0;
  26.     float my = 0;
  27.     float eq = 0;
  28.     int pixel = 90;
  29.    
  30.     while(wnd.isOpen())
  31.     {
  32.         sf::Time time = clock.getElapsedTime();
  33.         sf::Event evt;
  34.  
  35.         while(wnd.pollEvent(evt))
  36.         {
  37.             if(evt.type == sf::Event::Closed)
  38.                 wnd.close();
  39.         }
  40.        
  41.         wnd.clear(); // Efface la fenêtre
  42.  
  43.         // Si les dimensions de la fenêtre ont changés, alors on recalcule tout
  44.         sf::Vector2u wndCurrentSize = wnd.getSize();
  45.         if(wndCurrentSize != wndSize)
  46.         {
  47.             wndSize = wndCurrentSize;
  48.             scoreArea = sf::Rect<int>(0, 0, wndSize.x * 0.3, wndSize.y); // Rectangle du panneau des scores
  49.             gameArea = sf::Rect<int>(scoreArea.width, 0, wndSize.x - scoreArea.width, wndSize.y); // Rectangle de la fenêtre moins le panneau des scores
  50.             gridSide = std::min(gameArea.width, gameArea.height) * 0.8; // Côté de la grille = 80% du minimum entre la hauteur et la largeur dispo.
  51.             gridArea = sf::Rect<int>(gameArea.left + ((gameArea.width - gridSide) / 2), gameArea.top + ((gameArea.height - gridSide) / 2), gridSide, gridSide);
  52.             texBackgroundGrid = BuildBackgroundGrid(gridSide, sf::Color::Blue, sf::Color::White);
  53.             grid = sf::Sprite(texBackgroundGrid);
  54.             grid.setPosition(gridArea.left, gridArea.top);
  55.         }
  56.  
  57.         float tile = gridSide / GRID_TILES;
  58.        
  59.         wnd.draw(grid); // Affiche la grille a la bonne position
  60.  
  61.         // Dessine le pion
  62.         sf::CircleShape circle;
  63.         circle.setRadius(tile/2);
  64.         circle.setFillColor(sf::Color::Red);
  65.         my = (clock.getElapsedTime().asMilliseconds() * pixel) / 1000;
  66.            
  67.         if ( my > (gridArea.height - tile) ) { my = 0; clock.restart(); }
  68.         circle.setPosition(gridArea.left + mx, gridArea.top + my);
  69.         wnd.draw(circle); // Affiche le déplacement du Pion
  70.         wnd.display(); // Dessine la fenêtre
  71.     }
  72.     return 0;
  73. }
  74.  
  75. const sf::Texture BuildBackgroundGrid(const float size, const sf::Color& color1, const sf::Color& color2)
  76. {              
  77.     // Création d'une texture aux dimensions souhaités
  78.     sf::Texture text;
  79.     sf::RenderTexture t;
  80.     t.create(size, size);
  81.     t.clear(color1);
  82.     t.resetGLStates();
  83.  
  84.     // Création d'un rectangle pour dessiner les tuiles
  85.     float tileSide = size / GRID_TILES;
  86.     sf::RectangleShape tile(sf::Vector2f(tileSide, tileSide));
  87.     tile.setFillColor(color2);
  88.     tile.setOutlineColor(sf::Color::Black);
  89.     tile.setOutlineThickness(1);
  90.  
  91.     int count = 0;
  92.     for(int i = 0; i < GRID_TILES; i++)
  93.     {
  94.         for(int j = 0; j < GRID_TILES; j++)
  95.         {
  96.             if(count & 1)
  97.             {
  98.                 tile.setPosition(i * tileSide, j * tileSide);
  99.                 t.draw(tile);
  100.             }
  101.             count++;
  102.         }
  103.         count++;
  104.     }
  105.    
  106.     t.display();
  107.     text = sf::Texture(t.getTexture());
  108.     return text;
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement