Элементарная графика 1993 г.

Элементарная графика на БЕЙСИКе - команды Бейсика, связанные с графикой. Управление цветом и режимами печати. Печать графических примитивов. Сканирование экрана.


                  1.3   КОМАНДЫ БЕЙСИКА, СВЯЗАННЫЕ С ГРАФИКОЙ.

                1.3.1 Команды управления цветом и режимами печати.

                              CLS   (CLEAR SCREEN).
                              ~~~~~~~~~~~~~~~~~~~~~
              Эта команда служит для очистки экрана. Она обнуляет содер-
         жимое ячеек  той области  памяти, в  которой хранится  экранное
         изображение (с 16384 по 22527). Таким образом, в результате  ее
         работы с  экрана стирается  пиксельное изображение.   Несколько
         по-другому она обходится  с цветовыми атрибутами.  В результате
         этой команды цвет может не только остаться, но и даже изменить-
         ся.  Дело  в  том,  что  информацию  о цвете включенных (INK) и
         выключенных  (PAPER)  пикселов  компьютер  черпает из системной
         переменной  ATTR_P  (23693  =  5C8DH),  в  которой  установлены
         "постоянные" значения этих атрибутов.  (Бывают еще  "временные"
         значения, о которых мы скажем чуть ниже). Формат, в котором ат-
         рибуты INK, PAPER, BRIGHT и FLASH хранятся в системной перемен-
         ной ATTR_P соответствует Рис 8.

             Очень часто команду CLS используют не для того, чтобы очис-
         тить экран, а для  того, чтобы установить на  экране постоянные
         цветовые  атрибуты.  Именно  для  этой  цели команда CLS широко
         применяется в первых строках БЕЙСИК-программы, например:

                           10 INK 6: PAPER 1:
                           20 CLS
                           ..................

                                   INK n
                                   ~~~~~
              Этот оператор служит для задания цвета, которым на  экране
         изображаются символы или  графические элементы -  одним словом,
         он  определяет  цвет  включенных  пикселов. После оператора INK
         должен стоять параметр n, который может быть как целым  числом,
         так и выражением. Этот  параметр задает цвет и  может принимать
         значения от 0 до 9. Для  INK от 0 до 7 кодовые  значения цветов
         показаны в табл. 1 на стр.17. Но возможны еще INK 8 и INK 9.

              Цвет INK 8 называют "транспарантным". В этом случае символ
         на экране печатается с тем цветом, который существовал в данном
         знакоместе  до  этой  печати.  Очень  удобно, когда надо что-то
         напечатать  по  готовому  цветному  изображению.  Не  надо  для
         каждого знакоместа перезадавать новый цвет.

              Цвет INK 9 называют "контрастным". В этом случае символ на
         экране  печатается  с  таким  цветом, который наилучшим образом
         контрастирует  с  тем  цветом  PAPER,  который имеется в данном
         знакоместе в данный момент. Это тоже очень удобно при печати по
         готовому изображению.

              Если посмотреть на рис. 8, то видно, что для задания цвета
         INK  используются  три  младших  бита,  с помощью которых можно
         задать цвета  от 0  до 7.  Остается вопросом как можно хранить
         цвета INK 8 и INK 9.

              Для хранения постоянных "транспарантных" атрибутов, служит
         системная переменная MASK_P (23694 = 5C8EH). В ней должны  быть
         включены  те  биты,   которые  соответствуют   "транспарантным"
         атрибутам. Так,  для INK  8 должны  включиться биты  0...2 (три
         младших бита).

              Для  того,  чтобы  компьютер  знал  о  том, что Вы избрали
         постоянный  цвет  INK  "контрастным",  служит  другая системная
         переменная - P_FLAG  (23697 = 5C91H).  В ней для  этого выделен
         5-ый бит, который включается при подаче команды INK 9.

              Оператор INK может применяться двумя способами. Во-первых,
         он может быть самостоятельной командой и в этом случае оказыва-
         ет длительное действие - не только на ближайшую команду  печати
         или рисования, но и на все последующие, пока не будет  изменен.
         По такой команде изменяется содержимое упомянутой выше  систем-
         ной переменной ATTR_P  (23693 = 5C8DH),  определяющей установку
         "постоянных" цветовых атрибутов.

              Во-вторых,  оператор  INK  может  быть  не самостоятельной
         командой, а частью команды PRINT. В этом случае INK называют не
         командой, а "квалификатором  оператора PRINT". Здесь  он задает
         не  "постоянные"   значения  цветового   атрибута,  а    только
         "временные",  которые  действуют  только  для данного оператора
         PRINT и все. "Временные"  значения хранятся в другой  системной
         переменной -  ATTR_T (23695  = 5C8FH),  но формат  имеют тот же
         (см. рис.  8). INK  n в  качестве квалификатора  PRINT требует,
         чтобы после него обязательно стояла точка с запятой.

              Сравните:
                          10 INK 7: PRINT "ZX-Spectrum"
              и
                          10 PRINT INK 7; "ZX-Spectrum"

              Определять "временные" атрибуты можно не только с парамет-
         ром n от 0 до  7. Здесь также возможно задание  цвета "транспа-
         рантным" (INK 8) и "контрастным" (INK 9).

              Для хранения временных "транспарантных" атрибутов,  служит
         системная переменная MASK_T (23696 = 5C90H). В ней должны  быть
         включены те биты, которые соответствуют "транспарантным"  атри-
         бутам. Так, для INK 8 должны включиться биты 0...2.

              Для  того,  чтобы  компьютер  знал  о  том, что Вы избрали
         временный  цвет  INK  "контрастным",  в  системной   переменной
         P_FLAG (23697 = 5C91H)  выделен  4-ый бит,  который включается,
         когда в операторе PRINT встречен квалификатор INK 9; .

                                     PAPER n
                                     ~~~~~~~
              Оператор PAPER определяет цвет выключенных пикселов  экра-
         на. За ним также идет  параметр n (0...9). Почти все  сказанное
         выше об операторе INK относится  и к оператору PAPER.   Он тоже
         может  быть  самостоятельной  командой  и задавать "постоянные"
         значения, действующие  до тех  пор, пока  не будут  изменены, а
         может быть и квалификатором оператора PRINT и задавать  времен-
         ные значения, действующие только на этот оператор PRINT.

         10 PAPER 2: CLS     -          самостоятельная команда.
         20 PRINT INK 6; PAPER 1; "ZX-SPECTRUM" -  квалификатор.

              Один оператор PRINT может иметь сколько угодно квалифика-
         торов - они должны отделяться друг от друга точкой с запятой.

              Естественные отличия  PAPER от  INK выражаются  в том, что
         информация об их установках  хранится в системных переменных  в
         разных битах. Так, для цвета PAPER они таковы:

              а) постоянные значения:

                 - параметр цвета от 0 до 7 - в битах 3...5 системной
                   переменной  ATTR_P (23693 = 5C8DH);

                 - для "транспарантного" цвета PAPER 8 должны быть
                   включены биты 3...5 системной переменной
                   MASK_P (23694 =  5C8EH);

                 - для цвета PAPER, контрастного к тому цвету INK,
                   который уже имеется в данном знакоместе, т. е. для
                   команды PAPER 9 включается бит 7 флаговой системной
                   переменной P_FLAG (23697 = 5C91H).

              б) временные значения:

                 - параметр цвета от 0 до 7 - в битах 3...5 системной
                   переменной  ATTR_T (23695 = 5C8FH);

                 - для PAPER 8 должны быть включены биты 3...5 системной
                   переменной MASK_T (23696 =  5C90H);

                 - значению PAPER 9 соответствует включенный бит 6
                   системной переменной P-FLAG (23697 = 5C91H).

                                  BRIGHT n
                                  ~~~~~~~~
              Этот  оператор  задает  яркость  при  печати в знакоместе.
         Параметр n может принимать значения 0,1 и 8.

              BRIGHT 0 - яркость выключена.
              BRIGHT 1 - яркость включена.
              BRIGHT 8 - атрибут яркости при печати или рисовании в
                         данном знакоместе устанавливается таким же,
                         каким он был до этого.

              Он также,  как и  PAPER и  INK может  быть самостоятельной
         командой,  задающей  постоянное  значение  атрибуту  яркости, а
         может  быть  и  квалификатором   оператора  PRINT  и   задавать
         временное значение.

              а) постоянное значение:

                 - параметр яркости 0 или 1 - устанавливается в 6-ом
                   бите системной переменной  ATTR_P (23693 = 5C8DH);

                 - для "транспарантного" значения BRIGHT 8 должен быть
                   включен биты 6 системной переменной
                   MASK_P (23694 = 5C8EH);

              б) временные значения:

                 - параметр яркости 0 или 1 - хранится в 6-ом бите
                   системной переменной  ATTR_T (23695 = 5C8FH);

                 - для "транспарантного" значения BRIGHT 8 должен быть
                   включен бит 6 системной переменной
                   MASK_T (23696 =  5C90H);

                                     FLASH n
                                     ~~~~~~~
              Этот оператор задает режим мигания пикселов в знакоместе.
         Включенные пикселы выключаются (принимают цвет PAPER), а выклю-

         ченные включаются (принимают цвет INK) и так далее.  Параметр
         n, как и для оператора BRIGHT может принимать значения 0,1 и 8.

              FLASH 0  - режим мигания отключен.
              FLASH 1  - режим мигания включен.
              FLASH 8  - режим мигания при печати или рисовании в
                         данном знакоместе устанавливается таким же,
                         каким он был до этого.

              Оператор FLASH n может образовывать самостоятельную
         команду или квалификатор оператора PRINT:

              а) постоянное значение:

                 - режим мигания 0 или 1 - устанавливается в 7-ом
                   бите системной переменной  ATTR_P (23693 = 5C8DH);

                 - для "транспарантного" значения FLASH 8 должен быть
                   включен бит 7 системной переменной
                   MASK_P (23694 = 5C8EH);

              б) временные значения:

                 - режим мигания 0 или 1 - хранится в 7-ом бите
                   системной переменной  ATTR_T (23695 = 5C8FH);

                 - для "транспарантного" значения FLASH 8 должен быть
                   включен бит 7 системной переменной
                   MASK_T (23696 =  5C90H);

                                   INVERSE n
                                   ~~~~~~~~~~
              Оператор INVERSE задает режим  печати на экране "с  инвер-
         сией" символов или без нее.  В отличие от INK, PAPER,  BRIGHT и
         FLASH этот оператор не имеет соответствующего цветового атрибу-
         та. То есть, в памяти компьютера не запоминается, какому знако-
         месту  какой  режим  INVERSE  соответствует.  Одним словом, это

         только режим печати и не более того.

              INVERSE 0 - режим выключен.
              INVERSE 1 - режим включен.

              При печати "с  инверсией" включенные пикселы  изображаются
         выключенными, т.е.  имеют цвет  PAPER и  наоборот - выключенные
         изображаются включенными и имеют цвет INK.

              Также,  как  и  прочие  рассмотренные  команды  управления
         цветом,  INVERSE  может  иметь  постоянное  действие   (команда
         INVERSE  n)  или  временное  действие  (квалификатор INVERSE n;
         оператора PRINT).

              Информация  об  установленном  режиме  INVERSE хранится во
         флаговой системной  переменной P_FLAG  (23697 =  5C91H). Бит  2
         этой переменной  определяет временную  установку режима  (0 или
         1), а бит 3 - постоянную установку.

                                     OVER n
                                     ~~~~~~
              Оператор OVER задает режим печати на экране "с наложением"
         или без него.

              OVER 0 - режим выключен.
              OVER 1 - режим включен.

                                                    Таблица  2
            --------------T---------------------T--------------------¬
            ¦             ¦           OR        ¦         XOR        ¦
            +-------------+-----T---T-----T-----+----T-----T----T----+
            ¦  Бит 1      ¦  0  ¦ 1 ¦  0  ¦ 1   ¦  0 ¦  1  ¦ 0  ¦ 1  ¦
            ¦             ¦     ¦   ¦     ¦     ¦    ¦     ¦    ¦    ¦
            ¦  Бит 2      ¦  0  ¦ 0 ¦  1  ¦ 1   ¦  0 ¦  0  ¦ 1  ¦ 1  ¦
            ¦             ¦     ¦   ¦     ¦     ¦    ¦     ¦    ¦    ¦
            ¦  Результат  ¦  0  ¦ 1 ¦  1  ¦ 1   ¦  0 ¦  1  ¦ 1  ¦ 0  ¦
            L-------------+-----+---+-----+-----+----+-----+----+-----

              Наложение осуществляется по логическому принципу "ИСКЛЮЧА-
         ЮЩЕГО ИЛИ" - обозначется XOR. Если оба соответствующих  пиксела
         были выключены, то результирующий пиксел - выключен.  если один
         из составляющих  пикселов был  включен, то  результирующий тоже
         включен, но если оба  пиксела были включены, то  результирующий
         выключен.  В  этом  заключается  отличие  действия   логической
         команды XOR от команды OR. Сравните их действие по таблице 2.

              Таким образом, если Вы  в режиме OVER 1  напечатаете некий
         символ  поверх  самого  же  себя,  то  получите пробел. В этом,
         кстати, заключается довольно эффективный прием стирания. Можно,
         конечно, стереть изображение в знакоместе напечатав пробел,  но
         это не всегда возможно. Например, Вам надо перемещать на экране
         Вашего героя по какому-то фону. Перемещение состоит в  последо-
         вательности следующих действий:

                       - печать в текущей координате;
                       - стирание в текущей координате;
                       - печать в соседней координате;
                       - и так далее.

              Первую печать  Вашего героя  поверх фона  Вы сделаете  без
         проблем, включив режим OVER 1, а вот стирание с помощью пробела
         здесь  не  пройдет,  т.к.  "погибнет"  и  нижележащее (фоновое)
         изображение.  На  помощь  приходит  повторная  печать  того  же
         изображения в том же месте  в режиме OVER 1. Теперь  наложенное
         изображение  исчезнет,  а  фоновое  (исходное)  останется   без
         изменений.

              Как  и  INVERSE,  этот  оператор не имеет соответствующего
         цветового атрибута. То есть, в памяти компьютера не запоминает-
         ся, какому знакоместу какой режим OVER соответствует. Это  тоже
         только режим печати. Как и INVERSE, оператор OVER n может  быть
         самостоятельной командой, а  может использоваться как  квалифи-
         катор оператора PRINT.

              Информация об установленном  режиме OVER хранится  тоже во
         флаговой системной переменной P-FLAG (23697 = 5C91H). В таблице
         3 приведена побитовая карта этой системной переменной:

                    Раскладка системной переменной P-FLAG.
                                                      Таблица 3.
             ---------T--------------- ----------T-----------------¬
             ¦  Бит   ¦ Назначение               ¦ Характер        ¦
             +--------+--------------------------+-----------------+
             ¦   0    ¦ Указатель режима OVER    ¦ Временный       ¦
             ¦   1    ¦ Указатель режима OVER    ¦ Постоянный      ¦
             ¦   2    ¦ Указатель режима INVERSE ¦ Временный       ¦
             ¦   3    ¦ Указатель режима INVERSE ¦ Постоянный      ¦
             ¦   4    ¦ Указатель режима INK 9   ¦ Временный       ¦
             ¦   5    ¦ Указатель режима INK 9   ¦ Постоянный      ¦
             ¦   6    ¦ Указатель режима PAPER 9 ¦ Временный       ¦
             ¦   7    ¦ Указатель режима PAPER 9 ¦ Постоянный      ¦
             L--------+--------------------------+------------------

                                   BORDER n
                                   ~~~~~~~~~
              Команда BORDER n  определяет цвет, в  который окрашивается
         внешняя рамка (бордюр) экрана. Этих цветов может быть 8. У этой
         команды есть две характерных особенности, о которых  необходимо
         помнить.

              Во-первых, как ни странно, к бордюру относятся и нижние  2
         строки экрана ("системное окно",  о котором мы говорили  выше в
         разделе 1.2.1), поэтому плохо рассчитанная команда BORDER может
         подпортить то, как выглядят эти 2 строки.

              Во-вторых, окрашивание бордюра экрана производится не так,
         как окрашивание самого экрана. Если для экрана параметры  цвета
         по каждому знакоместу хранятся в соответствующих ячейках памяти
         и процедуры ПЗУ, обслуживающие экран, черпают информацию  отту-
         да, то  бордюр исполняется  не процедурами  ПЗУ, а  аппаратными
         средствами. С точки  зрения архитектуры компьютера  экран явля-
         ется одним внешним устройством, а  бордюр - как бы совсем  дру-
         гим, которое подключено  через внешний порт  254 (FE).   Попод-
         робнее мы расскажем об этом в главе 3.

              Поэтому окрасить бордюр из БЕЙСИКа можно не только  коман-
         дой BORDER, но и выдав  байт на внешний порт с  помощью команды
         OUT, например:
                             OUT 254,1

              С другой сторны, между командами BORDER n и OUT 254,n есть
         и существенная разница. Цвет  бордюра может иметь как  постоян-
         ный, так и кратковременный характер. Команда BORDER задает цвет
         "постоянным".  Он  запоминается  в  системной переменной BORDCR
         (23624 = 5C48H). Команда же OUT 254,n имеет очень кратковремен-
         ный характер. Фактически она срабатывает только по фронту  сиг-
         нала, пошедшего на внешний порт, после чего цвет опять  восста-
         новится в соответствии с BORDCR. Так что изменить цвет  бордюра
         командой OUT, не изменив системную переменную BORDCR не  удаст-
         ся. О  том, как  используется способность  бордюра менять  свой
         цвет по фронту сигнала, Вы  можете судить по тем цветным  поло-
         сам, которые  Вы видите  на экране  в момент  загрузки-выгрузки
         программ. Разбору  управления цветными  полосами на  бордюре мы
         посвятили  раздел  в  нашей  более  ранней  книге "Практикум по
         программированию в машинных кодах".

                                   TAB n
                                   ~~~~~~
              Оператор TAB n  (n=0...31) в качестве  самостоятельной ко-
         манды не применяется. Он служит в качестве квалификатора опера-
         тора PRINT и определяет, с какой позиции в текущей строке  надо
         выполнить печать.

              Попробуйте дать прямую команду:

                 PRINT TAB 10; "ZX-Spectrum".

              Можете заменить параметр 10  например на 20.

                                   AT y,x
                                   ~~~~~~
              Как и квалификатор TAB,  AT y,x самостоятельно без  опера-
         тора PRINT не применяется,  но является более мощным  и исполь-

         зуется значительно  чаще. Он  задает координату  позиции печати
         (знакоместа) на экране. Параметр y задает координату по  верти-
         кали (номер экранного ряда, в котором надо выполнить печать) от
         0 до  21. Параметр  x задает  координату по  горизонтали (номер
         экран- ного столбца) от 0 до 31.

              Пример: PRINT INK 6; PAPER 1; AT 10,12; "ZX-Spectrum" .

              В качестве параметров  y и x  могут стоять не  обязательно
         числа,  но  и  арифметические,  логические  или  алгебраические
         выражения, если они дают целочисленный результат, не  выходящий
         за допустимые пределы по x и y.

              Иногда в программах бывает нужно установить позицию печати
         в какую-то точку, но саму печать при этом пока делать не требу-
         ется. Это можно сделать с помощью оператора AT, дав команду на-
         печатать пустую строку, например:

                              PRINT AT (10,12); ""

                      Прочие квалификаторы оператора PRINT.
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

              Рассматривая команды и квалификаторы, управляющие цветом и
         координатами  того,  что  воспроизводится  на экране, мы должны
         также сказать еще о трех квалификаторах. Это "," (запятая), ";"
         (точка с запятой) и "'" (апостроф).

              В  отличие  от  прочих  ранее рассмотренных квалификаторов
         типа INK, PAPER, AT... и др. эти квалификаторы не надо отделять
         друг  от  друга,  поскольку  они  сами  являются разделителями.
         Рассмотрим их по-порядку.

               "Точка с запятой".
               ~~~~~~~~~~~~~~~~~~
              Когда в операторе  PRINT встречается этот  символ-раздели-
         тель,  это  означает  указание  компьютеру  выполнить  печать в
         ближайшем справа  знакоместе от  предыдущей позиции  печати, то
         есть печатать  в сплошную  строку. Только  если текущая  строка
         закончилась, компьютер перейдет  к печати на  следующей строке.
         Этот квалификатор встречается наиболее часто. Попробуйте:

                       PRINT AT 10,14; "1"; "2"; "3"; "4"

              "Запятая"
              ~~~~~~~~~
              Мысленно разделите экран по вертикали на две равные части.
         Представьте  себе,  что  каждый  ряд  на экране состоит из двух
         половин - левой и правой (по шестнадцать знакомест в каждой).

               Если в операторе PRINT компьютер встретит этот квалифика-
         тор, то очередную  печать он начнет  от начала правой  половины
         экранного ряда, если предшествующая печать была на левой  поло-
         вине. Если же печать уже была на правой половине, то он  перей-
         дет на новую строку и начнет печать с ее начала. Таким образом,
         действие этого квалификатора эквивалентно TAB 16. Попробуйте:

                       PRINT AT 10,14; "1", "2", "3", "4"

              "Апостроф"
              ~~~~~~~~~~
              Это самый простой из всех квалификаторов - он дает  коман-
         ду начать печать с новой строки.

                       PRINT AT 10,14; "1" ' "2" ' "3" ' "4"

                1.3.2 Команды печати графических примитивов.

              Из стандартного БЕЙСИКа  компьютера "ZX-Spectrum" Вам  до-
         ступны четыре типа графических примитивов: точка, линия,  дуга,
         окружность.

                                PLOT x,y
                                ~~~~~~~~~
              Команда служит для печати точки на экране в координатах  y
         (по вертикали) и x (по горизонтали). 0 < x < 255 ; 0 < y < 175.

         Мы уже говорили о том, что когда координаты заданы не в  знако-
         местах, а в пикселах, то отсчет по вертикали идет снизу  вверх,
         причем нижние 2 ряда,  являющиеся "системным окном" из  системы
         координат выпадают.

              С оператором PLOT могут быть использованы и  квалификаторы
         оператора PRINT, такие  как INK, PAPER,  OVER и т.п.  Интересно
         отметить,  что  печать  точки  по  точке  при включенном режиме
         OVER 1 приводит к ее стиранию. Например:

                         10 PLOT 120, 120
                         15 PAUSE 10
                         20 PLOT OVER 1; 120,120
                         30 PAUSE 10
                         40 GO TO 10

              Команда PLOT имеет одно побочное действие. После ее испол-
         нения  в  системную  переменную  COORDS (23677=5C7DH) заносятся
         координаты последней напечатанной точки.

                          DRAW x,y или DRAW x,y,z
                          ~~~~~~~~~~~~~~~~~~~~~~~~
              Команда служит для рисования на экране отрезков прямых или
         дуг окружностей и имеет два формата. DRAW x, y - служит для ри-
         сования отрезков прямых. DRAW x,y,z - для рисования дуг  окруж-
         ностей. И  та и  другая команды  проводят линию  от той  точки,
         которая была напечатана последней и координаты которой хранятся
         в  системной  переменной  COORDS  (23677=5C7DH)  к новой точке,
         которая отстоит от исходной на x пикселов по горизонтали и на y
         пикселов по вертикали. Таким образом, параметры x и y определя-
         ют не координаты конца  отрезка (дуги) на экране,  а "смещение"
         конца отрезка (дуги) от его начала и могут быть отрицательными.

              Параметр z в команде для рисования дуг окружностей  задает
         фактор кривизны дуги, а  точнее говоря угол дуги,  измеренный в
         радианах. Чем больше этот угол, тем больше кривизна дуги.  Если
         он  равен  нулю,  то  фактически  дуга имеет нулевую кривизну и
         превращается в прямую линию.

              Не очень удобно задавать угол дуги в радианах. В  градусах
         работать все-таки привычнее, поэтому обычно пользуются тем, что
         "Спектрум" понимает, что такое число "пи" и вместо параметра  z
         подставляют выражение a*PI/180. Получается:

                         DRAW x,y,a*PI/180

              Здесь параметр "a" можно задавать в градусах.

              Обратите также внимание на ряд следующих обстоятельств:

              1. Параметры x и y могут быть выражены как числом, так   и
         числовыми или алгебраическими выражениями. Важно только,  чтобы
         после расчета этих выражений результат получался бы целочислен-
         ным и чтобы при рисовании отрезка (дуги) не происходил бы выход
         за пределы экранной плоскости.

              2. Для работы команды DRAW совершенно неважно в результате
         какого действия была получена последняя ранее напечатанная точ-
         ка - то ли в результате команды PLOT, то ли в результате другой
         команды DRAW, то ли  в результате команды CIRCLE,  которую рас-
         смотрим чуть ниже. Для работы DRAW важно только то, что  содер-
         жится в системной переменной COORDS. Можете даже и сами устано-
         вить в ней то, что Вам нужно, с помощью команды POKE.

              3. Команда  DRAW, рисуя  линию (дугу),  не включает  в нее
         исходную точку, взятую из  COORDS. Предполагается, что она  уже
         и  так  нарисована.  При  рисовании  это действительно не очень
         важно, но при стирании на это нужно обратить внимание.

              4.  Закончив  работу,  команда  DRAW оставляет в системной
         переменной  COORDS  координаты  последней  точки. Новая команда
         DRAW будет работать от той точки, в которой закончила  работать
         предыдущая.

              5. Команда DRAW, как и команда PLOT, допускает использова-
         ние внутри  себя квалификаторов  оператора PRINT  - INK, PAPER,
         FLASH, BRIGHT, OVER, INVERSE.

                                 CIRCLE x,y,r
                                 ~~~~~~~~~~~~
              По этой команде на экране изображается окружность с  коор-
         динатами центра x,y, имеющая радиус r. Если радиус равен  нулю,
         то окружность вырождается в обыкновенную точку. Все  замечания,
         сделанные к команде DRAW, могут быть отнесены и к этой команде.

                   1.3.3 Команды для сканирования экрана.

              При работе с графикой  иногда необходимо не только  что-то
         напечатать, но и  из программы определить  что же напечатано  в
         том или ином знакоместе или  в той или иной координате.  Факти-
         чески это задача о сканировании экрана. В БЕЙСИКе Вы имеете ряд
         возможностей, с  помощью которых  можно кое-что  сделать,  хотя
         надо заметить, что они достаточно редко применяются на  практи-
         ке. Обычно, когда речь идет о необходимости сканирования  экра-
         на, мы имеем дело с развитой системой или с достаточно серьезно
         подготовленной  программой.  В  этих  случаях  редко используют
         БЕЙСИК, а  применяют вместо  него машинный  код. Тем  не менее,
         такие возможности в БЕЙСИКе есть  и наш обзор был бы  неполным,
         если бы мы на них не указали.

              Итак, для сканирования экрана из БЕЙСИКа в Вашем  распоря-
         жении есть три функции - POINT, ATTR и SCREEN$. Все они требуют
         при  вызове  указания  координат  и  по окончании работы выдают
         результат, который может быть проанализирован.

                                  POINT x,y
                                 ~~~~~~~~~~
              Эта очень простая функция проверяет включен или  нет  пик-
         сел с координатами  x,y (06 THEN GO TO 20
              40  PRINT AT 0,0; A$
              50  FOR s=0 TO LEN A$*8
              60  FOR t=175 TO 168 STEP -1
              70  IF POINT (s,t)=1 THEN GO SUB 200
              80  LET y=y+e
              90  NEXT t
             100  LET y=0: LET x=x+e:
             110  NEXT s
             120  LET f=90: LET e=2: LET x=0: GO TO 50
             200  PLOT x,f -(y+e): DRAW 0,e
             210  PLOT x,f-y: DRAW e,0
             220  PLOT x+e,f-y: DRAW 0,e
             230  PLOT x+e,f-(y+e): DRAW -e,0
             240  LET e=e+0.5
             250  RETURN

              По запросу впечатайте слово длиной до 10 символов.

              10  LET y=0
              20  BORDER 0
              30  PAPER 0
              40  INK 7
              50  CLS
              60  PRINT "WORD?"
              70  INPUT A$
              80  CLS
              90  IF LEN A$ > 10 THEN GO TO 60
             100  PRINT INK 0; AT 0,0; A$
             110  PLOT 0,75
             120  DRAW 255,0
             130  LET  d=LEN A$*8
             140  LET x= 127-(d*3/2)
             150  FOR s=0 TO d*8
             160  FOR t= 168 TO 175
             170  IF POINT (s,t)=1 THEN GO SUB 300
             180  LET y=y+5
             190  NEXT t
             200  LET y=0
             210  LET x=x+3
             220  NEXT s
             230  STOP
             300  FOR m=1 TO 1 STEP -1
             310  CIRCLE x,75+y,m
             320  CIRCLE x, 75-y,m
             330  NEXT m
             340  RETURN

                                ATTR (Y,X)
                                ~~~~~~~~~~~
              Эта функция позволит Вам определить, какие цветовые  атри-
         буты установлены в  интересующем Вас знакоместе  с координатами
         Y,X  (0




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Личность - Приключения Василия Ивановича в тылу врага и на фронте любви (часть 2).
От авторов - авторы и редакторы.
От авторов - от авторов: Продолжается анкетирование SPECCY населения.
Scene - интервью с группой Placebo взятое на CAFe'2002.
Повествование - Хронический неудачник.

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