Диалекты бейсика для ZX Spectrum 1992 г.

PRO-DOS - Графические операторы.


ГРАФИЧЕСКИЕ ОПЕРАТОРЫ_

♦PLOT, *DRAW, *LINE, *ВОХ, *TRIANGLE, ^ELLIPSE, *GPAT

Стандартный Spectrum-Бейсик предоставляет в распоряжение пользователя три графических оператора. PLOT, DRAW и CIRCLE. Диалект PRO-DOS дополняет этот список еще семью.

Операторы

♦PLOT х, у

*DRAW х, у

очень похожи на свои стандартные аналоги. Отличие заключается в том, что +PLOT и *DRAW доступна вся площадь экрана, включая две нижние символьные строки (служебный экран). Следовательно, для этих операторов размеры экрана составляют не 256x176 точек, как для операторов стандартного Бейсика, а 256x192. Нелишне будет заметить, что для функции стандартного Бейсика POINT (х, у) (см. стр 88), информирующей о состоянии пикселя (включен-выключен), служебный экран по-прежнему остается недоступным

11и( ком.ку начало отсчета координат привязано к нижнему лево-чу } i/.y экрана, то для графических операторов PRO-DOS оно смещается на 1В пикселей вниз. Следовательно, результаты выполнения опера юров DRAW и PLOT, с одной стороны, и *DRAW и *PLOT, с другой стороны, при одинаковых параметрах не будут совпадать. В этом легко убедиться, выполнив следующую программу:

30 PLOT 30,30: DRAW 70,70: REM Стандартные операторы 40 *PLOT 30,30: +DRAW 70,70: REM Операторы PRO-DOS 50 PAUSE 0

Для полноты картины следует еще добавить, что +DRAW, в отличие от DRAW, не умеет рисовать дуги и вообще не «переваривает» введение трех параметров.

Человек, мало-мальски знакомый с иностранными языками, легко сообразит, что операторы *L1NE, *ВОХ, *TRIANGLE, и +ELLIPSE строят на экране, соответственно, отрезок прямой, прямоугольник, треугольник и эллипс. Этим операторам также доступны все 24 символьные строки экрана. Формат первых двух операторов одинаков:

*LINE х1, у1, х2, у2

*ВОХ х1, у1, х2, у2

В первом операторе двумя парами значений задаются координаты концов отрезка, во втором — координаты расположенных по диагонали вершин прямоугольника. Так, программа

30 LET х1=20: LET х2=120: LET у 1=50: LET у2=150 40 +LINE xl, у1, х2, у2 50 *ВОХ х1, у1, х2, у2 60 PAUSE 0

нарисует на экране прямоугольник и его диагональ. Отметим, что инструкции

★LINE xl, у1, х2, у2

и

♦LINE х2, у2, xl, у1

эквивалентны. То же самое касается и различных вариантов записи оператора *ВОХ:

♦BOX xl, yl, х2, у2 ♦BOX х2, у2, х1 f yl ♦BOX х1, у2, х2, у 1

и

♦BOX х2, у1, х1, у2

К сожалению, стороны прямоугольника, построенного оператором ♦BOX, всегда параллельны осям координат.

Оператор ♦TRIANGLE требует 6 параметров:

♦TRIANGLE xl, у1, х2, у2( хЗ, уЗ

В списке параметров фигурируют пары «абсцисса-ордината» трех вершин треугольника, причем порядок перечисления этих пар непринципиален.

Если операторы ♦LINE, ♦BOX и +TR1 ANGLE являются по сути избыточными (их действие легко смоделировать с помощью +PLOT и ♦DRAW), то оператор ^ELLIPSE уникален: ничего похожего нет ни в стандартном Spectrum-Бейсике, ни в каком-либо из известных его диалектов. Он строит эллипс, что сделать с помощью других операторов не так-то просто (хотя и возможно). Следом за ключевым словом ♦ELLIPSE указываются 4 параметра:

♦ELLIPSE х, у, а, Ь

Первые два параметра (х, у) определяют координаты центра эллипса, вторые (а, Ь) — соответственно, горизонтальную и вертикальную полуоси. И опять же, как и стороны прямоугольника, выводимого оператором +ВОХ, полуоси эллипсов всегда параллельны границам экрана.

Окружность, как известно, является частным случаем эллипса. Для ее построения нужно задать одинаковые длины полуосей. Действительно, оператор

♦ELLIPSE х, у, г, г

изобразит на экране окружность радиуса г с центром в точке с координатами (х, у). Такая альтернатива оператору CIRCLE может пригодиться при построении окружности в области служебного экрана.

Для ценителей гармонии линий приведем пример программы, рисующей семейство концентрических эллипсов:

30 LET х=128: LET y=96: REM Центр эллипса

40 FOR а=10 ТО 100 STEP 20: REM Горизонтальная полуось

50 FOR Ь=10 ТО 100 STEP 20: REM Вертикальная полуось

60 ♦ELLIPSE х, у, а, Ь

70 NEXT Ь: NEXT a: PAUSE 0

Несколько замечаний, общих для всех графических операторов PRO-DOS. В отличие от стандартных, они не допускают использования временных атрибутов. Так, компьютер откажется «глотать» конструкцию вроде

*PLOT INK 5; 30f 40

Более того, графические операторы совершенно равнодушны к постоянным атрибутам, установленным инструкциями INK, PAPER и другими (не в составе оператора PRINT).

Цветную графику можно получить, лишь вставив в программу фиктивный оператор печати: ничего не печатающий, но устанавливающий атрибуты, например:

PRINT INK 5; OVER 1; BRIGHT 0

Попробуйте модифицировать программу построения эллипсов, добавив в нее под номером 35 приведенную строку.

Графические операторы PRO-DOS иначе, чем их стандартные аналоги, реагируют на выход за границы экрана в процессе построения линий. Предоставим читателю возможность самостоятельно поэкспериментировать, присваивая параметрам графических операторов большие значения (но не более 255). При этом особенно забавные эффекты будут получаться при выполнении оператора *ELLIPSE. В отличие от стандартных графических операторов, при выходе линии за пределы экрана в ряде случаев не выдается сообщение об ошибке, например

*PLOT 128,96: *DRAW 200, 200

или

♦ELLIPSE 128,96,50,100: PAUSE 0

Действие всех графических операторов PRO-DOS может быть модифицировано с помощью оператора

♦GPATп

Он устанавливает вид линий, которыми будут производиться графические построения: сплошные, с разрывами или вообще невидимые.

*GPAT относится к неисполняемым операторам (подобно INK, PAPER и другим). Это означает, что сам он не вызывает никаких действий, а лишь влияет на результат выполнения некоторых последующих инструкций. Позволим себе привести в качестве аналогии уставные армейские команды «ШАГОМ» и «БНГОМ», которые сами не оказывают никакого видимого воздействия на дисциплинированных военнослужащих, а лишь сообщают, что им придется делать после команды «МАРШ». Операторы такого типа характерны для PRO-DOS, и мы еще не раз с ними встретимся.

Вид линии для графических построений задается параметром п (0...255), следующим за оператором *GPAT. Его значение, записанное в двоичном виде, наглядно представляет периодически повторяющийся элемент линии — 8 пикселей, из которых включенным пикселям соответствуют единицы, а погашенным — нули. Удобно

вводить параметр в операторе +GPAT в двоичном виде с помощью функции BIN. Например, вместо

35 39GPAT 105

записывать

35 *GPAT BIN 01101001

Попробуйте вставить приведенную строку в пример программы, рисующей эллипсы (рис.7).

Выполнение +GPAT с нулевым аргументом заставляет графические операторы «строить» фигуры невидимыми линиями. Оператор *GPAT 255 восстанавливает режим рисования сплошной линией; этот же режим устанавливается при инициализации PRO-DOS

*GPAT имеет и еще одно полезное применение, о котором логичнее рассказать в следующем разделе.




СОДЕРЖАНИЕ:
  1. Laser Basic - Вывод спрайтов на экран; Вывод на экран части спрайта; Перенос атрибутов; Преобразование окна экрана; Наборы переменных; Перемещение спрайтов; Наложение спрайтов; Копирование изображения с экрана в спрайт; Преобразование спрайтов; Скроллинг пейзажа; Изменение размеров области спрайт-файла; Вспомогательные графические операторы и функции; Определение столкновений спрайтов; Сервисные операторы и функции; Процедуры; Загрузка и запись программ.


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Объявления
Разное - Выставка полuграфuя`2000 в Украине
От редакции - небольшое лирическое отступление.
Разное - Неосознанное, чистота, царапающие коготки, искаженные связи...
Проект языка Listh - Forth реализуется значительно проще, чем Lisp, но это тянет большие недостатки.

В этот день...   21 ноября