Показать сообщение отдельно
Старый 27.06.2012, 15:11   #17
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Анимация "салют"

Код подогнал под себя:
Program explosions;
Var
  
dlina,i,skorost:integer;
  
x2:array[0..50of integer;
  
y2:array[0..50of integer;
  
x1:array[0..50of integer;
  
y1:array[0..50of integer;
 

procedure main;

begin

repeat
  
for i:= 0 to 50 do
    
begin
    setcolor
(255,255,255);
    
drawline(x1[i],y1[i],x2[i],y2[i]);
    
setcolor(0,0,0);
    
x1[i]:=2*x2[i]-x1[i];
    
y1[i]:=2*y2[i]-y1[i];
    
x2[i]:=2*x1[i]-x2[i];
    
y2[i]:=2*y1[i]-y2[i];
    
drawline(x1[i],y1[i],x2[i],y2[i]);
    
end;
repaint;
delay(skorost);
until (false);

end;

begin
dlina
:=20;
skorost:=50;
for 
i:= 0 to 50 do
  
begin
  x1
[i]:=getwidth/2;
  
y1[i]:=getheight/2;
  
x2[i]:=x1[i]+trunc(sin(random(360))*dlina);
  
y2[i]:=y1[i]+trunc(cos(random(360))*dlina);
  
drawline(x1[i],y1[i],x2[i],y2[i]);
  
end;

main;
end

или вот:
Program explosions;
Var
  
dlina,i,skorost:integer;
  
x2:array[0..50of integer;
  
y2:array[0..50of integer;
  
x1:array[0..50of integer;
  
y1:array[0..50of integer;

begin
dlina
:=20;
skorost:=50;
for 
i:= 0 to 50 do
  
begin
  x1
[i]:=getwidth/2;
  
y1[i]:=getheight/2;
  
x2[i]:=x1[i]+trunc(sin(random(360))*dlina);
  
y2[i]:=y1[i]+trunc(cos(random(360))*dlina);
  
drawline(x1[i],y1[i],x2[i],y2[i]);
  
end;

//***********************************
repeat
  
for i:= 0 to 50 do
    
begin
    setcolor
(255,255,255);
    
drawline(x1[i],y1[i],x2[i],y2[i]);
    
setcolor(0,0,0);
    
x1[i]:=2*x2[i]-x1[i];
    
y1[i]:=2*y2[i]-y1[i];
    
x2[i]:=2*x1[i]-x2[i];
    
y2[i]:=2*y1[i]-y2[i];
    
drawline(x1[i],y1[i],x2[i],y2[i]);
    
end;
repaint;
delay(skorost);
until (false);
//***********************************
end

AntiRock, у тебя получается много ненужных repaint, циклов и тп. Рисуются белые линии, их надо бы убрать. И ещё раз большое спасибо.
(Offline)
 
Ответить с цитированием