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