Объединить 2 анимации - PascalABC.NET

Формулировка задачи:

Помогите пожалуйста объединить 2 анимации, у меня если объединяю, что-то да не движется( нужно в 1 анимации сделать чтобы солнце двигалось как на 2 анимации 1 анимация
uses graphABC;
const
  x0 = 250;
  y0 = 150;
  n = 70; //количество лучей
  R = 40; //радиус солнца 
 
var xx, i, R1, x1, y1: integer;  
 t: real; 
 
procedure Obl(x,y:integer);
begin
setpencolor(clwhite);
setbrushcolor(clwhite);
circle(x,y,40);
circle(x+30,y,30);
circle(x-40,y,30);
end;
 
  
procedure Kor (x: integer);
var y: integer;
begin
y:=150;
setpencolor(clbrown);
setbrushcolor(clbrown);
rectangle(x+50,y+250,x+150,y+270);
line(x+149,y+268,x+180,y+250);
line(x+180,y+250,x+149,y+250);
floodfill(x+155,y+255,clbrown);
setpencolor(clwhite);
line(x+100,y+245,x+180,y+245);
line(x+180,y+245,x+100,y+150);
line(x+100,y+150,x+100,y+245);
line(x+90,y+245,x+50,y+245);
line(x+50,y+245,x+90,y+170);
line(x+90,y+170,x+90,y+245);
floodfill(x+105,y+240,clwhite);
floodfill(x+85,y+235,clwhite);
end;
 
begin
setwindowsize(700,500);
lockdrawing;
xx:=0;
repeat
clearwindow;
setpencolor(ClPowderBlue);
setbrushcolor(ClPowderBlue);
rectangle(0,0,700,400);
floodfill(100,400,clBlue);
Obl(100,90);
Obl(650,120);
Obl(450,80);
setpencolor(clyellow);
setbrushcolor(clyellow);
 
{лучи}    
  R1 := 2 * R; //радиус лучей в 2 раза больше радиуса солнца
  for i := 1 to n do begin
    SetPenColor(clYellow); //цвет лучей
    t := 2 * pi * i / n; //угол поворота луча
    if odd(i) then begin // лучи с нечетным номером:
      SetPenWidth(2); //толщина луча
      R1 := R1 - 40 //уменьшаем радиус на 40 пикселей
    end // лучи с четным номером:
    else begin
      SetPenWidth(2); //толщина луча
      R1 := R1 + 40 //увеличиваем радиус луча на 40 пикселей
    end;
    x1 := round(R1 * cos(t)); //абсцисса луча на окружности
    y1 := round(R1 * sin(t)); //ордината луча на окружности  
    Line(x0, y0, x0 + x1, y0 - y1); //рисуем луч
  end;
 
 {солнце}
  SetBrushColor(ClYellow); //цвет солнца
  SetPenColor(ClYellow); //цвет границы солнца
  Circle(x0, y0, R); //рисуем солнце 
 
SetBrushColor(ClSteelBlue); //цвет моря 
  SetPenColor(ClSteelBlue);
  Rectangle(0, WindowHeight - 100, WindowWidth, WindowHeight);
Kor (xx);
 
 
sleep(1);
xx:=xx+1;
redraw;
until xx>700;
end.
2 анимация
uses GraphABC;
 
var sol_x,sol_y,solx,soly,sol_i: integer;
 
begin
lockdrawing;
sol_x:=300;  sol_y:=330;
  
repeat
for var u:=1 to 360 do
    begin
    clearwindow;
  
     sol_i:=1;
          begin
          solx:=round(sol_x+400*cos(pi*(u+(sol_i*60))/180));
          soly:=round(sol_y+280*sin(pi*(u+(sol_i*60))/180));
          setbrushcolor(clyellow);
          setpencolor(clOrange);
          circle(solx,soly,30);
          end;
 
    sleep(100);
    redraw;
    end;
    
until false;
end.

Код к задаче: «Объединить 2 анимации - PascalABC.NET»

textual
процедуре Солнце.
uses graphABC;
 
procedure Solnce(x0,y0,r0,r,n:integer;u:real);
var r1,i,x,y,x1,y1:integer;
    t:real;
begin
setpencolor(clyellow);
setbrushcolor(clyellow);
{лучи}
SetPenWidth(2); //толщина луча
x:=x0+round(r0*cos(u));
y:=y0-round(r0*sin(u));
t:=pi/2;
for i:=1 to n do
 begin
  if odd(i) then r1:=r+r div 2 // лучи с нечетным номером:
  else r1:=2*r;
  x1 := round(r1 * cos(t)); //абсцисса луча на окружности
  y1 := round(r1 * sin(t)); //ордината луча на окружности
  Line(x,y,x+x1,y-y1); //рисуем луч
  t:=t+2*pi/n;
 end;
{солнце}
Circle(x,y,r); //рисуем солнце
end;
 
procedure Obl(x,y:integer);
begin
setpencolor(clwhite);
setbrushcolor(clwhite);
circle(x,y,40);
circle(x+30,y,30);
circle(x-40,y,30);
end;
 
procedure Kor (x: integer);
var y: integer;
begin
y:=150;
setpencolor(clbrown);
setbrushcolor(clbrown);
rectangle(x+50,y+250,x+150,y+270);
line(x+149,y+268,x+180,y+250);
line(x+180,y+250,x+149,y+250);
floodfill(x+155,y+255,clbrown);
setpencolor(clwhite);
line(x+100,y+245,x+180,y+245);
line(x+180,y+245,x+100,y+150);
line(x+100,y+150,x+100,y+245);
line(x+90,y+245,x+50,y+245);
line(x+50,y+245,x+90,y+170);
line(x+90,y+170,x+90,y+245);
floodfill(x+105,y+240,clwhite);
floodfill(x+85,y+235,clwhite);
end;
 
var x0,y0,r0,xk,b: integer;
    u: real; 
    cl:Color;
begin
setwindowsize(700,500);
lockdrawing;
x0:=windowwidth div 2;
y0:=windowheight-100;
r0:=x0;
xk:=0;
u:=pi-arctan(windowheight/2/x0);
b:=255;
//cl//:=RGB(0,0,b);
repeat
clearwindow;
cl:=RGB(0,0,b);
setpencolor(Cl);//PowderBlue);
setbrushcolor(Cl);//PowderBlue);
rectangle(0,0,700,400);
Solnce(x0,y0,r0,30,40,u);
Obl(100,90);
Obl(650,120);
Obl(450,80);
SetBrushColor(ClSteelBlue); //цвет моря
SetPenColor(ClSteelBlue);
Rectangle(0, WindowHeight - 100, WindowWidth, WindowHeight);
Kor (xk);
sleep(1);
xk:=xk+1;
u:=u-0.005;
if u<pi/4 then 
if b>200 then b:=b-1;
redraw;
until xk>700;
end.

12   голосов, оценка 3.750 из 5


СОХРАНИТЬ ССЫЛКУ