- •Листинги программ к статье и. М. Павловой "графика на паскале"
- •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. Организация движения с использованием динамической памяти
4.2. Организация движения с использованием динамической памяти
Задание 4.2.1. Нарисовать телевизор, транслирующий программу передач о животном мире. Выпуск посвящен рыбам, и поэтому по экрану телевизора перемещается небольшая рыбка. Зрителю видно, что она сначала движется слева направо, затем в обратную сторону, при этом меняются горизонтальные уровни перемещения (рыбка плывет то вдоль верхнего края экрана, то посередине, то вдоль нижнего края экрана). Сначала в верхнем левом углу рисуется рыбка и ее зеркальное отражение относительно вертикали. Затем изображения помещаются в разделы памяти, откуда потом извлекаются и размещаются в разных точках экрана, определяемых координатами х и у.
uses
graph, crt;
const
y=150;
x=150;
var
err, gd, gm: integer;
p, p1:pointer;
begin
gd:=vga;
gm:=vgahi;
initgraph(gd, gm, 'd:\bp\bgi');
err:=graphresult;
if err<>grok then
begin
writeln('Ошибка открытия графики');
halt(1)
end;
randomize;
ellipse(50, 35, 0, 360, 20, 7); {Рыба1}
arc(50, 35, 320, 30, 10);
line(30, 33, 20, 25);
line(30, 37, 20, 45);
line(20, 45, 20, 25);
circle(65, 35, 1);
setfillstyle(1, 13);
floodfill(23, 40, 15);
setfillstyle(1, 12);
floodfill(50, 35, 15);
setfillstyle(1, 0);
getmem(p, 1800);
getimage(15, 20, 75, 50, p^);
ellipse(150, 35, 0, 360, 20, 7); {Зеркальное отражение рыбы1}
arc(130, 35, 330, 40, 10);
line(170, 33, 180, 25);
line(170, 37, 180, 45);
line(180, 45, 180, 25);
circle(135, 35, 1);
setfillstyle(1, 13);
floodfill(175, 35, 15);
setfillstyle(1, 12);
floodfill(150, 35, 15);
setfillstyle(1, 0);
getmem(p1, 1800);
getimage(126, 22, 183, 47, p1^);
cleardevice;
bar3d(150, 150, 370, 290, 30, topon); {Телевизор}
line(270, 135, 200, 100); {Антенна}
line(270, 135, 340, 100);
circle(200, 100, 3);
circle(340, 100, 3);
repeat
while x<300 do
begin
x:=x+2;
setfillstyle(1, 11);
floodfill(369, 169, 15);
putimage(x, y, p^, xorput);
delay(450);
putimage(x, y, p^, xorput)
end;
while x>150 do
begin
x:=x-2;
setfillstyle(1, 11);
floodfill(369, 169, 15);
putimage(x, y, p1^, xorput);
delay(450);
putimage(x, y, p1^, xorput)
end;
x:=150;
y:=150+random(100)
until keypressed;
readln;
closegraph;
end.
