Операторы GET и PUT

   Оператор GET позволяет запомнить часть графического экрана в некотором массиве, а оператор PUT - вывести запомненное изображение на экран. Синтаксис оператора GET:

   GET (x1, y1)-(x2, y2), массив - запомнить прямоугольную область.

   Точки (x1, y1) и (x2, y2) - две вершины прямоугольника, лежащие на одной из его диагоналей. Размеры прямоугольника и его содержимое запоминаются в массиве.

   Синтаксис оператора PUT:

   PUT (x, y), массив [, способ_вывода] - вывести на экран картинку из массива заданным способом.

   Поскольку в массиве хранятся и размеры картинки, в операторе PUT указывается только одна точка - верхний левый угол прямоугольной области для вывода картинки.

 

Понятие массива

   Проиллюстрируем наглядно понятия простой переменной и массива. Простую переменную можно представить в виде ящичка, на котором написано имя переменной (в нашем случае - A). В ящичек можно положить любое число - значение переменной (в нашем случае - 5).

   Массив можно представить как ящик с перегородками. В каждый из получившихся “отсеков” можно положить свое число. Отсеки пронумерованы, поэтому имя каждого отсека состоит из двух частей: общего имени ящика и номера отсека. Но такие обозначения как A0, A1, A2 используются в математике, в языках программирования элемент массива обозначается A(0), A(1), A(2) и т.д.

   Каждый массив должен быть описан в операторе DIM (от английского dimentions - размеры):

   DIM имя_массива(номер_последнего_элемента)

   Поскольку нумерация элементов массива в Quick Basic начинается с нуля, то количество элементов массива (длина массива) оказывается на единицу больше номера последнего элемента. Например, DIM A(7) описывает массив из восьми элементов. Иногда, для удобства работы, мы будем “забывать” о нулевом элементе и указывать в описании массива его длину.

   Элементы массива должны иметь значения одного и того же типа. Для указания типа элементов к имени массива добавляется знак $, если элементы массива суть строки символов, или знак %, если все элементы массива - целые числа. (Подробнее о типах данных поговорим в соответствующем разделе.)

   Указатели типа являются частью имени как обычной переменной так и массива, поэтому A% и A$ - это имена разных переменных!

   В операторах GET и PUT будем использовать только массивы целых чисел. Размер массива должен быть достаточно большим, чтобы в него поместилась необходимая информация (сохранилась нужная картинка с экрана). В литературе [1] приводятся точные формулы, но можно пользоваться более простой приближенной формулой

размер_массива = 0.3*dx*dy,

где dx = x2 - x1 + 1, dy = y2 - y1 +1 - размеры (в пикселях) прямоугольной области, полностью закрывающую интересующую нас картинку, по горизонтали и вертикали. Если размер массива, вычисленный по приближенной формуле, окажется недостаточным, Quick Basic выдаст предупреждение “Illegal function call” (“Неверный вызов функции”) и остановит выполнение программы на строке с оператором GET. В этом случае следует несколько увеличить размер массива и запустить программу еще раз.

 
‘---------------- Программа ------------------
‘----“Копирование прямоугольника” ---
 
SCREEN 7
DIM a%(     )  Размер массива укажем позже
LINE (20, 20)-(79, 69), 5, BF
GET (20, 20)-(79, 69), a%
SLEEP 1
PUT (120, 20), a%

   Программа выводит на экран закрашенный прямоугольник, для которого dx=60, dy=50. Вычисляя по приближенной формуле размер массива, получим значение 900 (точная формула дает значение 802). Укажем теперь размер массива и запустим программу. На экране появится фиолетовый прямоугольник, а ровно через одну секунду (SLEEP n дает задержку в n секунд) рядом появится его дубликат.

   Задание. Запишите программу под именем GETPUT.BAS. Измените положение второго прямоугольника на экране. Что получится, если прямоугольники будут пересекаться?

 

Способы вывода оператором PUT

   Если в программе “Копирование прямоугольника” в последней строке поставить PUT (30, 30), a% , то на экране появится такая вот картинка.

Мы видим, что в результате наложения двух прямоугольников одного цвета образовалось черное пятно. Это произошло потому, что при выводе картинки оператором PUT над цветом точки экрана и цветом точки картинки, попадающей на это место, производится логическая операция “исключающее или” (краткое обозначение - XOR). Особенность ее состоит в том, что для любого числа n выполняется равенство: n XOR n = 0. Следовательно, наложение точек одинакового цвета даст цвет 0, т.е. цвет фона.

Способ вывода XOR принят в операторе PUT по умолчанию, т.е. если не указан другой способ выводапособы вывода определяются последним параметром.

   PSET - вывод картинки без изменения ее цвета. В этом случае никакие операции над цветами картинки и экрана не производятся.

   PRESET - замена цветов картинки на дополнительные. Дополнительный цвет вычисляется по формуле: цвет = 15 - исходный_цвет.

   OR - цвет картинки определяется результатом логической операции “или”.

   AND - цвет картинки определяется результатом логической операции “и”.

   Задание. Замените в программе “Копирование прямоугольника” последнюю строку циклом

 
FOR x = 30 TO 130 STEP 10
   PUT (x, x), a%
NEXT x

   Нарисуйте границу исходного прямоугольника другим цветом. Измените способ вывода в операторе PUT.

   “Связку” операторов GET и PUT можно использовать для создания периодического узора. Для этого рисуем небольшой прямоугольный фрагмент узора, а затем заполняем фрагментами экран.

 
‘----------- Программа “Узор” -----------
 
SCREEN 7
DIM a%(130)
 
‘Рисуем и запоминаем фрагмент узора
 
FOR r = 0 TO 10 STEP 2
  LINE (10 - r, 10 - r)- (10 + r, 10 + r), r, B
NEXT r
GET (0, 0)-(20, 20), a%
 
Размножаем фрагмент
 
CLS
FOR x = 50 TO 250 STEP 20
   FOR y = 40 TO 140 STEP 20
      PUT (x, y), a%, PSET
   NEXT y
NEXT x

 

 

Сайт создан в системе uCoz