- •Предисловие
- •Лабораторная работа 1
- •Темы для предварительной проработки
- •1.1. Порядок выполнения работы
- •1.2. Содержание отчета
- •1.3. Индивидуальные задания
- •1.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 1а
- •Приложение 1б
- •Приложение 1в
- •Приложение 1г
- •Лабораторная работа 2
- •Темы для предварительной проработки
- •2.1. Порядок выполнения работы
- •2.2. Содержание отчета
- •2.3. Индивидуальные задания
- •2.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 2а
- •Приложение 2б
- •Лабораторная работа 3
- •1.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 3а
- •Приложение 3б
- •Приложение 3в
- •Приложение 3г
- •Лабораторная работа 4
- •4.4. Пример решения задачи
- •Контрольные вопросы
- •Лабораторная работа 5
- •Темы для предварительной проработки
- •5.1. Порядок выполнения работы
- •5.2. Содержание отчета
- •5.3. Индивидуальные задания
- •5.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 5а
- •Лабораторная работа 6
- •Темы для предварительной проработки
- •6.1. Порядок выполнения работы
- •6.2. Содержание отчета
- •6.3. Индивидуальные задания
- •6.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 6а
- •Приложение 6б
- •Константы типа драйвера
- •Константы режимов драйвера
- •Константы цветов
- •Константы стиля и толщины линий (для предикатов GetLineStyle, SetLineStyle)
- •Константы типа шрифта (задаются в предикате settextstyle(Font,Direction,Charsize))
- •Лабораторная работа 7
- •Темы для предварительной проработки
- •7.1. Порядок выполнения работы
- •7.2. Содержание отчета
- •7.3. Индивидуальные задания
- •7.4. Пример решения задачи
- •Контрольные вопросы
- •Приложение 7а
- •Приложение б
- •Редактор о.І. Шпільова
- •61002 Харків, вул. Фрунзе, 21
6.4. Пример решения задачи
Тема работы: работа с графикой в среде Turbo Prolog
Цель работы: ознакомление с использованием основных графических предикатов в среде Turbo Prolog 2.0 и приобретение практических навыков создания графических объектов с использованием BGI-графики
Индивидуальное задание:
Инициализировать графический режим с параметрами по умолчанию. Вывести значения параметров различными стилями шрифтов. Вывести окружность и закрасить ее с использованием собственного шаблона заполнения. Вывести линии с использованием стандартного и собственного шаблонов стиля. Вывести шестиугольник. Сформировать и вывести изображения «пляшущего» человечка. Организовать звуковое сопровождение для «пляшущего» человечка.
Разработка метода решения задачи.
Задача разбивается на три подзадачи:
1) Вывод значений параметров графического режима различными стилями шрифтов.
2) Вывод и закрашивание окружности, линий и шестиугольника.
3) Формирование и вывод изображения «пляшущего» человечка со звуковым сопровождением.
Для решения первой подзадачи разработан беспараметрический предикат gr, подцелями которого являются вызовы стандартных предикатов. Значение параметра Driver выводится вертикально рукописным шрифтом, значение параметра Mode выводится горизонтально готическим шрифтом. Перед выводом значений выполняется их преобразование к строковому типу данных
Вторую подзадачу решает предикат gr1, в котором формируется шаблон заполнения замкнутых геометрических фигур (рис. 6.1, а) и шаблон стиля линии (рис. 6.1, б). Код задается в 16-ричном виде и формирует фрагмент экрана размером 8х8 пикселей. Кроме этого в предикате gr1 формируются изображения окружности, линий и шестиугольника.
|
|
|
|
|
|
|
|
16-ричный код |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1F |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
03 |
|
16-ричный код: 44 |
|
|||||||
|
|
|
|
|
|
|
|
05 |
|
|
|
|
б) |
|
|
|
|
|
|
|
|
|
|
|
|
|
09 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
00 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
а)
Рисунок 6.1 – Формирование шаблона заполнения и шаблона стиля линии
Для решения третьей подзадачи формируются изображения двух кадров пляшущего человечка на двух видеостраницах (предикаты ris1 и ris2) и выполняется циклическое переключение видеостраниц до нажатия любой клавиши клавиатуры (предикат gr2).
Описание предикатов, разработанных для реализации метода решения задачи на языке Turbo Prolog.
Предикат
Назначение
gr
Переход в графический режим и вывод текста
gr1
Формирование шаблона заполнения фигур и стиля линии. Вывод графических примитивов на экран
gr2
Циклическое переключение видеостраниц
ris1
Формирование кадра изображения на видеостранице 0
ris2
Формирование кадра изображения на видеостранице 1
р
Установка графического режима, стиля линии и цвета фона
Стандартные предикаты, используемые для решения задачи:
Стандартные предикаты BGI-графики и значения параметров взяты из прил. 6А.
Текст программы.
predicates
gr gr1 gr2 ris1 ris2 p
clauses
gr:-
detectgraph(Gd,Gm), % Получение текущих значений графического
% драйвера и режима
initgraph(Gd,Gm,_,_,""), % Инициализация графического режима
setcolor(5), % Устанавливается текущий цвет - лиловый
moveto(180,50), % Перемещение указателя по заданным
% координатам
outtext("Работает графический режим!"), % Вывод текста
readchar(_), % Задержка до нажатия клавиши
setbkcolor(7), % Задание цвета фона
moveto(20,100), % Перемещение указателя
settextstyle(5,1,5), % Установка параметров шрифта – рукописный
% стиль, вертикальная ориентация, размер 5
str_int(D,Gd), % Преобразование целого числа (типа драйвера)
% в строку
concat("Driver=",D,Dr), % Соединение текста и строки
outtext(Dr), % Вывод текста
moveto(100,200), % Перемещение указателя
settextstyle(4,0,25), % Установка параметров шрифта – готический % стиль, горизонтальная ориентация, размер 25
setcolor(4),
outtext(" Mode="),
str_int(M,Gm),
outtext(M),
readchar(_),gr1.
gr1:-
cleardevice, % Очистка экрана
setbkcolor(9), % Установка цвета фона
setlinestyle(4,$44,3), % Задание шаблона линии
line(300,100,400,100), % Рисование линии
setfillpattern([$1F,$03,$05,$09,$11,$20,$40,$00],5), % Задание шаблона
% заполнения
setlinestyle(0,1,3), % Задание шаблона линии – сплошная линия
setcolor(6),
circle(90,40,40), % Вывод окружности
floodfill(90,40,6), % Закрашивание окружности
line(200,100,200,50),
readchar(_),
%Продолжение программы
cleardevice,
circle(100,40,40),
floodfill(90,40,6),
setcolor(1),
line(200,100,200,150),
setcolor(6),
line(200,100,200,150),
readchar(_),
cleardevice,
circle(110,40,40),
floodfill(90,40,6),
readchar(_),
cleardevice,
circle(120,40,40),
floodfill(90,40,6), % Задание вершин координат замкнутого контура –
% шестиугольника и вывод его на экран
drawpoly([100,100, 150,130, 150,170 ,100,200, 50,170,50,130,100,100]),
readchar(_),closegraph.
gr2:-inkey(_).
gr2:-
setvisualpage(0), %Установка видимой видеостраницы
sound(50,50), % Задание частоты и длительности звука
setvisualpage(1),
sound(50,100),!,
gr2.
ris1:-
setactivepage(0), % Установка активной видеостраницы
clearviewport, % Очистка видеопорта
setbkcolor(11),
setcolor(1),
circle(320,140,50),
circle(305,125,10), circle(335,125,10),
circle(320,150,7),arc(320,140,240,300,35),
setfillstyle(1,3),
floodfill(305,125,1),floodfill(335,125,1),
rectangle(290,190,350,300),
line(290,210,240,210),line(350,210,400,210),
line(300,300,290,330),line(340,300,350,330),
line(290,330,310,360),line(350,330,330,360),
readchar(_).
ris2:-
setactivepage(1),
clearviewport,
setbkcolor(11),
setcolor(1),
circle(320,140,50),
circle(305,125,10), circle(335,125,10),
circle(320,150,7),arc(320,140,240,300,35),
setfillstyle(1,4),floodfill(320,140,1),
setfillstyle(1,0),
%Продолжение программы
floodfill(305,125,1),floodfill(335,125,1),
rectangle(290,190,350,300), % Вывод прямоугольника
line(290,210,240,170),line(350,210,400,170),
line(300,300,300,360),line(340,300,340,360).
p:-
initgraph(4,1,_,_,""), % Установка драйвера EGA64 м графического
% режима EGAHi - 640x350, 16 цветов, 2 страницы
setbkcolor(9),
setlinestyle(0,0,3),
ris1,ris2, gr2.
goal
gr, p,
write("The end").
Выводы
При выполнении лабораторной работы ознакомились с особенностями использования предикатов BGI-графики и констант драйверов. Для реализации индивидуального задания были разработаны рекурсивные предикаты.
