Помогите анимировать солнце program qq; uses GraphABC; var x,h:real; i,N,r,k,c:integer;...

0 голосов
105 просмотров

Помогите анимировать солнце
program qq; uses GraphABC; var x,h:real;
i,N,r,k,c:integer;
begin
N:=10;
c:=8;
begin
k:=1;
r:=100;
i:=1;
repeat
SetBrushColor(rgb(230-k,230-k,0));
circle(200,200,r);
k:=k+20;
i:=i+1;
r:=r-20;
until i=c;
end;
Rectangle (0,580,1920,1018);
FlooDfill (1,581,cllime);
FlooDfill (10,4,clblue);




Rectangle (800,380,1100,680);
h:=(1100-800)/(N+1);
x:=800+h;
for i:=1 to N do
begin
Line (round(x),380,round(x),680);
x:=x+h;
end;
FlooDfill (801,381,clbrown);
FlooDfill (829,381,clbrown);
FlooDfill (857,381,clbrown);
FlooDfill (885,381,clbrown);
FlooDfill (910,381,clbrown);
FlooDfill (938,381,clbrown);
FlooDfill (966,381,clbrown);
FlooDfill (994,381,clbrown);
FlooDfill (1022,381,clbrown);
FlooDfill (1050,381,clbrown);
FlooDfill (1078,381,clbrown);
Rectangle (900,480,1000,590);
FlooDfill (901,481,clgray);
Rectangle (904,484,996,530);
FlooDfill (905,485,clyellow);
Rectangle (904,534,950,586);
FlooDfill (905,535,clred);
Rectangle (954,534,996,586);
FlooDfill (955,535,clblue);
Line (950,300,1100,380);
Line (800,380,950,300);
Line (800,380,1100,380);
FlooDfill (1036,379,clgray);
FlooDfill (950,350,clsilver);
Circle (950,340,30);
FlooDfill (950,340,clred);


Rectangle (305,615,280,624);
FlooDfill (291,616,clgreen);
Rectangle (350,600,330,670);
FlooDfill (340,650,clgreen);
Rectangle (400,600,420,670);
FlooDfill (410,650,clgreen);
Circle (470,600,30);
FlooDfill (470,600,clgreen);
Circle (480,580,10);
FlooDfill (480,580,clwhite);
Circle (482,582,2);
FlooDfill (482,582,clblack);
Rectangle (480,600,500,604);
FlooDfill (484,602,clred);
Ellipse (300,590,450,650);
FlooDfill (350,600,clbrown);
end.


Информатика (24 баллов) | 105 просмотров
0

а что должно быть?

0

во первых предлагаю из абсолютных координат перейти в относительные

0

потом каждый обьект создавать отдельно

Дан 1 ответ
0 голосов
Правильный ответ

// PascalABC.NET 3.1, сборка 1218 от 12.04.2016
uses GraphABC;

procedure Sun(x, y: integer);
begin
  var c := 8;
 
  for var j := 1 to 100 do
  begin
    var r := 15 * c;
    var k := 0;
    if j mod 2 = 0 then k := 20;
    
    for var i := 0 to c do
    begin
      Brush.Color := RGB(230 - k, 230 - k, 0);
      Circle(x, y, r);
      k := k + 15;
      r := r - 15;
      sleep(100);
    end;
  end;
end;

procedure House(x, y: integer);
begin
  Brush.Color := clBrown;
  Pen.Color := clBurlyWood;
  var house_width := 300;
  var house_height := 300;
  var count := 10;
  var step := round(house_width / count);
 
  FillRectangle(x, y, x + house_width, y + house_height);
 
  var xx := x;
  for var i := 1 to count - 1 do
  begin
    xx := xx + step;
    Line(xx, y, xx, y + house_height);
  end;
 
  Brush.Color := clGray;
  FillRectangle(x + 100, y + 100, x + 200, y + 210);
  Brush.Color := clYellow;
  FillRectangle(x + 105, y + 105, x + 195, y + 150);
  Brush.Color := clRed;
  FillRectangle(x + 105, y + 155, x + 150, y + 205);
  Brush.Color := clBlue;
  FillRectangle(x + 155, y + 155, x + 195, y + 205);
 
  MoveTo(x + house_width div 2, y - 80);
  LineTo(x + house_width, y, Pen.Color);
  LineTo(x, y, Pen.Color);
  LineTo(x + house_width div 2, y - 80, Pen.Color);
  FlooDfill(x + house_width div 2, y - 10, clOlive);
 
  Brush.Color := clRed;
  Circle(x + house_width div 2, y - 35, 30);
end;

procedure Turtoise(x, y: integer);
begin
  Brush.Color := clGreen;
  Pen.Color := clGreen;
  FillRectangle(x + 5, y + 15, x - 20, y + 24);
  FillRectangle(x + 50, y, x + 30, y + 70);
  FillRectangle(x + 100, y, x + 120, y + 70);
  FillCircle(x + 170, y, 30);
 
  Brush.Color := clWhite;
  FillCircle(x + 180, y - 20, 10);
 
  Brush.Color := clBlack;
  FillCircle(x + 182, y - 18, 2);
  Brush.Color := clRed;
  FillRectangle(x + 180, y, x + 200, y + 4);
  Brush.Color := clBrown;
  FillEllipse(x, y - 10, x + 150, y + 50);
end;

begin
  Window.Init(0, 0, 1920, 1000, clBlue);
  Brush.Color := clLimeGreen;
  Rectangle(0, 580, 1920, 1018);
 
  House(700, 380);
  Turtoise(300, 600);
  Turtoise(900, 750);
  Sun(1200, 200);
end.

(53.1k баллов)