- •Листинги программ к статье и. М. Павловой "графика на паскале"
- •1. Создание рисунков с использованием прямой линии
- •1.1. Использование процедур MoveTo, LineTo
- •1.2. Использование процедуры Line
- •2. Создание рисунков с использованием прямоугольников
- •2.1. Использование процедур Rectangle, Bar
- •2.2. Создание рисунков с использованием процедур для работы с прямоугольниками и процедур для работы с текстом
- •3. Создание рисунков с использованием окружностей, эллипсов, дуг, секторов
- •3.1. Использование процедуры Circle
- •3.2. Использование процедур Ellipse, FillEllipse
- •3.3. Использование процедур PieSlice, FloodFill
- •3.4. Использование подпрограмм и процедур рисования окружностей, эллипсов, дуг, линий, закраски замкнутой фигуры
- •4. Организация движения
- •4.1. Стирание изображения и восстановление его в новом месте
- •4.2. Организация движения с использованием динамической памяти
3.4. Использование подпрограмм и процедур рисования окружностей, эллипсов, дуг, линий, закраски замкнутой фигуры
Задание 3.4.1. Нарисовать новогоднюю картину - елка, снеговик, падающий снег. Елка и снеговик (шары снега) создаются с использованием процедур пользователя. А вот падающий снег можно создать двумя способами: используя символ "*" или используя белые точки, задаваемые процедурой PutPixel. Гирлянды на елку развешиваем с использованием циклов, которые помещаем во внешний цикл, включающий также и создание снежинок. Такой прием позволяет имитировать мигание лампочек.
uses
graph, crt;
var
gd, gm, err, snowx, snowy, t, j: integer;
cv, i: word;
zvezda: char;
procedure ball(x, y, r, cvet: integer);
begin
setfillstyle(1,cvet);
pieslice(x, y, 0, 360, r);
end;
procedure elka(x1, y1, x2, y2, x3, y3: integer);
begin
line(x1, y1, x2, y2);
line(x1, y1, x3, y3);
line(x3, y3, x2, y2);
floodfill(120, y3+2, green);
end;
begin
gd:=vga;
gm:=vgahi;
initgraph(gd, gm, 'd:\bp\bgi');
err:=graphresult;
if err<>grok then
begin
writeln('Ошибка открытия графики');
halt(1)
end;
randomize;
setcolor(lightcyan);
ball(320, 280, 60, lightcyan); {Снеговик}
ball(320, 180, 40, lightcyan);
ball(320, 110, 30, lightcyan);
ball(375, 170, 15, lightcyan);
ball(265, 170, 15, lightcyan);
setcolor(1); {Глаза}
ball(310, 100, 5, 1);
ball(330, 100, 5, 1);
setcolor(magenta);
arc(320, 118, 220, 320, 13); {Улыбка}
setcolor(red);
line(321, 113, 324, 119); {Нос-морковка}
line(321, 113, 310, 123);
line(310, 123, 324, 119);
setfillstyle(1, red);
floodfill(321, 114, red);
setcolor(yellow); {Шляпа-ведро}
line(320, 60, 308, 82);
line(320, 60, 335, 60);
line(335, 60, 340, 88);
arc(320, 110, 50, 110, 30);
setfillstyle(1, yellow);
floodfill(320, 65, yellow);
setcolor(brown); {Метла}
setfillstyle(1, brown);
bar(374, 340, 378, 130);
for t:=1 to 45 do
begin
if t mod 2 <>0 then line(376, 131, 398-t+1, 100)
end;
bar(110, 301, 130, 320); {Елка}
setcolor(green);
setfillstyle(1, green);
elka(60, 300, 180, 300, 120, 250);
elka(70, 250, 170, 250, 120, 210);
elka(90, 210, 150, 210, 120, 170);
elka(100, 170, 140, 170, 120, 140);
randomize;
zvezda:='*';
setcolor(lightgray);
for t:=1 to 500 do
begin
for j:=1 to 5 do
begin {Снег}
snowx:=random(640);
snowy:=random(480);
delay(150);
setcolor(15);
outtextxy(snowx, snowy, zvezda)
end;
cv:=random(15)+1; {Гирлянды}
setcolor(cv);
setfillstyle(1, cv);
for i:=1 to 4 do pieslice(102+i*6, 165-i*2, 0, 360, 2);
cv:=random(15)+1;
setcolor(cv);
setfillstyle(1, cv);
for i:=1 to 7 do pieslice(100+i*6, 190+i*2, 0, 360, 2);
cv:=random(15)+1;
setcolor(cv);
setfillstyle(1, cv);
for i:=1 to 11 do pieslice(72+i*6, 250-i*2, 0, 360, 2);
cv:=random(15)+1;
setcolor(cv);
setfillstyle(1, cv);
for i:=1 to 13 do pieslice(93+i*6, 270+i*2, 0, 360, 2);
delay(700)
end;
readln;
closegraph;
end.
