Лабораторна робота № 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.                     Які попередні операції потрібні для збереження в пам'яті ПК виділеного фрагменту?