Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML/Graphics.hpp>
- #include <iostream>
- const int NUM_ROOMS = 100;
- const int POS = 200;
- const int SIZE = 20;
- const int SPEED = 1; // original 1, causes invisible wall bug when more than 1, ex 5
- const int P_SIZE = 6;
- const int WINDOW_WIDTH = 800 + 160*2;
- const int WINDOW_HEIGHT = 450 + 90*2;
- class Room {
- public:
- sf::RectangleShape rectangle;
- void setup()
- {
- int rand_size_x = rand()%(SIZE+1) + 2*SIZE;
- int rand_size_y = rand()%(SIZE+1) + 1*SIZE;
- int rand_pos_x = rand()%(2*POS+1) - POS;
- int rand_pos_y = rand()%(2*POS+1) - POS;
- rectangle.setSize(sf::Vector2f(rand_size_x, rand_size_y));
- rectangle.setFillColor(sf::Color::White);
- rectangle.setPosition(int(WINDOW_WIDTH/2)+rand_pos_x, int(WINDOW_HEIGHT/2)+rand_pos_y);
- }
- };
- int main()
- {
- ///////////////
- /// SETUP ///
- ///////////////
- srand((unsigned)time(NULL));
- bool up = false, down = false, left = false, right = false;
- int last_x = 0;
- int last_y = 0;
- sf::RenderWindow Window;
- Window.create(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "random_rooms_02", sf::Style::Close);
- Window.setVerticalSyncEnabled(true);
- // Room Setup
- std::vector<Room> rooms;
- for (int i = 0; i < NUM_ROOMS; i++)
- {
- Room my_room;
- rooms.push_back(my_room);
- rooms[i].setup();
- }
- // Player Setup
- sf::RectangleShape player;
- player.setSize(sf::Vector2f(P_SIZE, P_SIZE));
- player.setFillColor(sf::Color::Red);
- player.setPosition(300, 200);
- while (Window.isOpen())
- {
- sf::Event event;
- while(Window.pollEvent(event))
- {
- switch(event.type)
- {
- case sf::Event::Closed:
- Window.close();
- break;
- case sf::Event::TextEntered:
- if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
- Window.close();
- break;
- case sf::Event::KeyPressed:
- if (event.key.code == sf::Keyboard::W)
- up = true;
- else if (event.key.code == sf::Keyboard::A)
- left = true;
- else if (event.key.code == sf::Keyboard::S)
- down = true;
- else if (event.key.code == sf::Keyboard::D)
- right = true;
- break;
- case sf::Event::KeyReleased:
- if (event.key.code == sf::Keyboard::W)
- up = false;
- else if (event.key.code == sf::Keyboard::A)
- left = false;
- else if (event.key.code == sf::Keyboard::S)
- down = false;
- else if (event.key.code == sf::Keyboard::D)
- right = false;
- break;
- }
- }
- //////////////////
- /// Movement ///
- //////////////////
- last_x = player.getPosition().x;
- last_y = player.getPosition().y;
- if (right == true && left == false) // D
- player.move(SPEED, 0);
- else if (right == false && left == true) // A
- player.move(-SPEED, 0);
- if (up == true && down == false) // W
- player.move(0, -SPEED);
- else if (up == false && down == true) // S
- player.move(0, SPEED);
- for (int i = 0; i < NUM_ROOMS; i++)
- {
- if (player.getGlobalBounds().intersects(rooms[i].rectangle.getGlobalBounds()))
- {
- player.setPosition(last_x, last_y);
- break;
- }
- }
- //Clearing and drawing:
- Window.clear();
- for (int i = 0; i < NUM_ROOMS; i++)
- Window.draw(rooms[i].rectangle);
- Window.draw(player);
- Window.display();
- } // Window.isOpen loop
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement