27.06.2012, 15:11
|
#17
|
Нуждающийся
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений (для 10 пользователей)
|
Ответ: Анимация "салют"
Код подогнал под себя:
Program explosions; Var dlina,i,skorost:integer; x2:array[0..50] of integer; y2:array[0..50] of integer; x1:array[0..50] of integer; y1:array[0..50] of 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..50] of integer; y2:array[0..50] of integer; x1:array[0..50] of integer; y1:array[0..50] of 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)
|
|