Простая анимация на языке программирования PascalABC
Среда программирования: PascalABC
Одно из заданий внеурочной деятельности в 6 классе, демонстрация простой анимации за счёт смены четырёх изображений, с помощью модуля GraphABC.
В качестве примера выбраны в декартовой координате четыре разных позиции объектов: собака, туча, лист, дорога с камнями. Для этого нам понадобится следующие инструменты:
Процедура ClearWindow (color); - очищает графическое окно указанным цветом, после этого выполняются команды следующего рисунка.
Процедура sleep(n); - экранная задержка, позволяет замедлить смену одного рисунка на другой.
Процедура цикла с параметром for j:=0 to n do и random(n)+p задаёт выбор случайным образом координат x и y для рисования чёрточек на дороге.
Сначала задаём количество смены объектов. Для упрощения это цикл от 1 до 1. Разграничим экранную страницу на две части, небо и дорогу. На небе изобразим тучу используя оператор аrc(x,y,r,a1,a2) (рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX), закрасим её, на дороге лежат камни. Рисуем падающий лист в основном оператором Line(x1,y1,x2,y2) (рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2) и LineTo(x,y) (рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y)).
USES graphabc ;
var i,j,x,y: integer ;
begin
setwindowsize(325,310); //размер экрана
setpenwidth(3); // толщина пера
for i:=1 to 100 do //количество воспроизведенных рисунков
begin
floodfill(5,5,rgb(97,202,248)); // закрашиваем небо
setpencolor(rgb(220,242,248)); //выбор цвета облака
// облако
arc(90,1,20,178,310);
arc(125,1,28,198,340);
arc(160,1,15,204,361);
floodfill(130,10,rgb(237,249,252));//закрашиваем облако
//рисование листа с выбор цвета и толщены кисти
setpencolor(rgb(0,0,0));
setpenwidth(1);
line(298,32,290,40);
lineto(285,40);
lineto(280,45);
lineto(284,47);
lineto(278,56);
lineto(283,58);
lineto(272,62);
lineto(287,59);
lineto(289,57);
lineto(292,56);
lineto(297,46);
lineto(290,40);
line(290,40,285,54);
floodfill(285,43,rgb(28,183,35));
//дорога с камнями и чёрточками
rectangle(0,220,326,310);
floodfill(285,230,rgb(224,185,137));
setpenwidth(3);
arc(90,249,10,5,180);
line(80,250,100,249);
floodfill(90,247,rgb(142,74,51));
arc(140,230,7,5,180);
line(134,231,147,230);
floodfill(140,228,rgb(142,74,51));
arc(250,239,12,5,180);
line(238,241,262,240);
floodfill(250,237,rgb(142,74,51));
for j:=0 to 18 do
begin
x:= random(315)+3;y:=random(92)+222;
line(x,y,x+random(9),y)
end;
// рисование собаки №1
setpenwidth(3);
setpencolor(rgb(131,40,24));
line(50,2,40,40);
lineto(50,90);
lineto(50,100);
lineto(40,120);
lineto(40,140);
lineto(20,170);
lineto(20,210);
lineto(30,220);
lineto(40,220);
lineto(50,210);
lineto(40,200);
lineto(40,180);
lineto(50,170);
lineto(50,200);
lineto(60,210);
lineto(70,210);
lineto(80,200);
lineto(70,190);
lineto(70,170);
lineto(100,150);
lineto(50,170);
lineto(100,150);
lineto(130,160);
lineto(160,160);
lineto(170,200);
lineto(170,210);
lineto(180,220);
lineto(200,210);
lineto(190,200);
lineto(190,150);
lineto(200,140);
lineto(200,190);
lineto(210,200);
lineto(200,210);
line(200,140,220,120);
lineto(230,70);
lineto(270,60);
lineto(270,30);
lineto(250,30);
lineto(240,10);
lineto(210,2);
lineto(190,10);
lineto(180,20);
lineto(180,50);
lineto(170,80);
lineto(140,90);
lineto(110,80);
lineto(90,80);
lineto(70,90);
lineto(60,80);
lineto(50,40);
lineto(50,2);
line(190,30,190,40);
lineto(200,60);
lineto(220,60);
lineto(210,30);
lineto(210,20);
line(230,20,240,30);
lineto(230,40);
lineto(220,30);
lineto(230,20);
line(260,30,260,40);
lineto(270,40);
setpencolor(rgb(249,69,60));
line(240,60,250,60);
lineto(270,50);
floodfill(190,100,rgb(225,121,17));
floodfill(60,180,rgb(243,173,103));
floodfill(195,180,rgb(243,173,103));
floodfill(230,30,rgb(116,243,250));
floodfill(265,35,rgb(0,0,0));
sleep(150);
clearwindow;
// рисование смещённых камней, облаков, листика и собаки №2
floodfill(5,5,rgb(97,202,248));
setpencolor(rgb(220,242,248));
arc(75,1,20,178,310);
arc(110,1,28,198,340);
arc(145,1,15,204,361);
floodfill(130,10,rgb(237,249,252));
setpencolor(rgb(0,0,0));
setpenwidth(1);
line(310,52,302,60);
lineto(297,60);
lineto(292,65);
lineto(296,67);
lineto(290,76);
lineto(295,78);
lineto(284,82);
lineto(299,79);
lineto(301,77);
lineto(304,76);
lineto(309,66);
lineto(302,60);
line(302,60,297,74);
floodfill(297,63,rgb(28,183,35));
rectangle(0,263,326,310);
floodfill(297,265,rgb(224,185,137));
setpenwidth(3);
arc(70,300,13,5,180);
line(60,301,80,300);
floodfill(70,298,rgb(142,74,51));
arc(120,282,8,5,180);
line(114,283,147,282);
floodfill(120,280,rgb(142,74,51));
arc(230,300,9,5,180);
line(218,302,262,301);
floodfill(230,299,rgb(142,74,51));
for j:=0 to 10 do
begin
x:= random(300)+13;y:=random(92)+265;
line(x,y,x+random(11),y)
end;
setpencolor(rgb(131,40,24));
line(10,2,10,40);
lineto(20,80);
lineto(50,110);
lineto(40,130);
lineto(40,140);
lineto(50,160);
lineto(50,180);
lineto(30,200);
lineto(30,230);
lineto(20,240);
lineto(30,250);
lineto(40,250);
lineto(60,240);
lineto(60,210);
lineto(65,200);
lineto(80,190);
lineto(90,180);
lineto(80,190);
lineto(80,220);
lineto(130,260);
lineto(140,260);
lineto(150,250);
lineto(140,240);
lineto(130,240);
lineto(110,220);
lineto(110,180);
lineto(140,190);
lineto(170,190);
lineto(180,190);
lineto(190,200);
lineto(200,210);
lineto(230,220);
lineto(270,250);
lineto(280,240);
lineto(280,230);
lineto(250,200);
lineto(220,190);
lineto(220,160);
lineto(240,150);
lineto(250,160);
lineto(230,130);
lineto(220,110);
line(250,160,260,150);
lineto(260,130);
lineto(250,90);
line(260,150,270,160);
lineto(280,160);
lineto(270,150);
line(280,160,290,160);
lineto(310,150);
lineto(310,140);
lineto(300,130);
lineto(300,140);
lineto(310,150);
line(300,130,290,120);
lineto(280,90);
lineto(270,80);
lineto(250,70);
lineto(240,70);
lineto(220,80);
lineto(210,100);
lineto(180,110);
lineto(140,110);
lineto(110,100);
lineto(60,100);
lineto(40,90);
lineto(20,60);
lineto(10,10);
line(170,190,170,210);
lineto(190,250);
lineto(210,260);
lineto(220,250);
lineto(200,230);
lineto(190,200);
line(270,100,260,110);
lineto(270,120);
lineto(280,110);
lineto(270,100);
setpencolor(rgb(249,69,60));
line(270,150,280,160);
floodfill(190,120,rgb(225,121,17));
floodfill(200,240,rgb(243,173,103));
floodfill(270,110,rgb(116,243,250));
floodfill(305,140,rgb(0,0,0));
sleep(150);
clearwindow;
// рисование смещённых камней, облаков, листика и собаки №3
floodfill(5,5,rgb(97,202,248));
setpencolor(rgb(220,242,248));
arc(55,0,18,178,315);
arc(90,0,24,198,347);
arc(125,0,11,204,361);
floodfill(100,5,rgb(237,249,252));
setpencolor(rgb(0,0,0));
setpenwidth(1);
line(310,62,302,70);
lineto(297,70);
lineto(292,75);
lineto(296,77);
lineto(290,86);
lineto(295,88);
lineto(284,92);
lineto(299,89);
lineto(301,87);
lineto(304,86);
lineto(309,76);
lineto(302,70);
line(302,70,297,84);
floodfill(297,73,rgb(28,183,35));
rectangle(0,243,326,310);
floodfill(297,265,rgb(224,185,137));
setpenwidth(3);
arc(50,300,13,5,180);
line(40,301,60,300);
floodfill(50,298,rgb(142,74,51));
arc(100,282,8,5,180);
line(94,283,127,282);
floodfill(100,280,rgb(142,74,51));
arc(210,300,9,5,180);
line(198,302,242,301);
floodfill(210,299,rgb(142,74,51));
for j:=0 to 20 do
begin
x:= random(300)+13;y:=random(92)+248;
line(x,y,x+random(11),y)
end;
setpencolor(rgb(131,40,24));
line(120,20,110,20);
lineto(80,30);
lineto(70,40);
lineto(60,80);
lineto(70,90);
lineto(50,100);
lineto(40,120);
lineto(40,140);
lineto(30,140);
lineto(20,160);
lineto(1,170);
lineto(10,180);
lineto(50,160);
lineto(60,160);
lineto(100,140);
lineto(120,150);
lineto(170,160);
lineto(190,160);
lineto(250,200);
lineto(260,200);
lineto(270,180);
lineto(260,180);
lineto(230,160);
lineto(220,120);
lineto(240,90);
lineto(270,90);
lineto(280,80);
lineto(290,60);
lineto(290,40);
lineto(270,40);
lineto(260,30);
lineto(240,20);
lineto(220,20);
lineto(210,30);
lineto(190,30);
lineto(160,40);
lineto(180,60);
lineto(200,60);
lineto(210,50);
lineto(190,80);
lineto(150,90);
lineto(110,80);
lineto(80,80);
lineto(70,70);
lineto(80,40);
lineto(120,20);
floodfill(190,120,rgb(225,121,17));
line(80,150,90,160);
lineto(90,190);
lineto(120,210);
lineto(140,200);
lineto(110,180);
lineto(120,160);
lineto(120,150);
line(190,160,190,170);
lineto(180,180);
lineto(170,170);
lineto(160,170);
lineto(150,180);
lineto(170,190);
lineto(180,190);
lineto(220,180);
line(250,40,240,50);
lineto(250,60);
lineto(260,50);
lineto(250,40);
line(290,50,280,40);
floodfill(110,160,rgb(243,173,103));
floodfill(190,180,rgb(243,173,103));
floodfill(250,50,rgb(116,243,250));
floodfill(285,42,rgb(0,0,0));
setpencolor(rgb(249,69,60));
line(280,80,250,80);
setpencolor(rgb(131,40,24));
sleep(150);
clearwindow;
// рисование смещённых камней, облаков, листика и собаки №4
floodfill(5,5,rgb(97,202,248));
setpencolor(rgb(220,242,248));
arc(15,1,20,178,310);
arc(50,1,28,198,340);
arc(85,1,15,204,361);
floodfill(70,10,rgb(237,249,252));
setpencolor(rgb(0,0,0));
setpenwidth(1);
line(310,52,302,60);
lineto(297,60);
lineto(292,65);
lineto(296,67);
lineto(290,76);
lineto(295,78);
lineto(284,82);
lineto(299,79);
lineto(301,77);
lineto(304,76);
lineto(309,66);
lineto(302,60);
line(302,60,297,74);
floodfill(297,63,rgb(28,183,35));
rectangle(0,233,326,310);
floodfill(297,265,rgb(224,185,137));
setpenwidth(3);
arc(20,300,13,5,180);
line(10,301,30,300);
floodfill(20,298,rgb(142,74,51));
arc(70,282,8,5,180);
line(64,283,97,282);
floodfill(70,280,rgb(142,74,51));
arc(170,300,9,5,180);
line(158,302,192,301);
floodfill(170,299,rgb(142,74,51));
for j:=0 to 17 do
begin
x:= random(300)+13;y:=random(92)+248;
line(x,y,x+random(19)+3,y)
end;
setpencolor(rgb(131,40,24));
line(80,30,70,50);
lineto(70,80);
lineto(80,120);
lineto(70,130);
lineto(60,150);
lineto(40,160);
lineto(30,160);
lineto(0,190);
lineto(10,200);
lineto(20,200);
lineto(40,180);
lineto(60,180);
lineto(80,160);
lineto(80,150);
lineto(90,140);
line(60,180,30,210);
lineto(30,220);
lineto(40,220);
lineto(80,200);
lineto(110,200);
lineto(130,180);
line(120,190,210,170);
lineto(220,180);
lineto(300,150);
lineto(310,140);
lineto(310,130);
lineto(300,130);
lineto(280,140);
lineto(270,140);
lineto(240,150);
lineto(270,130);
lineto(290,120);
lineto(290,110);
lineto(270,110);
lineto(250,120);
lineto(250,130);
lineto(240,150);
line(250,120,250,110);
lineto(240,100);
lineto(240,80);
lineto(250,70);
lineto(260,70);
lineto(280,60);
lineto(280,50);
lineto(260,60);
line(280,50,290,40);
lineto(290,30);
lineto(280,20);
lineto(260,20);
lineto(260,40);
lineto(250,30);
lineto(260,20);
lineto(250,10);
lineto(230,10);
lineto(200,20);
lineto(190,40);
lineto(190,60);
lineto(180,80);
lineto(170,70);
lineto(180,30);
lineto(200,20);
line(190,60,190,80);
lineto(170,100);
lineto(150,110);
lineto(120,110);
lineto(100,120);
lineto(90,110);
lineto(80,80);
lineto(80,30);
line(200,50,200,60);
lineto(210,80);
lineto(220,80);
lineto(230,60);
lineto(230,40);
lineto(220,30);
floodfill(255,30,rgb(116,243,250));
floodfill(230,30,rgb(225,121,17));
floodfill(270,120,rgb(243,173,103));
floodfill(180,50,rgb(225,121,17));
setpencolor(rgb(249,69,60));
line(260,60,280,50);
sleep(150);
clearwindow;
setpencolor(rgb(131,40,24));
end;
end.


Простая анимация на языке программирования PascalABC (830.25 KB)

