Program explosions;
Var
dlina,i,m,t,skorost,koli4estvo,rndx,rndy,Rf,Gf,Bf:integer;
p:array[1..9,1..300] of integer;
begin
Rf:=0; ///цвет фона R(0-255)
Gf:=38; ///цвет фона G(0-255)
Bf:=100 ; ///цвет фона B(0-255)
dlina:=30; ///от 3 до 50.
skorost:=100; /// от 1 до 100(по сути мы не ускоряем, а уменьшаем задержку).
koli4estvo:=300; /// от 1 до 300(чем больше число, тем больше времени уходит на обработку массивов!!).
t:=3; ///время через которое наш фейерверк умирает и появляется новый(работает коряво, не могу сообразить как сделать=)).
//внимание все параметры должны быть записаны целыми числами!
repeat
rndx:=random(getwidth); ///рэндомно выбираем на экране координату X для эпицентра фейерверка.
rndy:=random(getheight); ///рэндомно выбираем на экране координату Y для эпицентра фейерверка.
for i:= 1 to koli4estvo do
begin
p[1,i]:=random(360); ///задаем рэндомно угол.
p[2,i]:=random(360); ///задаем рэндомно угол.
p[3,i]:=random(255); ///задаем цвет R.
p[4,i]:=random(255); ///задаем цвет G.
p[5,i]:=random(255); ///задаем цвет B.
p[6,i]:=rndx; ///перемещаем координаты X.
p[7,i]:=rndy; ///перемещаем координаты Y.
p[8,i]:=0; ///присваеваем координате X, второй точки значение 0.
p[9,i]:=0; ///присваеваем координате Y, второй точки значение 0.
end;
repeat
SetColor(Rf, Gf, Bf); ///цвет фона
FillRect(0, 0, GetWidth, GetHeight); ///очищаем экран для генерации новых линий.
for i:= 1 to koli4estvo do
begin
setcolor(p[3,i],p[4,i],p[5,i]); ///присваеваем цвет.
p[6,i]:=(p[8,i]+p[6,i])/2; ///расчитываем координату X.
p[7,i]:=(p[9,i]+p[7,i])/2; ///расчитываем координату Y.
p[8,i]:=p[6,i]+trunc(sin(p[1,i])*dlina); ///расчитываем координату X2.
p[9,i]:=p[7,i]+trunc(cos(p[2,i])*dlina); ///расчитываем координату Y2.
drawline(p[6,i],p[7,i],p[8,i],p[9,i]); ///чертим линию по заданным координатам.
drawline(p[6,i]-1,p[7,i]-1,p[8,i]-1,p[9,i]-1); ///чертим линию по (заданным координатам-1), таким образом они становятся толще, визуально.
end;
repaint; ///выводим на экран наше художество.
m:=m+100/skorost; ///считаем время.
delay(100/skorost); ///пауза.
until (m>t*50); ///прерываем цикл.
m:=0; ///сбрасываем время.
until (false);
end.