Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "graphics.hpp"
- #include "iostream"
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- #include <vector>
- #include <cmath>
- using namespace genv;
- using namespace std;
- #define x_max 1000 //max x koordinata
- #define y_max 1000 //max y koordinata
- #define gyorsasag 2 // minel alacsonyabb, annál gyorsabban kozlekednek a negyzetek
- struct Negyzet
- {
- int x,y;
- int r,g,b;
- int a_oldal;
- int eg_kord_x, eg_kord_y;
- float tav2D(int x0, int y0, int x1, int y1) //2D tavolsag
- {
- return(pow(pow(x0-x1,2)+pow(y0-y1,2),0.5));
- }
- float szog(int x0, int y0, int x1, int y1) //a vizszintessel bezart szog
- {
- float a = tav2D(x0,y0,x1,y1);
- float b = tav2D(x0,y0,0,y0);
- float c = tav2D(x1, y1, 0, y0);
- return(acos((pow(a,2)+pow(b,2)-pow(c,2))/(2*a*b)));
- }
- public:
- Negyzet()
- {
- x = rand() % (x_max+1); //veletlenszeru x, y koordinatak
- y = rand() % (y_max+1);
- a_oldal = (rand() % 11) +5; //5-15 meretu veletleszeru negyzetek
- r = rand() % 256;
- g = rand() % 256;
- b = rand() % 256;
- eg_kord_x = 0; eg_kord_y = 0;
- }
- void kiir()
- {
- cout << "X: " << x << ", Y: " << y << endl;
- //cout << "R: " << r << ", G: " <<g << ", B: " << b << endl;
- }
- void rajzol ()
- {
- gout << color (r,g,b) << move_to(x,y);
- if(a_oldal + x > x_max)
- {
- gout << box(x_max-x, a_oldal);
- }
- if(a_oldal + y > y_max)
- {
- gout << box(y_max-y, a_oldal);
- }
- else if(a_oldal + x > x_max && a_oldal + y > y_max)
- {
- gout << box (x_max-x, y_max-y);
- }
- else
- {
- gout << box(a_oldal, a_oldal);
- }
- }
- 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
- {
- if (x0 < x1)
- {
- if(y0 < y1)
- {
- //cout << "Masodik eset :" << x0 << ',' << y0 << ',' << x1 << ',' << y1 << endl;
- return 2; // 2. siknegyed
- }
- //cout << "Harmadik eset :" << x0 << ',' << y0 << ',' << x1 << ',' << y1 << endl;
- return 3; //3. siknegyed
- }
- if (y0 < y1)
- {
- //cout << "Elso eset :" << x0 << ',' << y0 << ',' << x1 << ',' << y1 << endl;
- return 1; //1. siknegyed
- }
- //cout << "Negyedik eset :" << x0 << ',' << y0 << ',' << x1 << ',' << y1 << endl;
- return 4; //4. siknegyed
- }
- void mozgat( int i, Negyzet elozo)
- {
- if (i == 0) //az elso negyzet az egeret fogja kovetni
- {
- 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
- {
- int siknegyed = esetvalaszto(eg_kord_x, eg_kord_y, x, y);
- int elojel_x = 1;
- int elojel_y = 1;
- switch(siknegyed)
- {
- case 1:
- elojel_x = -1;
- elojel_y = -1;
- break;
- case 2:
- elojel_x = -1;
- elojel_y = -1;
- break;
- case 3:
- elojel_x = -1;
- break;
- case 4:
- elojel_x = -1;
- break;
- }
- double alph = szog(x,y,eg_kord_x,eg_kord_y);
- 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)
- y = y + elojel_y * sin(alph) * tav2D(x, y, eg_kord_x, eg_kord_y) / gyorsasag;
- }
- }
- else //a tobbi az elotte sorban levo negyzetet
- {
- if(tav2D(x,y,elozo.x,elozo.y) != 0) //megint ellenorizzuk a nullat
- {
- int siknegyed = esetvalaszto(elozo.x, elozo.y, x, y);
- int elojel_x = 1;
- int elojel_y = 1;
- switch(siknegyed)
- {
- case 1:
- elojel_x = -1;
- elojel_y = -1;
- break;
- case 2:
- elojel_x = -1;
- elojel_y = -1;
- break;
- case 3:
- elojel_x = -1;
- break;
- case 4:
- elojel_x = -1;
- break;
- }
- double alph = szog(x,y,elozo.x,elozo.y);
- x = x + elojel_x * cos(alph) * tav2D(x, y, elozo.x, elozo.y) / gyorsasag;
- y = y + elojel_y * sin(alph) * tav2D(x, y, elozo.x, elozo.y) / gyorsasag;
- }
- }
- rajzol();
- }
- void eger_koord(event ev)
- {
- eg_kord_x = ev.pos_x;
- eg_kord_y = ev.pos_y;
- }
- };
- int main()
- {
- gout.open(x_max,y_max);
- srand (time(NULL));
- int szam = 100;
- vector<Negyzet> sok_negyzet;
- for (int i = 0; i<szam; i++)
- {
- Negyzet n;
- sok_negyzet.push_back(n);
- }
- event ev;
- gin.timer(100);
- while(gin >> ev)
- {
- if (ev.type == ev_mouse && ev.button == 0)
- {
- sok_negyzet[0].eger_koord(ev);
- }
- if(ev.type == ev_timer)
- {
- gout << color (0,0,0) << move_to(0,0) << box(x_max, y_max);
- for (int i = 0; i<sok_negyzet.size(); i++)
- {
- sok_negyzet[i].mozgat( i, sok_negyzet[i-1]);
- }
- }
- gout << refresh;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement