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