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.
2024-03-10 20:32:51 +03:00

44 lines
1.1 KiB
ObjectPascal

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