Advertisement
Guest User

primitive pseudo-3d

a guest
Jan 12th, 2022
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.80 KB | None | 0 0
  1. #include <SFML/Graphics.hpp>
  2.  
  3. sf::Color gray = sf::Color(211, 211, 211);
  4.  
  5. struct Road {
  6.     int height; //number of elements
  7.     int *segments; //holds width of each element
  8.     int playerx;
  9. };
  10.  
  11. void gen_road(struct Road* road) {
  12.     int base_width = 100; //width of the bottom element
  13.     for (int y = 1;y <= road->height;y++) {
  14.         int z = base_width - y*4; //decreases width by 4 each time
  15.         road->segments[y - 1] = z;
  16.     }
  17. }
  18.  
  19. void draw_road(sf::RenderWindow *window, struct Road* road) {
  20.     int i = 0;
  21.     for (int v = road->height-1;v > 0;v--) { //draws each rectangle from furthest to closest
  22.         int s = road->segments[v];
  23.         sf::RectangleShape rs(sf::Vector2f(s, 30)); //makes a rectangle of width s and height 30
  24.         rs.setFillColor(gray);
  25.         rs.setOutlineThickness(1);
  26.         rs.setOutlineColor(sf::Color(250, 150, 100));
  27.         int x = ( (384 - s) / 2 ) + (road->playerx / (road->segments[i]/2)); //sets position of rectangle relative to x position and to position in segments array
  28.         rs.setPosition( x ,i*10); //where i is the index of the rectangle in the segments array
  29.         window->draw(rs); //displays the rectangle
  30.         i++;
  31.     }
  32. }
  33.  
  34. int main() {
  35.     sf::RenderWindow window(sf::VideoMode(384, 216), "SFML Works");
  36.     struct Road road;
  37.     road.height = 20;
  38.     road.playerx = 384;
  39.     road.segments = (int*)malloc(road.height * sizeof(int));
  40.     gen_road(&road);
  41.     while (window.isOpen())
  42.     {
  43.         sf::Event event;
  44.         while (window.pollEvent(event)) {
  45.             if (event.type == sf::Event::Closed) {
  46.                 window.close();
  47.             }
  48.             if (event.type == sf::Event::KeyPressed)
  49.             {
  50.                 if (event.key.code == sf::Keyboard::D)
  51.                 {
  52.                     road.playerx += 40;
  53.                 }
  54.                 else if (event.key.code == sf::Keyboard::A)
  55.                 {
  56.                     road.playerx -= 40;
  57.                 }
  58.             }
  59.         }
  60.         window.clear(sf::Color::Black);
  61.         draw_road(&window, &road);
  62.         window.display();
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement