Advertisement
alabastor95

gyak2_hazi_2018.02.26.

Feb 25th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.00 KB | None | 0 0
  1. #include "graphics.hpp"
  2. #include "iostream"
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <time.h>
  6. #include <vector>
  7. #include <cmath>
  8.  
  9. using namespace genv;
  10. using namespace std;
  11.  
  12. #define x_max 1000 //max x koordinata
  13. #define y_max 1000 //max y koordinata
  14. #define gyorsasag 2 // minel alacsonyabb, annál gyorsabban kozlekednek a negyzetek
  15.  
  16. struct Negyzet
  17. {
  18.     int x,y;
  19.     int r,g,b;
  20.     int a_oldal;
  21.     int eg_kord_x, eg_kord_y;
  22.  
  23.     float tav2D(int x0, int y0, int x1, int y1) //2D tavolsag
  24.     {
  25.         return(pow(pow(x0-x1,2)+pow(y0-y1,2),0.5));
  26.     }
  27.  
  28.     float szog(int x0, int y0, int x1, int y1) //a vizszintessel bezart szog
  29.     {
  30.         float a = tav2D(x0,y0,x1,y1);
  31.         float b = tav2D(x0,y0,0,y0);
  32.         float c = tav2D(x1, y1, 0, y0);
  33.  
  34.  
  35.         return(acos((pow(a,2)+pow(b,2)-pow(c,2))/(2*a*b)));
  36.     }
  37.  
  38. public:
  39.     Negyzet()
  40.     {
  41.         x = rand() % (x_max+1);  //veletlenszeru x, y koordinatak
  42.         y = rand() % (y_max+1);
  43.         a_oldal = (rand() % 11) +5; //5-15 meretu veletleszeru negyzetek
  44.         r = rand() % 256;
  45.         g = rand() % 256;
  46.         b = rand() % 256;
  47.         eg_kord_x = 0; eg_kord_y = 0;
  48.     }
  49.  
  50.     void kiir()
  51.     {
  52.         cout << "X: " << x << ", Y: " << y << endl;
  53.         //cout << "R: " << r << ", G: " <<g << ", B: " << b << endl;
  54.     }
  55.  
  56.  
  57.  
  58.     void rajzol ()
  59.     {
  60.  
  61.         gout << color (r,g,b) << move_to(x,y);
  62.         if(a_oldal + x > x_max)
  63.         {
  64.             gout << box(x_max-x, a_oldal);
  65.         }
  66.         if(a_oldal + y > y_max)
  67.         {
  68.             gout << box(y_max-y, a_oldal);
  69.         }
  70.         else if(a_oldal + x > x_max && a_oldal + y > y_max)
  71.         {
  72.             gout << box (x_max-x, y_max-y);
  73.         }
  74.         else
  75.         {
  76.             gout << box(a_oldal, a_oldal);
  77.         }
  78.  
  79.     }
  80.  
  81.     int esetvalaszto(int x0, int y0, int x1, int y1) //el kell donteni, hogy a negyzethez kepest melyik siknegyedben helyezkedik el az a pont, amihez mozog
  82.     {
  83.         if (x0 < x1)
  84.         {
  85.             if(y0 < y1)
  86.             {
  87.                 //cout << "Masodik eset :" << x0 << ',' << y0 << ',' << x1 << ',' << y1 << endl;
  88.                 return 2; // 2. siknegyed
  89.             }
  90.             //cout << "Harmadik eset :" << x0 << ',' << y0 << ',' << x1 << ',' << y1 << endl;
  91.             return 3;     //3. siknegyed
  92.         }
  93.         if (y0 < y1)
  94.         {
  95.             //cout << "Elso eset :" << x0 << ',' << y0 << ',' << x1 << ',' << y1 << endl;
  96.             return 1; //1. siknegyed
  97.         }
  98.         //cout << "Negyedik eset :" << x0 << ',' << y0 << ',' << x1 << ',' << y1 << endl;
  99.         return 4; //4. siknegyed
  100.     }
  101.  
  102.  
  103.  
  104.  
  105.     void mozgat( int i, Negyzet elozo)
  106.     {
  107.  
  108.  
  109.             if (i == 0) //az elso negyzet az egeret fogja kovetni
  110.             {
  111.                 if(tav2D(x,y,eg_kord_x,eg_kord_y) != 0) //ha 0 a tavolsag a negyzet es a cel kozott, akkor nem kell mozgatni. Emellett szogkeresesnel nullaval osztanank
  112.                 {
  113.                     int siknegyed = esetvalaszto(eg_kord_x, eg_kord_y, x, y);
  114.                     int elojel_x = 1;
  115.                     int elojel_y = 1;
  116.                     switch(siknegyed)
  117.                     {
  118.                     case 1:
  119.                         elojel_x = -1;
  120.                         elojel_y = -1;
  121.                         break;
  122.                     case 2:
  123.                         elojel_x = -1;
  124.                         elojel_y = -1;
  125.                         break;
  126.                     case 3:
  127.                         elojel_x = -1;
  128.                         break;
  129.                     case 4:
  130.                         elojel_x = -1;
  131.                         break;
  132.                     }
  133.                     double alph =  szog(x,y,eg_kord_x,eg_kord_y);
  134.  
  135.                     x = x + elojel_x * cos(alph) * tav2D(x, y, eg_kord_x, eg_kord_y) / gyorsasag; //megteszem a negyzet es a pont, amifele tartani kene kozotti tavolsag egy reszet (pl.: 10-edet)
  136.                     y = y + elojel_y * sin(alph) * tav2D(x, y, eg_kord_x, eg_kord_y) / gyorsasag;
  137.  
  138.  
  139.                 }
  140.             }
  141.  
  142.         else //a tobbi az elotte sorban levo negyzetet
  143.         {
  144.  
  145.             if(tav2D(x,y,elozo.x,elozo.y) != 0) //megint ellenorizzuk a nullat
  146.             {
  147.                 int siknegyed = esetvalaszto(elozo.x, elozo.y, x, y);
  148.                 int elojel_x = 1;
  149.                 int elojel_y = 1;
  150.  
  151.                 switch(siknegyed)
  152.                 {
  153.                 case 1:
  154.                     elojel_x = -1;
  155.                     elojel_y = -1;
  156.                     break;
  157.                 case 2:
  158.                     elojel_x = -1;
  159.                     elojel_y = -1;
  160.                     break;
  161.                 case 3:
  162.                     elojel_x = -1;
  163.                     break;
  164.                 case 4:
  165.                     elojel_x = -1;
  166.                     break;
  167.                 }
  168.  
  169.                 double alph =  szog(x,y,elozo.x,elozo.y);
  170.                 x = x + elojel_x * cos(alph) * tav2D(x, y, elozo.x, elozo.y) / gyorsasag;
  171.                 y = y + elojel_y * sin(alph) * tav2D(x, y, elozo.x, elozo.y) / gyorsasag;
  172.  
  173.             }
  174.  
  175.  
  176.         }
  177.  
  178.         rajzol();
  179.     }
  180.  
  181.     void eger_koord(event ev)
  182.     {
  183.         eg_kord_x = ev.pos_x;
  184.         eg_kord_y = ev.pos_y;
  185.  
  186.     }
  187. };
  188.  
  189.  
  190.  
  191.  
  192. int main()
  193. {
  194.     gout.open(x_max,y_max);
  195.     srand (time(NULL));
  196.  
  197.     int szam = 100;
  198.  
  199.     vector<Negyzet> sok_negyzet;
  200.  
  201.     for (int i = 0; i<szam; i++)
  202.     {
  203.         Negyzet n;
  204.         sok_negyzet.push_back(n);
  205.     }
  206.  
  207.     event ev;
  208.     gin.timer(100);
  209.  
  210.     while(gin >> ev)
  211.     {
  212.         if (ev.type == ev_mouse && ev.button == 0)
  213.         {
  214.             sok_negyzet[0].eger_koord(ev);
  215.  
  216.         }
  217.  
  218.         if(ev.type == ev_timer)
  219.         {
  220.             gout << color (0,0,0) << move_to(0,0) << box(x_max, y_max);
  221.             for (int i = 0; i<sok_negyzet.size(); i++)
  222.             {
  223.                 sok_negyzet[i].mozgat( i, sok_negyzet[i-1]);
  224.             }
  225.         }
  226.  
  227.  
  228.  
  229.     gout << refresh;
  230.     }
  231.     return 0;
  232. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement