- •Листинги программ к статье и. М. Павловой "графика на паскале"
- •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. Организация движения с использованием динамической памяти
2.2. Создание рисунков с использованием процедур для работы с прямоугольниками и процедур для работы с текстом
Задание 2.2.1. Нарисовать шахматную доску. Для создания шахматного поля по результатам проверки четности суммы индексов клеток по горизонтали и по вертикали закрашиваем клетки так, чтобы верхняя левая клетка была светлой, а остальные размещались с чередованием светлых с более темными. Затем для каждой клетки рисуем с помощью процедуры Rectangle контур контрастного цвета, что на всей доске создаст разграничительные вертикальные и горизонтальные линии. Сверху клетки подписываются восьмью латинскими буквами. Так как буквы имеют последовательные кодовые номера в таблице, то для получения букв по этим кодам можно использовать в цикле функцию chr(64 + i), где i принимает значения от 1 до 8. Для получения вертикального ряда чисел используем другой прием: параметр цикла преобразуется из числового значения в строковое с помощью функции str(i, sd).
uses
graph, crt;
const
k=50; {Размер клетки}
x=12;
y=12;
var
err, gd, gm, i, j: integer;
sd: string;
begin
gd:=vga;
gm:=vgahi;
initgraph(gd, gm, 'd:\bp\bgi');
err:=graphresult;
if err<>grok then
begin
writeln('Ошибка открытия графики');
halt(1)
end;
setcolor(11);
for i:=1 to 8 do
begin
for j:=1 to 8 do
begin
if (i+j) mod 2=0
then
setfillstyle(1, 13)
else
setfillstyle(1, 12);
bar(x+k*(i-1), y+k*j, x+k*i, y+k*(j+1));
setcolor(3);
rectangle(x+k*(i-1), y+k*j, x+k*i, y+k*(j+1))
end;
end;
for i:=1 to 8 do
begin
outtextxy(x+k-20, y+35, chr(64+i)); {Буквы}
k:=k+50
end;
x:=12;
y:=12;
k:=0;
for i:=1 to 8 do
begin
str(i, sd);
outtextxy(x-10, y+k+70, sd); {Цифры}
k:=k+50
end;
readln;
closegraph;
end.
3. Создание рисунков с использованием окружностей, эллипсов, дуг, секторов
3.1. Использование процедуры Circle
Задание 3.1.1. Нарисовать в цикле семейство окружностей, расположенных как на олимпийской эмблеме. Раскрасим окружности в разные цвета, так как в цикле подобрать цвета в определенной последовательности сложно.
uses
graph, crt;
var
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;
randomize;
for i:=1 to 3 do
begin
setcolor(random(15)+1); {Чтобы исключить появление}
circle(135+(i-1)*180, 180, 100) {черного цвета, прибавляем 1}
end;
for i:=1 to 2 do
begin
setcolor(random(15)+1);
circle(225+(i-1)*180, 290, 100)
end;
readln;
closegraph;
end.
Задание 3.1.2. Нарисовать гроздь винограда. С клавиатуры задается число рядов ягод и их радиус.
uses
graph, crt;
const
y=50; {Начальные координаты по оси у}
x=50; {и по оси х}
var
n, m, r, err, gd, gm, i, j: integer;
begin
writeln('Введите число рядов с ягодами и радиус ягоды:');
readln(n, r);
gd:=vga;
gm:=vgahi;
initgraph(gd, gm, 'd:\bp\bgi');
err:=graphresult;
if err<>grok then
begin
writeln('Ошибка открытия графики');
halt(1)
end;
m:=n; {m - количество ягод в ряду}
for j:=1 to n do
begin
y:= y+2*r; {переход к следующему ряду ягод}
for i:=1 to m do
circle(x+i*2*r+2, y, r); {"+2" - чтобы ягоды в ряду}
{не соприкасались}
x:=x+r+1; {смещение ягоды в новом ряду вправо}
m:= m-1
end;
readln;
closegraph;
end.
