#include <stdlib.h>
#include <time.h>
#include <grx20.h>
#include <grxkeys.h>
#include <math.h>
struct TPoint{
int x,y;
float a,s;
float va, vs;
int color;
TPoint(int ix,int iy,int icolor);
virtual ~TPoint();
virtual void Draw(int icolor);
void Show();
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);
};
TPoint::TPoint(int ix,int iy,int icolor)
{
x=250; y=250;
a=0; s=0;
va=rand()%0,01-0,1; vs=rand()%0,1-1;
color=icolor;
}
TPoint::~TPoint()
{
Hide();
}
void TPoint::Draw(int icolor)
{
GrPlot(x,y,icolor);
GrPlot(x+1,y,icolor);
GrPlot(x,y+1,icolor);
GrPlot(x+1,y+1,icolor);
}
void TPoint::Show()
{
Draw(color);
}
void TPoint::Hide()
{
Draw(0);
}
void TPoint::MoveXY(int ix,int iy)
{
Hide();
if(ix>GrMaxX()){
ix=ix-GrMaxX()-1;}
if (ix<0) {
ix=ix+GrMaxX()+1;}
if(iy>GrMaxY()){
iy=iy-GrMaxY()-1; }
if(iy<0) {
iy=iy+GrMaxY()+1; }
x=ix; y=iy;
a=va; s=vs;
x=floor(GrMaxX()/2+s*cos(a)); y=floor(GrMaxY()/2-s*sin(a));
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)
{
GrBox(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)
{
GrCircle(x+2,y+5,r-1,icolor);
}
#define M 10000
main()
{ int N=10;
TPoint *obj[M];
GrSetMode(GR_default_graphics,1024,768);
srand(time(0));
int i;
int count;
for(i=0;i<N;i++){
count=rand()%3;
switch(count)
{case 1:
obj[i]=new TBox(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15,rand()%10,rand()%10);break;
case 2:
obj[i]=new TCircle(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15 ,rand()%20);break;
default:
obj[i]=new TPoint(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15) ;};
obj[i]->Show();
}
GrKeyType key;
int s;
do{
while (!GrKeyPressed()){
GrSleep(5);
for(i=0;i<N;i++){
s=rand()%100;
if (s=50)
obj[i]->MoveXY(obj[i]->a+obj[i]->va, obj[i]->s+obj[i]->vs);}}//rand()%7-3,obj[i]->y+rand()%7-3);
key=GrKeyRead();
switch(key){
case GrKey_Insert:
if (N<M){
for(i=0;i<N;i++){
count=rand()%3;
switch(count)
{case 1:
obj[N]=new TBox(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15,rand()%10,rand()%10);break;
case 2:
obj[N]=new TCircle(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15 ,rand()%20);break;
default:
obj[N]=new TPoint(rand()%(GrMaxX()+1),rand()%(GrMaxY()+1),15) ;};
obj[i]->Show();
}
N++; //количество объектов увеличивается
}
break;
case GrKey_Delete:
if (N>0){
delete obj[N-1];
N--; //количество объектов уменьшается
}
break;
}
}while(key!=GrKey_Escape);
for(i=0;i<N;i++){
delete obj[i];
}
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.