1. У розіл Uses головної форми проекту додайте посилання на модуль Unit2 для
доступу до класів предметної області проекта.
2. У роздл public
опису классу TForm1 додайте змінні для збереження об'єктів:
part:Particle;
m:array[1..1000] of Molecule;
3. Додати на головну форму
проекту Form1 панель, розмістивши її у
нижній частині екрану. Для цього встановіть їй властивість Align = alBottom.
4. У верхній частині форми
встановіть компонент для відображення графіки PaintBox1. Встановіть властивість
Align = alClient.
5. На форму встановіть дві
кнопки. Зробіть на них підписи «Пуст» та «Пауза».
6. Також на форму
встановіть не візуальний компонент Timer1. Встановіть йому властивості: Enabled =
false, Interval = 50.
7. Створіть обробник для
події onClick кнопки «Пуск»:
procedure
TForm1.Button1Click(Sender: TObject);
var i:integer;
begin //Кнопка "Пуск"
part := Particle.Create(PaintBox1.Width
div 2,
PaintBox1.Height div 2,0,0,10,clRed,10);
part.id:=1;
Form1.PaintBox1.Canvas.Pen.Color:=Form1.PaintBox1.Color;
part.show;
Randomize;
for i := 1 to 100 do begin
m[i]:=
Molecule.Create(random(PaintBox1.Width),
random(PaintBox1.Height),
random(20)-10,random(20)-10,1);
m[i].show;
end;
Timer1.Enabled:=true;
Button1.Enabled:=false;
end;
8. Створіть обробник для
події onClick кнопки «Пауза»:
procedure
TForm1.Button2Click(Sender: TObject);
begin //Кнопка "Пауза"
Timer1.Enabled:=not Timer1.Enabled;
end;
9. Додайте обробник події Timer1Timer:
procedure
TForm1.Timer1Timer(Sender: TObject);
var i:integer;
begin
PaintBox1.Canvas.Brush.Color:=PaintBox1.Color;
PaintBox1.Canvas.Rectangle(0,0,
PaintBox1.Width,PaintBox1.Height);
part.kick;
part.move;
for i := 1 to 100 do begin
m[i].kick;
m[i].move;
end;
end;
10. У файл Unit2 додайте
реалізацію описів методів класів:
uses Unit1;
constructor Body.Create(x0,y0,vx0,vy0:integer; m0:real);
begin
x:=x0;
y:=y0;
m:=m0;
vx:=vx0;
vy:=vy0;
end;
function
Body.getX:integer;
begin
getX:=x;
end;
function
Body.getY:integer;
begin
getY:=y;
end;
Function
Body.getVx: integer;
begin
getVx:=vx;
end;
Function
Body.getVy: integer;
begin
getVy:=vx;
end;
Function
Body.getM: real;
begin
getM:=m;
end;
Procedure
Body.setX(x0:integer);
begin
x:=x0;
end;
Procedure
Body.setY(y0:integer);
begin
end;
Procedure
Body.setVx(vx0:integer);
begin
end;
Procedure Body.setVy(vy0:integer);
begin
end;
Procedure
Body.move;
begin
hide;
x:=x+vx;
y:=y+vy;
show;
end;
Procedure
Particle.kick;
var
i,xt,yt,vxt,vyt:integer;
vx1,vy1,vx2,vy2,mt:real;
begin
if (x<2) or (x>Form1.PaintBox1.Width-1) then
vx:=-1*vx;
if (y<0) or
(y>Form1.PaintBox1.Height) then vy:=-1*vy;
for i := 1 to 100 do begin
xt:=Form1.m[i].getX;
yt:=Form1.m[i].getY;
vxt:=Form1.m[i].getVx;
vyt:=Form1.m[i].getVy;
mt:=Form1.m[i].getM;
if (xt=x) and (yt=y) then continue;
if sqrt(sqr(xt-x)+sqr(yt-y))<=r
then begin
x:=x-Vx;
y:=y-Vy;
vx1 := Vx * (m - mt) / (m + mt) + Vxt * (2 * mt) / (m +
mt) ;
vy1 := Vy * (m - mt) / (m + mt) + Vyt * (2 * mt) / (m +
mt) ;
vx2 := Vxt * (mt - m) / (mt +
m) + Vx * (2 * m) / (m + mt) ;
vy2 := Vyt * (mt - m) / (mt +
m) + Vy * (2 * m) / (m + mt) ;
Vx := round(vx1);
Vy := round(vy1);
Form1.m[i].setVx(round(vx2));
Form1.m[i].setVy(round(vy2));
end;
end;
end;
Procedure
Body.kick;
begin
if (x<2) or (x>Form1.PaintBox1.Width-1) then
vx:=-1*vx;
if (y<0) or (y>Form1.PaintBox1.Height)
then vy:=-1*vy;
end;
procedure
Body.show;
begin
Form1.PaintBox1.Canvas.Brush.Color:=clBlack;
Form1.PaintBox1.Canvas.Ellipse(x-2,y-2,x+2,y+2);
end;
procedure
Body.hide;
begin
Form1.PaintBox1.Canvas.Brush.Color:=Form1.PaintBox1.Color;
Form1.PaintBox1.Canvas.Ellipse(x-2,y-2,x+2,y+2);
end;
Function
Particle.getR: integer;
begin
getR:=r;
end;
Function
Particle.getColor: integer;
begin
getColor:=color;
end;
Procedure
Particle.setR(r0:integer);
begin
r:=r0;
end;
Procedure
Particle.setColor(c0:integer);
begin
color:=c0;
end;
constructor Particle.Create(x0,y0,vx0,vy0,r0,c0:integer;
m0:real);
begin
x:=x0;
y:=y0;
vx:=vx0;
vy:=vy0;
r:=r0;
color:=c0;
m:=m0;
end;
procedure
Particle.show;
begin
Form1.PaintBox1.Canvas.Brush.Color:=color;
Form1.PaintBox1.Canvas.Ellipse(x-r,y-r,x+r,y+r);
end;
procedure
Particle.hide;
begin
Form1.PaintBox1.Canvas.Brush.Color:=Form1.PaintBox1.Color;
Form1.PaintBox1.Canvas.Ellipse(x-r,y-r,x+r,y+r);
end;
Procedure
Particle.move;
begin
hide;
x:=x+vx;
y:=y+vy;
show;
end;
Немає коментарів:
Дописати коментар