if Mol.show then
begin
. . .
end;
if Mol1.adabsorber xor Mol2.absorber then
begin
. . .{поглощение}
end
else
begin
. . .{столкновение}
end;
procedure TForm1.Painting;
var i:integer;
Mol:TMolekula;
begin
paintBox1.Canvas.Brush.Color:=FonColor;
paintBox1.Canvas.Rectangle(0,0,pbWidth,pbHeight);
for i := 0 to MolList.Count-1 do
begin
Mol:=TMolekula(MolList.Items[i]);
if Mol.absorber then paintBox1.Canvas.Brush.Color:=RedColor
else paintBox1.Canvas.Brush.Color:=BlueColor;
PaintBox1.Canvas.Ellipse(Mol.Fx-Rad, Mol.Fy-Rad, Mol.Fx+Rad, Mol.Fy+Rad);
end;
end;
procedure TForm1.Painting;
var
i:integer;
Mol:TMolekula;
begin
paintBox1.Canvas.Brush.Color:=FonColor;
paintBox1.Canvas.Rectangle(0,0,pbWidth,pbHeight);
for i := 0 to MolList.Count-1 do
begin
Mol:=TMolekula(MolList.Items[i]);
if Mol.Show then
begin
if Mol.absorber then paintBox1.Canvas.Brush.Color:=RedColor
else paintBox1.Canvas.Brush.Color:=BlueColor;
PaintBox1.Canvas.Ellipse(Mol.Fx-Rad, Mol.Fy-Rad, Mol.Fx+Rad, Mol.Fy+Rad);
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
x,y:integer;
i:integer;
Mol:TMolekula;
begin
for i := 0 to MolList.Count-1 do
begin
Mol:=TMolekula(MolList.Items[i]);
if Mol.Show then
begin
Mol.Fx:=Mol.Fx+Mol.FVx;
Mol.Fy:=Mol.Fy+Mol.FVy;
Mol.Wall(i,pbwidth,pbheight);
Mol.Strike(i);
end;
end;
Painting;
end;
procedure TMolekula.Strike(i:integer);
var
j:byte;
Mol1,Mol2:TMolekula;
temp:integer;
begin
Mol1:=TMolekula(MolList.Items[i]);
for j:= 0 to MolList.Count-1 do
begin
if j<>i then
begin
Mol2:=TMolekula(MolList.Items[j]);
if Mol2.Show then
if DistanceBetween(Mol1,Mol2)<=2*Rad then
if Mol1.absorber xor Mol2.absorber then
begin
Mol1.Show:=Mol1.absorber;
Mol2.Show:=Mol2.absorber;
end
else
begin
temp:=Mol1.FVx;
Mol1.FVx:=Mol2.FVx;
Mol2.FVx:=temp;
temp:=Mol1.FVy;
Mol1.FVy:=Mol2.FVy;
Mol2.FVy:=temp;
end;
end;
end;
end;
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.