Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
listing_2003_7.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
233.98 Кб
Скачать

4. Организация движения

4.1. Стирание изображения и восстановление его в новом месте

Задание 4.1.1. Нарисовать цветик-семицветик, у которого поочередно после нажатия клавиши улетает лепесток (исчезает с экрана).

uses

crt, graph;

var

err, gd, gm: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

setcolor(1); {1-й лепесток}

setfillstyle(1, 1);

pieslice (300, 300, 0, 360, 30);

setcolor(2); {2-й лепесток}

setfillstyle(1, 2);

pieslice (240, 330, 0, 360, 30);

setcolor(3); {3-й лепесток}

setfillstyle(1, 3);

pieslice (370, 330, 0, 360, 30);

setcolor(4); {4-й лепесток}

setfillstyle(1, 4);

pieslice (240, 260, 0, 360, 30);

setcolor(5); {5-й лепесток}

setfillstyle(1, 5);

pieslice (360, 260, 0, 360, 30);

setcolor(6); {6-й лепесток}

setfillstyle(1, 6);

pieslice (300, 230, 30);

setcolor(7); {7-й лепесток}

setfillstyle(1, 7);

pieslice(300, 370, 0, 360, 30);

readln; {Убираем лепестки при нажатии клавиши}

setcolor(black);

setfillstyle(1, black);

pieslice(300, 370, 0, 360, 30); {-7}

readln;

pieslice (300, 230, 0, 360, 30); {-6}

readln;

pieslice(360, 260, 0, 360, 30); {-5}

readln;

pieslice(240, 260, 0, 360, 30); {-4}

readln;

pieslice(370, 330, 0, 360, 30); {-3}

readln;

pieslice(220, 320, 0, 360, 30); {-2}

readln;

pieslice(300, 300, 0, 360, 30); {-1}

readln;

closegraph;

end.

Задание 4.1.2. Проиллюстрировать биологический цикл жизни дерева: дерево зеленеет и растет, потом желтеет и увядает (уменьшается в размере). Так как дерево вначале растет, то центр эллипса сдвигается вверх, иначе крона будет расти и в сторону земли. После достижения деревом его максимального размера вся крона закрашивается цветом фона, и начинают уменьшаться размеры эллипса, поменявшего цвет на желтый. После завершения цикла крону дерева рисуем еще раз.

uses

graph, crt;

const

x=215;

rx=30;

ry=50;

var

err, gd, gm, i: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

setcolor(brown); {Ствол дерева}

setfillstyle(1, brown);

bar(210, 430, 220, 350);

for i:=330 downto 280 do

begin {Дерево растет и зеленеет}

setcolor(green);

setfillstyle(1, green);

ry:=ry+1;

rx:=rx+1;

fillellipse(x, i, rx, ry);

delay(4000)

end;

setcolor(0); {Закрашиваем цветом фона}

setfillstyle(1, black);

fillellipse(x, i, rx, ry);

delay(2000);

for i:=280 to 330 do

begin {Дерево желтеет, и уменьшается крона}

setcolor(yellow);

setfillstyle(1, yellow);

ry:=ry-1;

rx:=rx-1;

fillellipse(x, i, rx, ry);

delay(4000);

setcolor(0);

setfillstyle(1, black);

fillellipse(x, i, rx, ry);

delay(2000)

end;

setcolor(yellow);

setfillstyle(1, yellow);

fillellipse(x, i, rx, ry);

readln;

closegraph;

end.

Задание 4.1.3. Организовать горизонтальное движение шарика внутри прямоугольника. Шарик движется до правой границы прямоугольника, отталкивается от нее, движется влево, отталкивается от левой границы прямоугольника и т. д., пока не будет нажата клавиша. В программе используется переменная n, которая позволяет увеличивать значения координаты шарика по оси х на 2 единицы для движения слева направо или уменьшать на 2 единицы при движении в обратную сторону. Условный оператор if x>=540-2-r then ... проверяет, достиг ли центр шарика предельного значения, когда контур шарика пересечет контур прямоугольника. Вычитание числа 2 позволяет добиться эффекта соприкосновения двух объектов, но не их пересечения.

uses

graph, crt;

const

r=20;

n=2;

var

x, y, err, gd, gm, i: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

rectangle(100, 80, 540, 400); {Прямоугольник}

y:=getmaxy div 2;

x:=100+r; {Начальная точка движения шара по оси х}

repeat

x:=x+n; {Текущая координата центра шарика}

if x>=540-2-r then n:=-2;

if x<=100+2+r then n:=2;

setcolor(4);

setfillstyle(1, 4);

pieslice(x, y, 0, 360, r);

delay(500);

setcolor(0);

setfillstyle(1, 0);

pieslice(x, y, 0, 360, r);

delay(500)

until keypressed;

readln;

closegraph;

end.

Движение шарика по вертикали организуется аналогичным образом. Ниже приводится фрагмент программы, непосредственно осуществляющий перемещение шарика.

repeat

y:=y+n;

if y>=400-2-r then n:=-2;

if y<=80+2+r then n:=2;

setcolor(4);

setfillstyle(1, 4);

pieslice(x, y, 0, 360, r);

delay(500);

setcolor(0);

setfillstyle(1, 0);

pieslice(x, y, 0, 360, r);

delay(500)

until keypressed;

Задание 4.1.4. Организовать зигзагообразное движение мячика внутри некой трубы слева направо. В программе используются следующие переменные: n - число ударов по верхнему и нижнему краям трубы, i - параметр цикла для организации движения мячика сверху вниз, t - параметр цикла для организации движения мячика снизу вверх.

uses

graph, crt;

var

err, gd, gm, i, n, t: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

setcolor(10);

line(0, 45, 640, 45); {Труба}

line(0, 435, 640, 435);

repeat

for n:=0 to 4 do

begin

for i:=0 to 80 do

begin

setcolor(0);

circle(160*n+i-1, 80+4*i-4, 30);

setcolor(10);

circle(160*n+i, 80+4*i, 30);

delay(1000);

if keypressed then halt(1)

end;

for t:=1 to 80 do

begin

setcolor(0);

circle(160*n+80+t-1, 400-4*t+4, 30);

setcolor(10);

circle(160*n+80+t, 400-4*t, 30);

delay(1000);

if keypressed then halt(1)

end

end

until keypressed;

readln;

closegraph;

end.

Задание 4.1.5. Смоделировать скачки мяча, брошенного на поверхность: мяч совершает несколько движений с максимальной амплитудой, затем амплитуда уменьшается, и мяч постепенно останавливается. Чтобы изменения амплитуды движения мяча были лучше заметны, смоделируем процесс в некоторой трубе.

uses

graph, crt;

const

x=40;

r=10;

t=0;

a=0.2;

var

y, err, gd, gm: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln(Ошибка открытия графики');

halt(1)

end;

line(0, 180, 640, 180);

line(0, 402, 640, 402);

repeat

setcolor(11);

y:=290+trunc(a*t)-trunc((100-(a*t))*cos(t*pi/15));

if 100-trunc(a*t)<>0 then

begin

inc(t);

circle(trunc(x+1.15*t), y, r);

delay(1000);

setcolor(0);

circle(trunc(x+1.15*t), y, r);

delay(1000)

end

until keypressed;

readln;

closegraph;

end.

Задание 4.1.6. Смоделировать движение шара на бильярдном столе, когда шар поочередно отскакивает от стенок стола. Задача решается аналогично задаче 4.1.3. Отличие в том, что после удара о стенку шар продолжает движение не в противоположную сторону, а под прямым углом. В программе используются переменные nx и ny для координации направления движения шара по осям х и у с учетом размера бильярдного стола.

uses

graph, crt;

const

r=20;

nx=2;

ny=-2;

var

nfs, x, y, err, gd, gm, i, k: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

rectangle(100, 80, 540, 400);

y:=(400-80) div 2;

x:=100+r;

repeat

x:=x+nx;

y:=y+ny;

if y<=80+2+r then ny:=2;

if y>=400-2-r then ny:=-2;

if x>=540-r-2 then nx:=-2;

if x<=100+r+2 then nx:=2;

setcolor(4);

setfillstyle(1, 4);

pieslice(x, y, 0, 360, r);

delay(500);

setcolor(0);

setfillstyle(1, 0);

pieslice(x, y, 0, 360, r);

delay(500)

until keypressed;

readln;

closegraph;

end.

Задание 4.1.7. Написать программу, в которой Колобок (шарик) поднимается по ступенькам вверх, движется по площадке, падает вниз, разделяется на два новых колобка, которые начинают движение в разные стороны.

uses

graph, crt;

const

x=60;

y=400;

var

x1, x2, y1, err, gd, gm, i, j: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

for i:=1 to 5 do

begin {Лестница}

setcolor(15);

line(x, y, x, y-40);

line(x, y-40, x+40, y-40);

x:=x+40;

y:=y-40

end;

x:=60;

y:=400;

for I:=1 to 5 do

begin {Движение по лестнице}

for j:=1 to 40 do

begin

setcolor(15); {Колобок поднимается вверх}

circle(x-12, y-12-j, 10);

delay(1000);

setcolor(0);

circle(x-12, y-12-j, 10);

delay(1000)

end;

y1:=y-j;

for j:=1 to 40 do

begin

setcolor(15); {Колобок перемещается вправо}

circle(x-12+j, y1-12, 10);

delay(1000);

setcolor(0);

circle(x-12+j, y1-12, 10);

delay(1000)

end;

x:=x+40;

y:=y-40

end;

x:=x+14;

y:=y1-12;

setcolor(15); {Колобок на верхней площадке}

circle(x, y, 10);

delay(2000);

for i:=0 to 210 do

begin

setcolor(15); {Падение вниз}

circle(x, y+i, 10);

delay(1000);

setcolor(0);

circle(x, y+i, 10);

delay(1000)

end;

y:=y+i;

x1:=x-10;

x2:=x+10;

for i:=1 to 150 do

begin

setcolor(15); {Колобок 1 движется влево}

circle(x1-i, y, 5);

circle(x2+i, y, 5);

delay(1000);

setcolor(0); {Колобок 2 движется вправо}

circle(x1-i, y, 5);

circle(x2+i, y, 5);

delay(1000)

end;

setcolor(15); {Последний кадр}

circle(x1-i, y, 5); {и два новых колобка}

circle(x2+i, y, 5);

delay(2000);

readln;

closegraph;

end.

Задание 4.1.8. Нарисовать циркового клоуна, у которого из стороны в сторону движутся глаза. В программе используются переменные n и n1 для контроля направления движения зрачков левого и правого глаза.

uses

graph, crt;

const

d=1000;

r=10;

var

x, y, y1, x1, x2, n, n1, err, gd, gm, i, k: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

x:=getmaxx div 2;

y:=getmaxy div 2;

setbkcolor(8); {Фон}

pieslice(x, y, 0, 360, 150); {Голова клоуна}

setcolor(4); {Красный нос}

setfillstyle(1, 4);

pieslice(x, y, 0, 360, 30);

arc(x,y+40,250,340,80); {Улыбка}

ellipse(x-35, y+110, 270, 0, 10, 10);

ellipse(x+75, y+58, 200, 340, 10, 10);

setcolor(1);

arc(x, y, 0, 360, 150); {Синий контур вокруг головы}

moveto(x-60, y-136); {Колпак}

lineto(x, y-200);

lineto(x+60, y-136);

setfillstyle(4, 1);

floodfill(x, y-180, 1);

moveto(x-130, y+80); {Воротник}

lineto(x-250, y+170);

lineto(x-100, y+150);

lineto(x-30, y+200);

lineto(x, y+160);

lineto(x+30, y+200);

lineto(x+100, y+150);

lineto(x+250, y+170);

lineto(x+128, y+80);

setfillstyle(4, 1);

floodfill(x, y+155, 1);

setcolor(0); {Глаза}

ellipse(x-50, y-70, 0, 360, 45, 25);

ellipse(x+50, y-70, 0, 360, 45, 25);

y1:=y-70;

x1:=r+(x-80);

x2:=r+(x+20);

nfs:=1;

nfs1:=1;

repeat

x1:=x1+n;

x2:=x2+n1;

if x1>=(x-20)-st-r then n:=-1;

if x1<=(x-80)+st+r then n:=1;

if x2>=(x+80)-st-r then n1:=-1;

if x2<=(x+20)+st+r then n1:=1;

setcolor(0); {Левый глаз}

circle(x1, y1, r);

setcolor(1);

pieslice(x1, y1, 0, 360, 5);

circle(x2, y1, r); {Правый глаз}

setcolor(1);

pieslice(x2, y1, 0, 360, 5);

delay(d);

setcolor(15); {Зрачки}

circle(x1, y1, r);

circle(x1, y1, 5);

circle(x2, y1, r);

circle(x2, y1, 5)

until keypressed;

readln;

closegraph;

end.

Задание 4.1.9. Нарисовать Царь-рыбу, мимо которой проплывают образующиеся пузырьки воздуха разного размера.

uses

graph, crt;

const

st=0.1;

var

x, y, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5: integer;

x6, y6, x7, y7, x8, y8, x9, y9, x10, y10: integer;

err, gd, gm, i, j: integer;

r, r1, r2, r3, r4, r5: integer;

i1, i2, i3, i4, i5: real;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики");

halt(1)

end;

ellipse(190, 240, 140, 185, 100, 70); {Голова рыбы}

line(90, 245, 130, 255);

line(130, 255, 112, 284);

ellipse(190, 240, 220, 270, 100, 70);

line(190, 310, 190, 170);

circle(130, 190, 20);

ellipse(190, 240, 90, 115, 100, 70);

setfillstyle(1, 4); {Красный зрачок}

circle(130, 190, 10);

floodfill(130, 190, 15);

setfillstyle(8, 2); {Туловище}

ellipse(190, 240, 270, 90, 270, 70);

floodfill(200, 240, 15);

line(450, 220, 520, 170); {Хвост}

line(450, 260, 520, 310);

ellipse(520, 240, 90, 270, 10, 70);

line(457, 230, 500, 210);

line(460, 240, 495, 240);

line(457, 250, 500, 270);

line(240, 170, 330, 110); {Верхний плавник}

arc(390, 190, 120, 171, 100);

line(200, 300, 210, 350); {Нижний плавник}

line(210, 350, 250, 355);

line(250, 355, 220, 300);

line(420, 270, 440, 290); {Второй нижний плавник}

line(440, 290, 420, 295);

line(420, 295, 410, 270);

setfillstyle(1, 1); {Фон - море}

floodfill(0, 1, 15);

setfillstyle(4, 8); {Штриховка}

floodfill(120, 240, 15); {головы}

setfillstyle(11, 8); {нижнего плавника}

floodfill(215, 315, 15);

setfillstyle(11, 8); {второго нижнего плавника}

floodfill(425, 285, 15);

setfillstyle(11, 8); {хвоста}

floodfill(455, 220, 15);

setfillstyle(11, 8); {верхнего плавника}

floodfill(255, 170, 15);

setfillstyle(2, 9); {радужной оболочки глаза}

floodfill(135, 205, 15);

r1:=random(10); {Определяем размер пузырьков}

r2:=random(10);

r3:=random(10);

r4:=random(10);

r5:=random(10);

x1:=72; y1:=260; {Координаты пузырьков}

x2:=65; y2:=230;

x3:=59; y3:=190;

x4:=40; y4:=210;

x5:=30; y5:=180;

i1:=pi/4;

i2:=pi/4;

i3:=pi/4;

i4:=pi/4;

i5:=pi/4;

while not keypressed do

begin

x6:=x1; y6:=y1-round(i1);

x7:=x2; y7:=y2-round(i2);

x8:=x3; y8:=y8-round(i3);

x9:=x4; y9:=y4-round(i4);

x10:=x5; y10:=y5-round(i5);

if y6+r1+9<0 then

begin

i1:=pi/4;

r1:=random(10)

end;

if y7+r2+9<0 then

begin

i2:=pi/4;

r2:=random(10)

end;

if y8+31+9<0 then

begin

i3:=pi/4;

r3:=random(10)

end;

if y9+r4+9<0 then

begin

i4:=pi/4;

r4:=random(10)

end;

if y10+r5+9<0 then

begin

i5:=pi/4;

r1:=random(10)

end;

setcolor(15);

setfillstyle(10, 4);

pieslice(x6, y6, 0, 360, r1);

pieslice(x7, y7, 0, 360, r2);

pieslice(x8, y8, 0, 360, r3);

pieslice(x9, y9, 0, 360, r4);

pieslice(x10, y10, 0, 360, r5);

delay(100);

setcolor(blue);

setfillstyle(1, blue);

pieslice(x6, y6, 0, 360, r1);

pieslice(x7, y7, 0, 360, r2);

pieslice(x8, y8, 0, 360, r3);

pieslice(x9, y9, 0, 360, r4);

pieslice(x10, y10, 0, 360, r5);

i1:=i1+st;

i2:=i2+st;

i3:=i3+st;

i4:=i4+st;

i5:=i5+st

end;

readln;

closegraph;

end.

Задание 4.1.10. Нарисовать идущего человечка из детской считалочки "Палка, палка, огуречик...", только туловище тоже будет палочкой (линией). При составлении программы может быть использована процедура пользователя.

uses

graph, crt;

const

k=0;

b=0;

c=0;

r=10;

var

err, gd, gm, i: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

line(0,241,640,241); repeat

for i:=1 to 40 do

begin

setcolor(15);

line(120+k+i+b, 200+c, 120+k+i+b, 160+c); {Туловище}

circle(120+k+i+b, 150+c, r); {Голова}

line(120+k+i+b, 180+c, 100+2*i+k+b, 195+c); {Правая рука}

line(100+i+k+b+i, 195+c, 110+2*i+k+b, 200+c);

line(120+i+k+b, 180+c, 140+k+b, 195+c); {Левая рука}

line(140+k+b, 195+c, 150+k+b, 190+c);

line(120+k+i+b, 200+c, 100+2*i+k+b, 240+c); {Ноги}

line(120+i+k+b, 200+c, 140+k+b, 240+c);

delay(1000);

setcolor(0);

line(120+k+i+b, 200+c, 120+k+i+b, 160+c);

circle(120+k+i+b, 150+c, r);

line(120+k+i+b, 180+c, 100+2*i+k+b, 195+c);

line(100+i+k+b+i, 195+c, 110+2*i+k+b, 200+c);

line(120+i+k+b, 180+c, 140+k+b, 195+c);

line(140+k+b, 195+c, 150+k+b, 190+c);

line(120+k+i+b, 200+c, 100+2*i+k+b, 240+c);

line(120+i+k+b, 200+c, 140+k+b, 240+c);

delay(1000)

end;

b:=b+40

until keypressed;

readln;

closegraph;

end.

Задание 4.1.11. Написать программу, имитирующую движение маленького шара по поверхности большого шара. Для обозначения радиусов маленького и большого шаров в программе используются переменные r и r1. Программа легко видоизменяется для решения задачи о движении одной планеты по эллиптической орбите другой.

uses

graph, crt;

const

r=100;

r1=10;

i=pi/4;

var

x, y, err, gd, gm, j: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

setcolor(2);

circle(320, 240, r);

while not keypressed do

begin

x:=320+round((r+r1+1.5)*cos(i));

y:=240+round((r+r1+1.5)*sin(i));

setcolor(4);

circle(x, y, r1);

delay(1000);

setcolor(0);

circle(x, y, r1);

i:=i+0.1

end;

readln;

closegraph;

end.

Задание 4.1.12. Написать программу, имитирующую движение по кругу около солнца его лучей. Один конец луча касается солнца, второй конец лежит на некоторой внешней окружности, определяемой радиусом r1. Число лучей и их длина устанавливаются пользователем в программе.

uses

graph, crt;

const

r=70; {радиус солнца}

r1=130; {радиус внешней окружности}

i=pi/4;

var

x, x1, y1, y, err, gd, gm, j: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

setcolor(yellow);

setfillstyle(1, yellow);

pieslice(320, 240, 0, 360, r-2); {солнце}

while not keypressed do

begin

setcolor(yellow);

for j:=1 to 26 do

begin {рисуются лучи}

setcolor(yellow);

x:=320+round(r*cos((j-1)+i));

y:=240-round(r*sin((j-1)+i));

x1:=320+round(r1*cos((j-1)+i));

y1:=240-round(r1*sin((j-1)+i));

line(x, y, x1, y1)

end;

delay(1000);

setcolor(0);

for j:=1 to 26 do

begin

setcolor(0);

x:=320+round(r*cos((j-1)+i));

y:=240-round(r*sin((j-1)+i));

x1:=320+round(r1*cos((j-1)+i));

y1:=240-round(r1*sin((j-1)+i));

line(x, y, x1, y1)

end;

delay(1000);

i:=i+0.01

end;

readln;

closegraph;

end.

Задание 4.1.13. Создать "виртуальный" вращающийся бублик. Рисуется некоторое количество окружностей, радиусы которых лежат на невидимой окружности большого диаметра. Объемный эффект бублика создается за счет того, что изображения окружностей закрашиваются цветом фона, а затем накладываются друг на друга с некоторым смещением.

uses

graph, crt;

const

r=70;

r1=20; {радиус маленькой окружности}

i=pi/4;

var

x, x1, y1, y, err, gd, gm, j: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

setcolor(2);

circle(320, 240, r);

while not keypressed do

begin

setcolor(2);

for j:=1 to 50 do

begin

x:=320+round((r+1.5)*cos((j-1)*7.2+i));

y:=240+round((r+1.5)*sin((j-1)*7.2+i));

setcolor(4);

circle(x, y, r1)

end;

delay(1000);

setcolor(0);

for j:=1 to 50 do

begin

x:=320+round((r+1.5)*cos((j-1)*7.2+i));

y:=240+round((r+1.5)*sin((j-1)*7.2+i));

circle(x, y, r1)

end;

i:=i+0.01

end;

readln;

closegraph;

end.

Задание 4.1.14. Нарисовать тучу, закрывающую солнце. Когда туча наполовину закрывает солнце, начинается дождь.

uses

graph, crt;

const

x1=160;

y1=270;

x2=480;

y2=214;

var

err, gd, gm, i: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

setcolor(yellow);

setfillstyle(1, yellow);

pieslice(400, 100, 0, 360, 20); {Солнце}

for i:=500 downto 300 do

begin

setcolor(7);

setfillstyle(1, 7);

fillellipse(i-10, 100, 30, 20); {Облако}

fillellipse(i-35, 105, 25, 15);

fillellipse(i+13, 105, 25, 15);

if i <450 then

begin {Дождик}

setlinestyle(2, 0, 1);

line(i+10, 125, i-10, 325);

line(i, 125, i-20, 325);

line(i-10, 125, i-30, 325);

line(i-20, 125, i-40, 325);

line(i-30, 125, i-50, 325)

end;

delay(1000);

setcolor(0);

setfillstyle(1, 0);

fillellipse(i-10, 100, 30, 20);

fillellipse(i-35, 105, 25, 15);

fillellipse(i+13, 105, 25, 15);

if i <450 then

begin

line(i+10, 125, i-10, 325);

line(i, 125, i-20, 325);

line(i-10, 125, i-30, 325);

line(i-20, 125, i-40, 325);

line(i-30, 125, i-50, 325)

end;

delay(1000)

end;

readln;

closegraph;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]