Facebook
From bartek, 1 Week ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 32
  1. #include <SFML/Graphics.hpp>
  2. #include <SFML/Audio.hpp>
  3. using namespace sf;
  4.  
  5. const int num=8; //checkpoints
  6. int points[num][2] = {300, 610,
  7.                       1270,430,
  8.                       1380,2380,
  9.                       1900,2460,
  10.                       1970,1700,
  11.                       2550,1680,
  12.                       2560,3150,
  13.                       500, 3300};
  14.  
  15. class Car
  16. {
  17. float speed=2;
  18.    float angle=0;
  19.    int n=0;
  20.  
  21.   //Car() {speed=2; angle=0; n=0;}
  22. friend  void move();
  23. friend  void findTarget();
  24. friend int main();
  25.   public:
  26.  
  27. float x,y;
  28.  
  29.   void move();
  30.    void findTarget();
  31.  
  32. };
  33.  
  34.  
  35.  
  36.  
  37.   void Car::move()
  38.    {
  39.     x += sin(angle) * speed;
  40.     y -= cos(angle) * speed;
  41.    }
  42.  
  43.   void Car::findTarget()
  44.   {
  45.     float tx=points[n][0];
  46.     float ty=points[n][1];
  47.     float beta = angle-atan2(tx-x,-ty+y);
  48.     if (sin(beta)<0) angle+=0.005*speed; else angle-=0.005*speed;
  49.     if ((x-tx)*(x-tx)+(y-ty)*(y-ty)<25*25) n=(n+1)%num;
  50.    }
  51.  
  52.  
  53.  
  54. int main()
  55. {
  56.  
  57.  
  58.     RenderWindow app(VideoMode(1280,720), "Car Racing Game!");
  59.         app.setFramerateLimit(60);
  60.  
  61.  
  62.     Texture t1,t2,t3;
  63.     t1.loadFromFile("images/plansza.png");
  64.     t2.loadFromFile("images/auto.png");
  65.     t1.setSmooth(true);
  66.     t2.setSmooth(true);
  67.  
  68.     Sprite sBackground(t1), sCar(t2);
  69.     sBackground.scale(2,2);
  70.  
  71.     sCar.setOrigin(22, 22);
  72.     float R=22;
  73.  
  74.     const int N=5;
  75.     Car car[N];
  76.     for(int i=0;i<N;i++)
  77.     {
  78.       car[i].x=300+i*50;
  79.       car[i].y=1700+i*80;
  80.       car[i].speed=7+i;
  81.     }
  82.  
  83.    float speed=0,angle=0;
  84.    float maxSpeed=12.0;
  85.    float acc=0.2, dec=0.3;
  86.    float turnSpeed=0.08;
  87.  
  88.    int offsetX=0,offsetY=0;
  89.  
  90.     while (app.isOpen())
  91.     {
  92.         Event e;
  93.         while (app.pollEvent(e))
  94.         {
  95.             if (e.type == Event::Closed)
  96.                 app.close();
  97.         }
  98.  
  99.     bool Up=0,Right=0,Down=0,Left=0;
  100.     if (Keyboard::isKeyPressed(Keyboard::Up)) Up=1;
  101.     if (Keyboard::isKeyPressed(Keyboard::Right)) Right=1;
  102.     if (Keyboard::isKeyPressed(Keyboard::Down)) Down=1;
  103.     if (Keyboard::isKeyPressed(Keyboard::Left)) Left=1;
  104.  
  105.     //car movement
  106.     if (Up && speed<maxSpeed)
  107.         if (speed < 0)  speed += dec;
  108.         else  speed += acc;
  109.  
  110.     if (Down && speed>-maxSpeed)
  111.         if (speed > 0) speed -= dec;
  112.         else  speed -= acc;
  113.  
  114.     if (!Up && !Down)
  115.         if (speed - dec > 0) speed -= dec;
  116.         else if (speed + dec < 0) speed += dec;
  117.         else speed = 0;
  118.  
  119.     if (Right && speed!=0)  angle += turnSpeed * speed/maxSpeed;
  120.     if (Left && speed!=0)   angle -= turnSpeed * speed/maxSpeed;
  121.  
  122.     car[0].speed = speed;
  123.     car[0].angle = angle;
  124.  
  125.         for(int i=0;i<N;i++) car[i].move();
  126.         for(int i=1;i<N;i++) car[i].findTarget();
  127.  
  128.     //collision
  129.     for(int i=0;i<N;i++)
  130.     for(int j=0;j<N;j++)
  131.     {
  132.                 int dx=0, dy=0;
  133.         while (dx*dx+dy*dy<4*R*R)
  134.          {
  135.            car[i].x+=dx/10.0;
  136.            car[i].x+=dy/10.0;
  137.            car[j].x-=dx/10.0;
  138.            car[j].y-=dy/10.0;
  139.                    dx = car[i].x-car[j].x;
  140.            dy = car[i].y-car[j].y;
  141.                    if (!dx && !dy) break;
  142.          }
  143.     }
  144.  
  145.  
  146.     app.clear(Color::White);
  147.  
  148.     if (car[0].x>640) offsetX = car[0].x-640;
  149.     if (car[0].y>360) offsetY = car[0].y-360;
  150.  
  151.  
  152.     sBackground.setPosition(-offsetX,-offsetY);
  153.     app.draw(sBackground);
  154.  
  155.     Color colors[10] = {Color::Red, Color::Green, Color::Magenta, Color::Blue, Color::White};
  156.  
  157.     for(int i=0;i<N;i++)
  158.     {
  159.       sCar.setPosition(car[i].x-offsetX,car[i].y-offsetY);
  160.       sCar.setRotation(car[i].angle*180/3.141593);
  161.       sCar.setColor(colors[i]);
  162.       app.draw(sCar);
  163.     }
  164.  
  165.     app.display();
  166.     }
  167.  
  168.  
  169.     return 0;
  170. }
  171.