Advertisement
Guest User

SFML_random_room_movement

a guest
Dec 27th, 2013
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.96 KB | None | 0 0
  1. #include <SFML/Graphics.hpp>
  2. #include <iostream>
  3.  
  4. const int NUM_ROOMS = 100;
  5. const int POS = 200;
  6. const int SIZE = 20;
  7. const int SPEED = 1; // original 1, causes invisible wall bug when more than 1, ex 5
  8. const int P_SIZE = 6;
  9. const int WINDOW_WIDTH  = 800 + 160*2;
  10. const int WINDOW_HEIGHT = 450 +  90*2;
  11.  
  12. class Room {
  13.     public:
  14.         sf::RectangleShape rectangle;
  15.  
  16.         void setup()
  17.         {
  18.             int rand_size_x = rand()%(SIZE+1) + 2*SIZE;
  19.             int rand_size_y = rand()%(SIZE+1) + 1*SIZE;
  20.             int rand_pos_x  = rand()%(2*POS+1) - POS;
  21.             int rand_pos_y  = rand()%(2*POS+1) - POS;
  22.  
  23.             rectangle.setSize(sf::Vector2f(rand_size_x, rand_size_y));
  24.             rectangle.setFillColor(sf::Color::White);
  25.             rectangle.setPosition(int(WINDOW_WIDTH/2)+rand_pos_x, int(WINDOW_HEIGHT/2)+rand_pos_y);
  26.         }
  27. };
  28.  
  29. int main()
  30. {
  31.     ///////////////
  32.     ///  SETUP  ///
  33.     ///////////////
  34.     srand((unsigned)time(NULL));
  35.     bool up = false, down = false, left = false, right = false;
  36.     int last_x = 0;
  37.     int last_y = 0;
  38.  
  39.     sf::RenderWindow Window;
  40.     Window.create(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "random_rooms_02", sf::Style::Close);
  41.     Window.setVerticalSyncEnabled(true);
  42.  
  43.  
  44.     // Room Setup
  45.     std::vector<Room> rooms;
  46.     for (int i = 0; i < NUM_ROOMS; i++)
  47.     {
  48.         Room my_room;
  49.         rooms.push_back(my_room);
  50.         rooms[i].setup();
  51.     }
  52.    
  53.     // Player Setup
  54.     sf::RectangleShape player;
  55.     player.setSize(sf::Vector2f(P_SIZE, P_SIZE));
  56.     player.setFillColor(sf::Color::Red);
  57.     player.setPosition(300, 200);
  58.  
  59.  
  60.     while (Window.isOpen())
  61.     {
  62.         sf::Event event;
  63.         while(Window.pollEvent(event))
  64.         {
  65.             switch(event.type)
  66.             {
  67.             case sf::Event::Closed:
  68.                 Window.close();
  69.                 break;
  70.  
  71.             case sf::Event::TextEntered:
  72.                 if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
  73.                     Window.close();
  74.                 break;
  75.             case sf::Event::KeyPressed:
  76.                 if      (event.key.code == sf::Keyboard::W)
  77.                     up    = true;
  78.                 else if (event.key.code == sf::Keyboard::A)
  79.                     left  = true;
  80.                 else if (event.key.code == sf::Keyboard::S)
  81.                     down  = true;
  82.                 else if (event.key.code == sf::Keyboard::D)
  83.                     right = true;
  84.                 break;
  85.  
  86.             case sf::Event::KeyReleased:
  87.                 if      (event.key.code == sf::Keyboard::W)
  88.                     up = false;
  89.                 else if (event.key.code == sf::Keyboard::A)
  90.                     left = false;
  91.                 else if (event.key.code == sf::Keyboard::S)
  92.                     down = false;
  93.                 else if (event.key.code == sf::Keyboard::D)
  94.                     right = false;
  95.                 break;
  96.             }
  97.         }
  98.  
  99.         //////////////////
  100.         ///  Movement  ///
  101.         //////////////////
  102.         last_x = player.getPosition().x;
  103.         last_y = player.getPosition().y;
  104.  
  105.         if (right == true && left == false) // D
  106.             player.move(SPEED, 0);
  107.         else if (right == false && left == true) // A
  108.             player.move(-SPEED, 0);
  109.         if (up == true && down == false) // W
  110.             player.move(0, -SPEED);
  111.         else if (up == false && down == true) // S
  112.             player.move(0, SPEED);
  113.  
  114.         for (int i = 0; i < NUM_ROOMS; i++)
  115.         {
  116.             if (player.getGlobalBounds().intersects(rooms[i].rectangle.getGlobalBounds()))
  117.             {
  118.                 player.setPosition(last_x, last_y);
  119.                 break;
  120.             }
  121.         }
  122.  
  123.         //Clearing and drawing:
  124.         Window.clear();
  125.         for (int i = 0; i < NUM_ROOMS; i++)
  126.             Window.draw(rooms[i].rectangle);
  127.         Window.draw(player);
  128.         Window.display();
  129.  
  130.     } // Window.isOpen loop
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement