- •Паскаль
- •Основные понятия системы программирования Турбо Паскаль
- •Алфавит и словарь языка Паскаль
- •Основные понятия системы программирования Турбо Паскаль. Типы данных.
- •Целочисленные integer
- •Вещественные real
- •Строковые string
- •Символьные char
- •Логические boolean
- •Структура программы на языке Turbo Pascal
- •Структура программы
- •Процедуры
- •Функции
- •Функция- подпрограмма возвращающая значение.
- •Битовая арифметика
- •Элементы структурного программирования
- •Оператор перехода
- •Условный оператор
- •Некоторые процедуры
- •Некоторые функции. Методы работы со строками.
- •Программки для разбора
- •Графика Модули. Падающие снежинки
- •Бегущие огни
- •Вывод информации на экран в графическом режиме
- •Основные операции
Вывод информации на экран в графическом режиме
Основы работы с графическими режимами
Инициализация графического режима
Графические средства Turbo Pascal достаточно широки и практически не уступают возможностям современных языков программирования, в том числе и разработанным для создания программ под Windows. В графическом режиме можно выводить широкий спектр объектов: точки, линии, многоугольники, окружности и их дуги, изображения, созданные как самой программой, так и какими-либо другими средствами. Процедуры и функции, предназначенные для работы с графическими режимами, собраны в стандартном (поставляемым с Turbo Pascal) модуле Graph. Для использования данного модуля его, как и любой другой используемый модуль, необходимое подключить в разделе подключения модулей Uses.
Подключение к программе модуля Graph
Program Module2; {заголовок программы, имя программы - Module2}
Uses {начало раздела подключения модулей};
Graph; {подключение модуля Graph}
Begin {начало раздела описания логики программы)
End. {Конец раздела описания логики программы}
Чтобы графические объекты могли выводиться на экран, нужно перевести его в графический режим – инициализировать, запустив соответствующий драйвер. Для использования режима 640х480х16 предназначен стандартный драйвер Turbo Pascal, который имеет имя EgaVga.bgi и находится в подкаталоге BGI каталога, в который установлен Turbo Pascal.
Инициализация графического режима производится вызовом процедуры InitGraph, имеющей следующий вид:
InitGraph(<Номер драйвера>, <Номер режима>, <Путь к файлу драйвера>);
Программа, написанная на Turbo Pascal, может во время своего выполнения обращаться к нескольким драйверам (по очереди). Для этого автоматически создается так называемая таблица драйверов. Изначально в ней находятся только стандартные драйверы, в том числе и EgaVga.bgi. Программа также имеет доступ к функциям, подгружающим в таблицу другие драйверы. Данные функции описаны ниже, а пока нам достаточно знать, что драйвер EgaVga.bgi, используемый для установки нужного нам режима 640х480х16, уже занесен в таблицу.
Инициализация графического режима
Program UseGraphicsl;
{заголовок программы, имя программы – UseGraphics1}
Uses {начало раздела подключения модулей}
Graph; {подключение модуля Graph}
Var {начало раздела описания переменных}
GraphDriver, GraphMode: Integer;
{описание двух целочисленных переменных: GraphDriver – для передачи в качестве параметра, определяющего номер графического драйвера, и GraphMode – для передачи в качестве параметра, определяющего номер графического режима}
Begin {начало раздела описания логики программы}
GraphDriver := Detect;
{присвоение переменной GraphDriver значения 0 через использование константы Detect модуля Graph для наглядности}
GraphMode := 0;
{присвоение переменной GraphMode значения 0, определяющего необходимый графический режим - 640х480х16 цветов}
InitGraph(GraphDriver, GraphMode, ' ');
{вызов процедуры InitGraph, автоматически определяющей драйвер, подходящий для видеоустройства, установленного на компьютере; запускающей драйвер; и инициализирующей графический режим с номером 0}
End. {конец раздела описания логики программы}
Таким образом, рекомендуется вызывать данную процедуру в конце программы, когда графический режим уже не будет использоваться. Изменим предыдущий пример (см. листинг 043).
Листинг 043. Инициализация и закрытие графического режима
Program UseGraphics2; {заголовок программы, имя программы – UseGraphics2}
Uses {начало раздела подключения модулей}
Graph; {подключение модуля Graph}
Var {начало раздела описания переменных}
GraphDriver, GraphMode: Integer;
{описание двух целочисленных переменных: GraphDriver – для передачи в качестве параметра, определяющего номер графического драйвера, и GraphMode – для передачи в качестве параметра, определяющего номер графического режима}
Begin {начало раздела описания логики программы}
GraphDriver := Detect;
{присвоение переменной GraphDriver значения 0 с использованием константы Detect модуля Graph для наглядности}
GraphMode := 0; {присвоение переменной GraphMode значения 0, определяющего необходимый графический режим – 640х480х16 цветов}
InitGraph(GraphDriver, GraphMode, ' ');
{вызов процедуры InitGraph, автоматически определяющей драйвер, подходящий для видеоустройства, установленного на компьютере; запускающей драйвер; и инициализирующей графический режим с номером 0}
CloseGraph; {закрываем графический режим}
End. {конец раздела описания логики программы}
Теперь пользователь не сможет увидеть результат работы нашей программы, так как графический режим закрывается сразу же после установки (хотя иногда это и может занять несколько секунд). Для того, чтобы можно было ознакомиться с установленным режимом, организуем в программе паузу до нажатия пользователем любой клавиши. Для этого необходимо воспользоваться функцией ReadKey, рассмотренной ранее. Отметим, что функция ReadKey находится в модуле CRT, который необходимо подключить вместе с модулем Graph. Для этого в разделе подключения модулей Uses их нужно указать через запятую (в любом порядке).
Инициализация и закрытие графического режима
Program UseGraphics3; {заголовок программы, имя программы – UseGraphics3}
Uses {начало раздела подключения модулей}
Graph, CRT; {подключение модулей Graph и CRT}
Var {начало раздела описания переменных}
GraphDriver, GraphMode: Integer;
{описание двух целочисленных переменных: GraphDriver - для передачи в качестве параметра, определяющего номер графического драйвера, и GraphMode – для передачи в качестве параметра, определяющего номер графического режима}
Begin {начало раздела описания логики программы}
GraphDriver := Detect; {присвоение переменной GraphDriver значения 0 с использованием константы Detect модуля Graph для наглядности}
GraphMode := 0; {присвоение переменной GraphMode значения 0, определяющего необходимый графический режим - 640х480х16 цветов}
InitGraph(GraphDriver, GraphMode, '');
{вызов процедуры InitGraph, автоматически определяющей драйвер, подходящий для видеоустройства, установленного на компьютере; запускающей драйвер и инициализирующей графический режим с номером 0}
ReadKey; {программа приостанавливается, до нажатия пользователем клавиши}
CloseGraph; {закрываем графический режим}
End. {конец раздела описания логики программы}
Изменение цвета обводки
Program ChangeColor; {заголовок программы, имя программы – ChangeColor}
Uses {начало раздела подключения модулей}
Graph, CRT; {подключение модулей Graph и CRT}
Var {начало раздела описания переменных}
GraphDriver, GraphMode: Integer;
{описание двух целочисленных переменных: GraphDriver – для передачи в качестве параметра, определяющего номер графического драйвера, и GraphMode – для передачи в качестве параметра, определяющего номер графического режима}
Begin {начало раздела описания логики программы}
GraphDriver:= Detect;
{присвоение переменной GraphDriver значения 0 с использованием константы Detect модуля Graph для наглядности}
GraphMode := 0; {присвоение переменной GraphMode значения 0 определяющего необходимый графический режим –640х480х16 цветов}
InitGraph(GraphDriver, GraphMode, ' ');
{вызов процедуры InitGraph, автоматически определяющей драйвер, подходящий для видео-устройства, установленного на компьютере; запускающей драйвер; и инициализирующей графический режим с номером 0}
SetColor(Red) ; {установка нового текущего цвета обводки – красного (для указания цвета использована константа Red)}
ReadKey; {программа приостанавливается до нажатия пользователем клавиши}
CloseGraph; {закрываем графический режим}
End. {конец раздела описания логики программы}
Для изменения толщины и стиля обводки используется процедура SetLineStyle (англ. Set Line Style – установить тип линии), имеющая следующий вид:
SetLineStyle(<Стиль линии>, <Образец стиля>, <Толщина>);
Все параметры процедуры SetLineStyle должны являться целочисленными переменными или константами.
Пример изменений характеристик текущей обводки приведен следующем листинге:
Изменение характеристик текущей обводки
Program ChangeLiheStylel;
{заголовок программы, имя программы - ChangeLineStylel}
Uses {начало раздела подключения модулей}
Graph, CRT; {подключение модулей Graph и CRT}
Var {начало раздела описания переменных}
GraphDriver, GraphMode: Integer;
{описание двух целочисленных переменных: GraphDriver – для передачи в качестве параметра, определяющего номер графического драйвера, и GraphMode – для передачи в качестве параметра, определяющего номер графического режима}
Begin {начало раздела описания логики программы}
GraphDriver := Detect;
{присвоение переменной GraphDriver значения 0 с использованием константы Detect модуля Graph для наглядности}
GraphMode:=0; {присвоение переменной GraphMode значения 0, определяющего необходимый графический режим – 640х480х16 цветов}
InitGraph (GraphDriver, GraphMode, ' ');
{вызов процедуры InitGraph, автоматически определяющей драйвер, подходящий для видеоустройства, установленного на компьютере; запускающей драйвер; и инициализирующей графический режим с номером 0}
SetColor(Red); {установка нового текущего цвета обводки – красного (для указания цвета использована константа Red)}
SetLineStyle(CenterLn, 0, ThickWidth);
{установка текущих толщины линии (ThickWidth – толстая линия) и стиля линии (CenterLn – штрих-пунктирная линия), параметр Образец стиля игнорируется, поэтому можно задать любое значение, в данном случае – 0}
ReadKey {программа приостанавливается до нажатия пользователем клавиши}
CloseGraph; {закрываем графический режим}
End. {конец раздела описания логики программы}
Однако если параметр Стиль линии имеет значение UserBitLn, то для установки стиля линии используется параметр Образец стиля. Для понимания смысла параметра Образец стиля необходимо разобраться в том, как именно хранятся данные в оперативной памяти.
Установка программно определяемой текущей обводки
Program ChangeLineStyleZ; {заголовок программы, имя программы – ChangeLineStyle2}
Uses {начало раздела подключения модулей}
Graph, CRT; {подключение модулей Graph и CRT}
Var {начало раздела описания переменных}
GraphDriver, GraphMode: Integer; {описание двух целочисленных переменных: GraphDriver – для передачи в качестве параметра, определяющего номер графического драйвера, и GraphMode – для передачи в качестве параметра, определяющего номер графического режима}
Begin {начало раздела описания логики программы}
GraphDriver := Detect; {присвоение переменной GraphDriver значения 0 с использованием константы Detect модуля Graph для наглядности}
GraphMode := 0; {присвоение переменной GraphMode значения 0, определяющего необходимый графический режим – 640х480х16 цветов}
InitGraph (GraphDriver, GraphMode, ' ');
{вызов процедуры InitGraph, автоматически определяющей драйвер, подходящий для видеоустройства, установленного на компьютере; запускающей драйвер; и инициализирующей графический режим с номером 0}
SetColor(Green); {установка нового текущего цвета обводки – зеленого (для указания цвета использована константа Green)}
SetLineStyle(UserBitLn, 255, ThickWidth);
{установка текущих толщины линии (ThickWidth – толстая линия) и стиля линии (UserBitLn – использовать шаблон), шаблон, заданный числом 255 рассматривается как 0000000011111111, то есть пунктирная линия по 8 точек через такие же интервалы}
ReadKey; {программа приостанавливается до нажатия пользователем клавиши}
CloseGraph; {закрываем графический режим}
End. {конец раздела описания логики программы}
Заливка
Заливка, так же как и обводка, является текущим параметром, то ее влияет только на те объекты, которые выводятся на экран после ее изменения, и характеризуется двумя параметрами – стилем (некоторым шаблонный рисунком, которым и заполняются внутренние области объектов) и цветом. Обе характеристики устанавливаются процедурой SetFillStyle (англ. SetFillStyle – установить стиль заливки), имеющей следующий вид:
SetFillStyle(<0бразец заливки>, <Цвет заливки>);
