Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML/Graphics.hpp>
- sf::Color gray = sf::Color(211, 211, 211);
- struct Segment {
- int y;
- int x;
- int z;
- int width;
- };
- struct Road {
- int height; //number of elements
- struct Segment *segments; //array of segments
- float playerx;
- int width;
- };
- void gen_road(struct Road* road) {
- int v = road->height;
- for (int i = 1;i <= road->height;i++) {
- road->segments[i - 1].width = road->width;
- road->segments[i - 1].z = i;
- road->segments[i - 1].y = 100;
- road->segments[i - 1].x = 0;
- v--;
- }
- }
- void draw_road(sf::RenderWindow *window, struct Road* road) {
- int i = 0;
- for (int v = road->height-1;v > 0;v--) { //draws each rectangle from furthest to closest
- int s = road->segments[v].width - v*2;
- sf::RectangleShape rs(sf::Vector2f(s, 20)); //makes a rectangle of width s and height 20
- rs.setFillColor(gray);
- rs.setOutlineThickness(1);
- rs.setOutlineColor(sf::Color(250, 150, 100));
- int xoffset = ( (road->segments[v].x + 192) - s / 2) - (road->playerx * s); //displayed x position of rectangle (based on z and x axis)
- int yoffset = road->segments[v].y - road->segments[v].z; //displayed y position of rectangle (based on z and y axis)
- rs.setPosition( xoffset , yoffset);
- window->draw(rs); //displays the rectangle
- i++;
- }
- }
- int main() {
- sf::RenderWindow window(sf::VideoMode(384, 216), "KraD");
- struct Road road;
- road.height = 20;
- road.playerx = 0;
- road.width = 100;
- road.segments = (struct Segment*)malloc(road.height * sizeof(struct Segment));
- gen_road(&road);
- while (window.isOpen())
- {
- sf::Event event;
- while (window.pollEvent(event)) {
- if (event.type == sf::Event::Closed) {
- window.close();
- }
- if (event.type == sf::Event::KeyPressed)
- {
- if (event.key.code == sf::Keyboard::D)
- {
- road.playerx -= 0.1;
- }
- else if (event.key.code == sf::Keyboard::A)
- {
- road.playerx += 0.1;
- }
- else if (event.key.code == sf::Keyboard::W)
- {
- for (int i = 0;i < road.height;i++) {
- road.segments[i].x -= 10;
- }
- }
- else if (event.key.code == sf::Keyboard::S)
- {
- for (int i = 0;i < road.height;i++) {
- road.segments[i].x += 10;
- }
- }
- }
- }
- window.clear(sf::Color::Black);
- draw_road(&window, &road);
- window.display();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement