[an error occurred while processing this directive]

─PL65
─LS1
─SRP 90
─TM0
─HM2
─DH//-|P-//
─LM5
│..................................................................<
      4.3   Дополнительные графические возможности

      4.3.1 Графический Пакет Прикладных Программ (Graphics Rom)

   Вы  уже  познакомились с простейшими  графическими  командами,
такими как MOVE,  DRAW  и  PLOT.  С помощью этих команд вы можете
выводить     на экран монитора различную графическую информацию и
создавать достаточно  сложные  изображения. Следует отметить, что
возможностей   этих   команд   обычно   бывает   достаточно   для
графического оформления большинства прикладных программ.
   В   данном   разделе  описываются  дополнительные  графические
команды,  которые могут быть использованы в программах, создающих
произвольные   графические    изображения.   Перечислим   коротко
возможности этих команд :
   - создание небольших  по размерам  графических  обьектов
     (СПРАЙТОВ),  которые  можно  выводить  в  любом  месте
     экрана  и перемещать по экрану   поверх  существующего
     изображения;
   - рисование окружностей, элипсов, дуг элипсов  и  других
     кривых линий;
   - закрашивание областей произвольной формы;
   - поворот осей координат;
   - создание трехмерных изображений;
   - использование шрифтов с произвольным размером букв;
   - использование графических возможностей языка LOGO и др.
   Все эти дополнительные графические возможности предоставляются 
графическим пакетом прикладных программ (GRAPHICS  ROM),  который
располагается  в  постоянном запоминающем устройстве (ПЗУ или ROM
от английских слов  Read Only Memory - память только для чтения).
Для  того,  чтобы  ваша  программа  смогла  воспользоваться  ими,
необходимо  обеспечить  присутствие  графического  ROMа  в  вашем
компьютере. Это можно сделать  двумя  способами, или вставить сам
ROM в компьютер, или загрузить его  копию  в  оперативную память.
Графический  ROM  может  находиться  в  одном  из двух состояний:
включен  или  выключен.  Включается (выключается) графический ROM
командой  *FX162  (*FX162  128).   В   начале   сеанса  работы  с
графическим ROMом его необходимо включить.
   Все новые графические команды имеют следующий формат :

   *<имя команды> [<аргумент1>(,)<аргумент2>(,)...(,)<аргументN>]

   т.е  все  команды  начинаются  на  звездочку  и,  кроме  того,
некоторые команды могут иметь аргументы.  В  качестве  аргументов
можно  использовать  или числа, или целые переменные с именами от
А% до Z%.  Аргументы должны быть отделены друг от друга пробелами
или  запятыми.  В  главе  5,  посвященной  операционной  системе,
подробно  описаны  вопросы, связанные  с  использованием  команд,
начинающихся символом * в программах на Бейсике.
   Список  дополнительных  графических  команд можно  вывести  на
экран с помощью команды 
              *HELP GRAPHICS

   В  этом  списке,  кроме  имени   команды,  указан  так  же  ее
синтаксис.
   Рассмотрим  теперь  более подробно некоторые  из  возможностей
графического ROMа.


               4.3.2   Спрайты

   Что  такое  спрайты?  В  настоящее   время  спрайты  входят  в
стандартный  набор  графических средств практически  любой  ПЭВМ.
Спрайт - это небольшой графический обьект, который вы сами можете
создать и использовать  его  в  своих  программах.  Спрайты можно
выводить   в   любое   место   экрана  и  перемещать  по  экрану.
Достоинством спрайтов является тот факт, что они выводятся как бы
поверх  существующего  изображения,  а  не вместо него. С помощью
спрайтов  можно, например, легко организовать  перемещение  одних
графических  обьектов   на   фоне   других.  Спрайты  могут  быть
реализованы аппаратно  или  программно.  В  первом случае выводом
спрайтов  на  экран  занимается специальный видеопроцессор,  а  в
случае программной реализации работа  видеопроцессора имитируется
специальной программой.
   На  примере  графического   рома  вы  можете  познакомиться  с
программной реализацией спрайтов.
   Работа со спрайтами включает в себя следующие элементы :
   - резервирование памяти для хранения образов спрайтов;
   - создание и удаление спрайтов;
   - вывод спрайтов на экран;
   - запись образов спрайтов на устройства внешней памяти;
   - загрузка образов спрайтов в оперативную память.

             
   Резервирование  памяти для спрайтов. Эту  операцию  необходимо
проводить  в   начале   каждого   сеанса   работы  со  спрайтами.
Резервирование области памяти компьютера осуществляется с помощью
команды  *RESERVE.  Все  спрайты  (  точнее  сказать  определения
спрайтов ),  которые  вы  будете  создавать  и  (или) загружать с
диска,  будут  автоматически  размещаться  в этой области. Формат
команды следующий :

            *RESERVE <адрес начала области> <адрес конца области>

   Область должна находиться в пределах  от &Е00 до &2FFF (адреса
должны   быть  заданы  шестнадцатиричными  числами).  Вот  пример
использования команды

            *RESERVE 2500 2FC0

   Для  тех,  кто  плохо  знаком   с  картой  памяти  компьютера,
рекомендуем следующий способ резервирования памяти: 

            10 MODE 1
            20 LE=1000
            30 DIM AREA LE
            40 OSCLI "RESERVE "+STR¤~AREA+" "+STR¤~(AREA+LE)
            50   . . . . . . . . . . . . .
            60     продолжение программы
            70   . . . . . . . . . . . . .

   В   приведенном   примере  первые  четыре   строки   программы
резервируют область памяти в 1000  байт.  В  строке  20  задается
длина блока. В строке 30 с помощью команды DIM резервируется блок
памяти  заданной  длины.  А  в  строке  40  границы  этого  блока
передаются в качестве параметров команде *RESERVE. Таким способом
вы   можете   зарезервировать   для   спрайтов   область   памяти
произвольной  длины,  не  указывая  адреса границ области в явном
виде.  (Информация  о  встроенной  функции   STR¤   приводится  в
приложении).
   Если  в процессе создания новых  спрайтов  выяснится,  что  вы
зарезервировали  слишком  мало  памяти,  графический  ROM  выдаст
сообщение
                        No  room  

   В этом случае для продолжения  работы   необходимо или удалить
ненужные  спрайты  с  помощью команды *RESET, или зарезервировать
большее  количество памяти, для  чего  надо  выполнить  следующую
последовательность действий:  записать  все  спрайты  на  диск  с
помощью  команды  *PUT;  удалить все спрайты из памяти компьютера
командой *RESET 0,31; зарезервировать  область  памяти требуемого
размера и загрузить спрайты с диска с помощью команды *GET.


   Создание  и  удаление  спрайтов.  К  созданию  спрайтов  можно
приступить только после того, как  была  зарезервирована  область
памяти с помощью команды *RESERVE. 
   Создавать спрайты можно только в первых трех экранных режимах,
т.е. в 0,1 или во 2-ом. 
   Спрайты  создаются  в  так  называемом редакторе спрайтов. Для
входа в редактор необходимо подать команду

           *DESIGN <номер спрайта> <ширина> <высота>

 где   номер спрайта    - число от 0 до 31;
       ширина и высота  - числа от 1 до 3.
   Войдя   в   редактор, вы  увидете,  что  на  экране  появилась
прямоугольная сетка  и  палитра. Ваша задача состоит в том, чтобы
заполнить некоторые ячейки сетки  цветами из палитры. Выбрать цвет
в  палитре  вы  можете  с   помощью   клавиш  со  стрелками.  Для
перемещения курсора по сетке используйте клавиши:

           X - вправо
           Z - влево
           : - вверх
           / - вниз.

   Нажав на клавишу RETURN вы  закрасите выбранную ячейку текущим
цветом, а нажав на SHIFT очистите ее.
   По мере заполнения сетки вы увидете, что в правом верхнем углу
экрана  появляется уменьшенная копия вашего рисунка. Это  и  есть
тот спрайт, созданием которого вы занимаетесь.
   Когда работа  будет  закончена, вы  можете  перейти к созданию
следующего  (по  номеру)  спрайта  с  помощью  клавишы  TAB,  или
вернуться в BASIC, нажав на ESCAPE.
   Для изменения уже существующего спрайта  надо войти в редактор
спрайтов с помощью команды

           *ALTER <номер спрайта> (<новый номер>)

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

           *RESET <номер спрайта> (<до номера>)

   С помощью этой команды вы можете удалить как отдельный спрайт,
так и группу спрайтов, если  указать  два  параметра.  Для  того,
чтобы  удалить  из  памяти  компьютера  все  спрайты можно подать
команду
          >*RESET 0,31


   Вывод спрайтов на экран. Выводить  спрайты на экран необходимо
в том же экранном режиме, в  котором они были созданы. Для вывода
спрайта предназначена команда 
           *IN <номер спрайта> <X,Y>

где X,Y - определяют место  на экране, куда будет выведен спрайт.
Если  вы  подадите  несколько  команд *IN  с  разными  значениями
координат, то вы увидете, что  каждая  новая  команда  заставляет
спрайт  переместиться  со старого места на новое. Важно отметить,
что такие перемещения  спрайтов  не  вызывают никаких изменений в
старом содержимом экрана. То есть спрайты выводятся как бы поверх
существующего изображения.
   Для того чтобы убрать спрайт с экрана надо подать команду

           *OUT <номер спрайта>

   Кроме   команды   *IN   для  вывода  спрайта  на  экран  можно
воспользоваться командой 

           *IMAGE <номер спрайта> <X,Y>

   В  отличие  от команды *IN,  после  подачи  нескольких  команд
*IMAGE с разными  координатами  на  экране будут появляться новые
копии спрайтов.


   Запись спрайтов на диск и  загрузка  с диска. Определения всех
спрайтов,  которые  вы  создали,  находятся  в оперативной памяти
компьютера. Если вы хотите сохранить некоторые из определений для
дальнейшей  работы,  необходимо записать их на  диск.  Это  можно
сделать с помощью команды

            *PUT <имя файла> <номер спрайта> (<до номера>)

   Для записи всех спрайтов в файл Sprites можно подать следующую
команду:

           >*PUT "Sprites",0,31

   Для загрузки определений спрайтов с диска используется команда

            *GET <имя файла>

   Перед  тем как загружать определения  спрайтов  в  оперативную
память,  необходимо  зарезервировать  для  них  место  с  помощью
команды *RESERVE.


           4.3.3 Команды общего назначения

   В  графических  экранных  режимах  принята  следующая  система
координат:  левая нижняя точка экрана  имеет  координаты  0,0,  а
правая верхняя - 1279,1023 (см.4.2.1). С помощью команды

            *SCALE <Xл> <Yн> <Xп> <Yв>

вы  можете  изменить систему координат,  задав  новые  координаты
левой нижней и  правой верхней точек экрана. Кроме того с помощью
команды 
            *ROTATE (<угол>) (<X,Y>)

вы   можете   заставить  все  последующие   графические   команды
выполняться с поворотом вокруг точки  X,Y  на  указанный угол (по
часовой стрелке).
   Команда
             *PRINT <строка> <X,Y> (<ширина><высота>)

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

             *CIRCLE <X,Y> <радиус>,

где X,Y - координаты центра.  Цвет  окружности задается с помощью
команды GCOL. Команда

        *ARC <K> <X,Y> <ширина, высота> <нач.угол, кон.угол>

позволяет нарисовать дугу элипса с  центром  в  X,Y,  с заданными
шириной, высотой, начальным и конечным углами. Угол отсчитывается
от  вертикали  по часовой стрелке. Параметр K уточняет конкретную
функцию команды и  действует  аналогично параметру в команде PLOT
(см.4.2.3).
   Команда 
             *FILL <X,Y> <логический номер цвета>

Закрашивает экран, начиная с точки  с  координатами X,Y, цветом с
указанным  логическим номером. Особенностью этой команды является
то, что она меняет цвет только у тех точек, которые были окрашены
тем  же  цветом,  что  и  точка  (X,Y),  а  все  остальные  цвета
рассматривает как граничные. Таким образом с помощью этой команды
можно легко  окрасить  замкнутые,  точнее  окруженные границей из
других цветов, области произвольной формы.
 были окрашены
тем  же  цветом,  что  и  точка  (X,Y)─PL63
[an error occurred while processing this directive]