Uses
GRAPH, CRT;
Type
TPoint=object
x , y : Integer;
Constructor Init(_x,_y:integer);
Procedure Draw(color:Word); virtual;
Function GetX:integer;
Function GetY:integer;
Procedure SetValue(_x,_y:integer); virtual;
Procedure Show;
Procedure Hide;
Procedure Move(_dx,_dy:integer);
end;
Constructor TPoint.Init;
Begin
x:=_x;
y:=_y
end;
Function TPoint.GetX;
Begin
GetX:=x;
end;
Function TPoint.GetY;
Begin
GetY:=y;
end;
Procedure TPoint.Draw;
Begin
putPixel (x,y,color);
end;
Procedure TPoint.Show;
Begin
Draw(white);
end;
Procedure TPoint.Hide;
Begin
Draw(Getbkcolor);
end;
Procedure TPoint.SetValue;
Begin
x:=_x;
y:=_y;
end;
Procedure TPoint.Move;
Begin
Hide;
SetValue(x+_dx,y+_dy);
Show;
end;
Type TCircle=object(TPoint)
r : Integer;
Constructor Init(_x,_y,_r:integer);
Procedure Draw(color:Word); virtual;
end;
Constructor TCircle.Init;
Begin
x:=_x;
y:=_y;
r:=_r
end;
Procedure TCircle.Draw;
Begin
Setcolor(color);
Circle(x,y,r)
end;
Var
P : TPoint;
C : TCircle;
dx,dy,dcx,dcy,r: Integer;
grDr, grMode : Integer;
Begin
grDr:=detect;
grMode:=0;
InitGraph (grDr, grMode, '');
P.Init(1,1);
P.Show;
r:=20;
C.Init(100,100,r);
C.Show;
dx:=1; dy:=1;
dcx:=1; dcy:=1;
Repeat
P.Move(dx,dy);
C.Move(dcx,dcy);
Delay (50);
if (P.GetX<2) or (P.GetX>GetMaxX-1) Then dx:=-dx;
if (P.GetY<2) or (P.GetY>GetMaxY-1) Then dy:=-dy;
if (C.GetX<r) or (C.GetX>GetMaxX-r) Then dcx:=-dcx;
if (C.GetY<r) or (C.GetY>GetMaxY-r) Then dcy:=-dcy;
Until Keypressed;
closeGraph;
End. |