This repository has been archived on 2024-12-25. You can view files and clone it, but cannot push or open issues or pull requests.
2023-06-20 21:52:24 +03:00

45 lines
1.1 KiB
ObjectPascal

uses GraphWPF;
function RandomReal(a,b: real): real := Random*(b-a)+a;
type
BallInfo = auto class
x,y,r,dx,dy: real;
c: Color;
procedure Move := (x,y) := (x+dx,y+dy);
procedure Draw := FillCircle(x,y,r,c);
procedure CheckDirection;
begin
if not x.Between(r,Window.Width-r) then
dx := -dx;
if not y.Between(r,Window.Height-r) then
dy := -dy;
end;
procedure Step;
begin
Move;
CheckDirection;
Draw;
end;
class function CreateRandomBallArray(n: integer): array of BallInfo;
begin
var rr := 20;
Result := ArrGen(n,i->new BallInfo(RandomReal(rr,Window.Width-rr),
RandomReal(rr,Window.Height-rr),RandomReal(5,15),
RandomReal(-3,3),RandomReal(-3,3),RandomColor));
end;
end;
begin
Window.Title := 'Отражение шариков. Анимация на основе кадра';
var n := 1000;
var a := BallInfo.CreateRandomBallArray(n);
BeginFrameBasedAnimation(()->
foreach var ball in a do
ball.Step
);
//BeginFrameBasedAnimation(()->a.ForEach(ball->ball.Step));
end.