Нарисовать рисунок. Сделать масштабирование и перемещение рисунка - Turbo Pascal
Формулировка задачи:
Нарисовать рисунок в турбо паскаль. И нужно сделать масштабирование и перемещение рисунка
Решение задачи: «Нарисовать рисунок. Сделать масштабирование и перемещение рисунка»
textual
Листинг программы
uses graph,crt; procedure ris(x,y,a,c:integer); var r:integer; begin r:=a div 2; setlinestyle(0,0,3); setcolor(c); rectangle(x-a,y-a,x+a,y+a); line(x+a,y-a,x-a,y+a); circle(x+a,y-a-r,r); circle(x-a,y+a+r,r); line(x-a,y-a,x+a-r,y-a-r); line(x+a,y+a,x-a+r,y+a+r); end; var x,y,a,d:integer; k:char; begin x:=0; initgraph(x,y,''); x:=getmaxX div 2; y:=getmaxY div 2; a:=30; setbkcolor(15); setcolor(1); outtextXY(80,20,'Dvizenie - Strelki, uvelichenie + , umenshenie - ,Exit - Esc'); ris(x,y,a,8); repeat if keypressed then begin k:=readkey; if k=#0 then k:=readkey; case k of #80:begin delay(100); ris(x,y,a,0); if y>getmaxY-2*a-10 then d:=0 else d:=10; y:=y+d; ris(x,y,a,8); end; #72:begin delay(100); ris(x,y,a,0); if y<40+2*a then d:=0 else d:=10; y:=y-d; ris(x,y,a,8); end; #77:begin delay(100); ris(x,y,a,0); if x>getmaxX-2*a then d:=0 else d:=10; x:=x+d; ris(x,y,a,8); end; #75:begin delay(100); ris(x,y,a,0); if x<2*a then d:=0 else d:=10; x:=x-d; ris(x,y,a,8); end; #43:begin ris(x,y,a,0); a:=round(a*1.1); ris(x,y,a,8); end; #45:begin ris(x,y,a,0); a:=round(a*0.9); ris(x,y,a,8); end; #27:exit; end; end; until k=#27; end.
Объяснение кода листинга программы
- В начале программы подключаются необходимые библиотеки graph и crt.
- Создается процедура ris, которая принимает на вход координаты x, y, а также параметр a, отвечающий за размер рисуемого объекта.
- Внутри процедуры задаются значения переменных r, x, y, a. Переменная r инициализируется как половина значения переменной a. Переменные x и y инициализируются как половина максимальных координат по оси X и Y соответственно. Переменная a инициализируется значением 30.
- Вызывается функция initgraph для настройки графического окна.
- Рисуется прямоугольник с помощью функции rectangle.
- Рисуются две окружности с помощью функций circle.
- Выводятся две прямые линии, соединяющие центры окружностей.
- Задается цикл, который будет выполняться до тех пор, пока нажата клавиша с кодом #27.
- Внутри цикла считывается символ клавиши с помощью функции readkey.
- Проверяется, был ли считан символ #27. Если да, то цикл завершается.
- Если была нажата клавиша с кодом #80, задерживается выполнение программы на 100 мс.
- Рисуется прямоугольник с новыми значениями координат x и y.
- Если значение переменной y больше максимальной высоты окна, то переменная d устанавливается равной 0.
- Если значение переменной y меньше минимальной высоты окна, то переменная d устанавливается равной 10.
- Значение переменной y увеличивается на значение переменной d.
- Рисуется еще один прямоугольник с новыми значениями координат x и y.
- Повторяется шаг 13.
- Если была нажата клавиша с кодом #72, задерживается выполнение программы на 100 мс.
- Рисуется прямоугольник с новыми значениями координат x и y.
- Если значение переменной y меньше минимальной высоты окна, то переменная d устанавливается равной 10.
- Значение переменной y уменьшается на значение переменной d.
- Рисуется еще один прямоугольник с новыми значениями координат x и y.
- Повторяется шаг 19.
- Если была нажата клавиша с кодом #77, задерживается выполнение программы на 100 мс.
- Рисуется прямоугольник с новыми значениями координат x и y.
- Если значение переменной x больше максимальной ширины окна, то переменная d устанавливается равной 0.
- Если значение переменной x меньше минимальной ширины окна, то переменная d устанавливается равной 10.
- Значение переменной x увеличивается на значение переменной d.
- Рисуется еще один прямоугольник с новыми значениями координат x и y.
- Повторяется шаг 26.
- Если была нажата клавиша с кодом #75, задерживается выполнение программы на 100 мс.
- Рисуется прямоугольник с новыми значениями координат x и y.
- Если значение переменной x меньше минимальной ширины окна, то переменная d устанавливается равной 10.
- Значение переменной x уменьшается на значение переменной d.
- Рисуется еще один прямоугольник с новыми значениями координат x и y.
- Повторяется шаг 33.
- Если была нажата клавиша с кодом #43, рисуется новый прямоугольник с новыми значениями координат x и y.
- Если была нажата клавиша с кодом #45, рисуется новый прямоугольник с новыми значениями координат x и y.
- Если была нажата клавиша с кодом #27, цикл завершается.
- Программа завершается.