Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <time.h>
- #include <grxkeys.h>
- #include <grx20.h>
- struct TPoint{
- int x,y;
- int vx,vy;
- int color;
- TPoint(int ix,int iy,int icolor);
- virtual ~TPoint();
- virtual void Draw(int icolor);
- void Show();
- virtual void Hide();
- void MoveXY(int ix, int iy);
- };
- struct TBox: public TPoint{
- int w,h;
- TBox(int ix,int iy,int icolor,int iw,int ih);
- virtual ~TBox();
- virtual void Draw(int icolor);
- };
- struct TCircle: public TPoint{
- int r;
- TCircle(int ix,int iy,int icolor,int ir);
- virtual ~TCircle();
- virtual void Draw(int icolor);
- };
- struct TM: public TPoint{
- int size;
- TM(int ix,int iy,int icolor,int isize);
- virtual ~TM();
- virtual void Hide();
- virtual void Draw(int icolor);
- };
- TPoint::TPoint(int ix,int iy,int icolor)
- {
- vx=rand()%9-3;
- vy=rand()%9-3;
- x=ix; y=iy;
- color=icolor;
- }
- TPoint::~TPoint()
- {
- Hide();
- }
- void TPoint::Draw(int icolor)
- {
- GrFilledCircle(x,y,3,icolor);
- }
- void TPoint::Show()
- {
- Draw(color);
- }
- void TPoint::Hide()
- {
- Draw(0);
- }
- void TPoint::MoveXY(int ix,int iy)
- {
- Hide();
- x=ix; y=iy;
- if(x+3>GrMaxX())
- vx=-vx;
- if(x-3<0)
- vx=-vx;
- if(y+3>GrMaxY())
- vy=-vy;
- if(y-3<0)
- vy=-vy;
- Show();
- }
- TBox::TBox(int ix,int iy,int icolor,int iw,int ih):
- TPoint(ix,iy,icolor)
- {
- w=iw; h=ih;
- }
- TBox::~TBox()
- {
- Hide();
- }
- void TBox::Draw(int icolor)
- {
- GrFilledBox(x-w/2,y-h/2,x+(w-w/2),y+(h-h/2),icolor);
- }
- TCircle::TCircle(int ix,int iy,int icolor,int ir):
- TPoint(ix,iy,icolor)
- {
- r=ir;
- }
- TCircle::~TCircle()
- {
- Hide();
- }
- void TCircle::Draw(int icolor)
- {
- GrFilledCircle(x,y,r,icolor);;
- }
- TM::TM(int ix,int iy,int icolor,int isize):
- TPoint(ix,iy,icolor)
- {
- size=isize;
- }
- void TM::Hide()
- {
- GrLine(x,y,x+0.5*size*4,y-size*4,0);
- GrLine(x+0.5*size*4,y-size*4,x+size*4,y,0);
- GrLine(x+1,y,x+0.5*size*4+1,y-size*4,0);
- GrLine(x+1+0.5*size*4,y-size*4,x+size*4+1,y,0);
- GrLine(x+0.3*size*4,y-0.5*size*4,x+0.8*size*4,y-0.5*size*4,0);
- GrLine(x+size*5,y-size*4,x+size*5,y,0);
- GrLine(x+size*5+1,y-size*4,x+size*5+1,y,0);
- GrLine(x+size*8,y-size*4,x+size*8,y,0);
- GrLine(x+size*8+1,y-size*4,x+size*8+1,y,0);
- GrLine(x+size*5,y-0.5*size*4,x+size*8,y-0.5*size*4,0);
- GrLine(x+size*5,y-0.5*size*4+1,x+size*8,y-0.5*size*4+1,0);
- }
- TM::~TM()
- {
- Hide();
- }
- void TM::Draw(int icolor)
- {
- GrLine(x,y,x+0.5*size*4,y-size*4,color);
- GrLine(x+0.5*size*4,y-size*4,x+size*4,y,color);
- GrLine(x+1,y,x+0.5*size*4+1,y-size*4,color);
- GrLine(x+1+0.5*size*4,y-size*4,x+size*4+1,y,color);
- GrLine(x+0.3*size*4,y-0.5*size*4,x+0.8*size*4,y-0.5*size*4,color);
- GrLine(x+size*5,y-size*4,x+size*5,y,color);
- GrLine(x+size*5+1,y-size*4,x+size*5+1,y,color);
- GrLine(x+size*8,y-size*4,x+size*8,y,color);
- GrLine(x+size*8+1,y-size*4,x+size*8+1,y,color);
- GrLine(x+size*5,y-0.5*size*4,x+size*8,y-0.5*size*4,color);
- GrLine(x+size*5,y-0.5*size*4+1,x+size*8,y-0.5*size*4+1,color);
- }
- #define N 70
- main()
- {
- GrSetMode(GR_default_graphics);
- TPoint *obj[N];
- srand(time(0));
- int i;
- for(i=1;i<N;i++){
- int flag = rand()%3;
- switch(flag){
- case 0: obj[i]=new TPoint(GrMaxX()/2,GrMaxY()/2,rand()%15+1); break;
- case 1: obj[i]=new TBox(GrMaxX()/2,GrMaxY()/2, rand()%15+1, rand()%20+10, rand()%20+10); break;
- case 2: obj[i]=new TCircle(GrMaxX()/2,GrMaxY()/2,rand()%15+1, rand()%20+10);
- }
- obj[0]=new TM(GrMaxX()/2,GrMaxY()/2, rand()%15+1, rand()%20+10);
- obj[i]->Show();
- }
- GrKeyType key;
- do{
- while (!GrKeyPressed()){
- GrSleep(20);
- for(i=0;i<N;i++){
- obj[i]->MoveXY(obj[i]->x+obj[i]->vx,obj[i]->y+obj[i]->vy);
- if(rand()%50==30){
- obj[i]->vx=rand()%7-3;
- obj[i]->vy=rand()%7-3;
- }
- }
- }
- key=GrKeyRead();
- }while(key!=GrKey_Escape);
- for(i=0;i<N;i++){
- delete obj[i];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement