Лабораторна
робота № 3
Тема. Синтез
динамічного зображення в графічному режимі
Вступ
Формування динамічного зображення в графічному режимі опирається
на ті ж алгоритми, що були розглянуті в попередній лабораторній роботі. Проте
даний режим містить звичайно ряд спеціальних засобів, дозволяючи створити більш
плавний, наближений до природного, рух. До таких засобів відносяться:
1.
наявність двох або більше графічних сторінок, кожна з яких може
бути видимою (тобто відображатися на екрані дисплею) і/чи активною (саме на ній
модифікується зображення засобами алгоритмічної мови). По замовчуванню під час
переходу в графічний режим одна й та сама сторінка є і видимою і активною, що
зручно під час синтезу статичного зображення;
2.
інструментарій роботи з виділеною прямокутною ділянкою
графічного зображення, який зберігається в оперативній пам’яті і в подальшому
може застосовуватися для:
·очищення
на екрані частини чи всього зображення шляхом вибірки фрагменту з ОЗП
(оперативного запам’ятовуючого пристрою) і накладання на стираючу
ділянку;
·переміщення
частини чи всього зображення шляхом вибірки фрагмента з пам’яті і розміщення на
новому місці екрану.
Даний інструментарій може застосовуватися в рамках всіх
розглянутих раніше алгоритмів формування динамічного зображення.
Опис середовища програмування
Для роботи з розглянутим раніше інструментарієм алгоритмічна
мова TyrboPascal містить такі процедури:
SetActivePage (номер сторінки) – для встановлення номеру активної сторінки. Необхідно врахувати,
що нумерація сторінок у графічному режимі мови TyrboPascal
починається з нуля,
SetVisualPage (номер сторінки) – для
встановлення номера видимої (відображаючої на екрані)
сторінки,
Getlmage (xl, yl, х2, у2, пам’ять) – для збереження зображення
заданої ділянки екрану в ОЗП. Параметри xl, у1, х2, у2 задають координати
лівого верхнього і правого нижнього кутів зберігаючої
ділянки екрану, а пам’ять являє собою змінну – ім’я буфера в ОЗП, зберігаючи
дане зображення,
Putlmage (х, у, пам’ять, спосіб) – для видачі на
екран збереженої в ОЗП ділянки. Змінна спосіб вказує вид об’єднання передаючої
на екран інформації з вже відомою і може приймати такі значення: 0 – MOV, 1 –
XOR, 2 – OR, 3 – AND, 4 – NOT. Значення 0 (MOV) дозволяє під час накладання з
деяким зсувом стерти попереднє зображення і регенерувати його на новому місці,
що створює ефект переміщення. Інші значення змінної дозволяють створювати різні
відеоефекти.
Робота з виділеним фрагментом досить складна, оскільки
передбачає застосування змінних типу Pointer
(показник) і потребує попереднього
визначення розміру виділяючого прямокутника за
допомогою функції ImageSize (x1, yl,
x2, y2) і резервування в ОЗП для нього пам’яті за допомогою процедури GetMem (пам’ять, розмір). Більш детально даний
інструментарій розглянутий в прикладі.
Графічний режим дозволяє як у статиці, так і в динаміці виводити
на екран фрагменти тексту. Для цього застосовуються такі процедури як:
1.
SetTextJustify (горизонталь, вертикаль) – для вирівнювання тексту по
горизонталі і вертикалі, де: горизонталь – змінна, задаюча
режим горизонтального вирівнювання і приймаюча одне зі значень: 0 – нульове
вирівнювання (вивідний символ розміщується справа від задаючої
координати виводу), 1 – вирівнювання по центру, 2 – праве вирівнювання;
вертикаль – змінна, задаюча режим вертикального
вирівнювання і приймаюча одне з таких значень: 0 – нижнє вирівнювання (вивідний
символ розміщується зверху по відношенню до задаючої
координати виводу), 1 – верхнє вирівнювання;
2.
SetTextStyle (шрифт, напрям, розмір) – для
встановлення поточних параметрів вивідного тексту, де: шрифт – змінна, задаюча тип шрифта і приймаюча
одне зі значень в діапазоні 0…4, напрям – змінна, задаюча
напрям виводу тексту (0 – по горизонталі, 1 – по вертикалі), розмір – змінна, задаюча розмір символів і визначається дослідним шляхом
виходячи з умов до зображення;
3.
OutTextXY (х у, стрічка) – для виводу на
екран послідовності символів стрічка, починаючи з точки з координатами х, у;
4.
OutText (стрічка) – для виводу на екран послідовності символів стрічка, починаючи з
поточної позиції.
Приклад
програми. Створити програму, яка реалізує графічними
засобами мови програмування Turbo Pascal таке динамічне зображення: вікна
будинку різного кольору рухаються на зустріч одне одному і в кінцевому випадку
міняються місцями.
Лістинг програми
program
s;
uses crt, graph;
var
driver, mode,i:integer;
begin
driver:=0;
mode:=0;
InitGraph (driver,mode,'');
for i:=0 to 60 do begin
clrscr;
rectangle
(200,200,300,300);
setcolor(3) ;
rectangle
(210+i,220,230+i,270);
setcolor(5) ;
rectangle
(270-i,220,290-i,270);
setcolor(white) ;
line
(200,200,250,150);
line
(250,150,300,200);
delay (5000) ;
end;
readln;
end.
Варіанти завдань
Створити програму, яка реалізовує засобами графіки мови
програмування TyrboPascal таке динамічне ображення,
яке базується на завданні попередньої лабораторної роботи:
1.
червоне сонце піднімається з-понад моря і переміщується вверх і
вправо;
2.
секундна стрілка здійснює повний оберт;
3.
дві бульбашки спливають за 15 сек;
4.
сонце обертається проти годинникової стрілки з дискретою 10 °/сек.; довжина
циклу 20 сек;
5.
одна куля зі в'язки піднімається у верх, а друга − з подвоєною
швидкістю опускається вниз;
6.
гак крану рухається по стрілці вправо й опускається вниз;
7.
колесо обертається 15 сек з дискретою 0,5 сек, обертаючись на
кожному кроці на 10 °;
8.
знак «цеглина» поступово (за 20 сек з дискретою 0,4 сек на кожному
кроці) ховається за горизонт;
9.
колір світлофора змінюється з дискретою
0,7 сек; дана процедура повторюється три рази;
10.
одна куля на більярдному столі рухається вгору, а друга з
подвоєною швидкістю вправо;
11.
покази термометра змінюються від -10° до 40°, а потім у два рази
повільніше до 0°;
12.
серпоподібний місяці повільно заходить за горизонт;
13.
драбина переміщується справа наліво, а потовщена нижня
перекладина - за цей же час вверх;
14.
до парашуту підвішені слова «ЛНТУ група АВ-21»; все зображення
опускається вниз і відноситься вліво з подвійною швидкістю;
15.
диск телефону повертається на п'ять цифр з дискретою
2 сек;
16.
на верху арки ліхтар; арка переміщується по екрану справа наліво,
при цьому змінюється колір ліхтаря;
17.
у кожній тумбі по три ящики; з дискретою
у 1 сек всі ящики висуваються з тумб;
18.
стилізоване зображення шашки проходить по головній діагоналі
дошки з дискретою 0,7 сек,
19.
м'яч переміщується знизу вверх і до кінця руху зменшується в два
рази;
20.
буква «Н» переміщується зліва направо і зменшується до кінця
руху в два рази;
21.
дерево зеленіє і росте, потім жовтіє і зменшується в розмірі;
22.
зигзагоподібний рух м'яча всередині деякої труби зліва направо;
23.
рух м'яча, кинутого на поверхню: спочатку частіше вдаряється об
землю і вкінці зупиняється;
24.
шарик піднімається по сходах вверх, рухається по площадці, падає
вниз, розділяється на два нових шарики, які починають рухатися в різні сторони;
25.
циркового клоуна, в якого зі сторони в сторону рухаються очі;
26.
цар-рибу, повз якої пропливають пухирці повітря різного розміру;
27.
йдучу людину з мультфільму «Палка, − палка, − огуречек...);
28.
хмару, закриваючу сонце, коли хмара закриє
сонце, починається дощ;
29.
телевізор, всередині якого рухається риба спочатку зліва направо
потім справа-наліво, то пливе вздовж верхнього краю екрану, то посередині, то
вздовж нижнього краю екрану;
30.
ялинку, сніговика, падаючий сніг.
Зміст звіту
1)
Зміст завдання;
2)
лістинг програми;
3)
надруковане зображення.
Контрольні питання
1.
Яким чином здійснюється зміна графічних сторінок у алгоритмічній
мові Turbo Pascal?
2.
Чи можна змінювати висоту символів, які відображаються в
графічному режимі?
3.
Чи можна розміщувати текст вертикально по екрану в графічному
режимі?
4.
Чи можна застосовувати вікна під час створення динамічного
зображення в графічному режимі?
5.
Які попередні операції потрібні для збереження в пам'яті ПК
виділеного фрагменту?