Здесь продолжается, начатый в предыдущей статье, разговор об инструментальной системе THE GRAPHIC ADVENTURE CREATOR (GAC). (C) Андрей Морозов, 1997. На котором вы познакомитесь: - с основными понятиями, знание которых полез- но для создания программ в системе GAC - с главным меню системы - с возможностями графического редактора сис- темы ОСНОВНЫЕ ПОНЯТИЯ И ПРИНЦЫП СОЗДАНИЯ ПРОГРАММ Любая программа, создаваемая в GAC-е, должна быть представлена как некое пространство, по- делённое на отдельные ячейки, зоны, комнаты, называйте как хотите, но дальше я буду ис- пользовать термин ЛОКАЦИИ. Эти локации могут отличаться назначением и предполагаемыми разме- рами, но у них есть одно общее главное свойство: все локации являются вместилищем разнообразных вещей. Это могут быть персонажи или неодушевлённые предметы в игре, какая-то информация или услов- ный символ в справочной системе. Всё перечис- ленное, при использовании в CREATOR-е, будем называть ОБЪЕКТАМИ. У объектов тоже есть общее главное свойство: объекты можно перемещать из локации в локацию. Кроме этого с объектами можно производить ма- нипуляции в границах одной локации. Этому у нас будет посвящено отдельное занятие, а сейчас продолжим знакомство с необходимыми понятиями. Человека, производящего какие-то действия с объектами, а попросту - использующего написан- ную в GACе программу, назовём ИГРОКОМ (исходя из принципа: "вся наша жизнь - игра", а вирту- альная жизнь - тем более). Но программы не гри- бы, они сами не растут. Человека, написавшего ту программу, будем называть АВТОРОМ. А теперь, представьте себя Игроком, исследую- щим, к примеру, новую адвентюру. Если на пути у вас встанет скала, и вы не сможете зашвырнуть её за горизонт (в смысле, в соседнюю локацию), то не удивляйтесь этому - она ведь тяжёлая! Но, внеся в программу определённые изменения, можно было бы "жонглировать" десятком подобных скал, словно яблоками. Позволить это вам, Игроку, мо- жет Автор, изменив законы того мира, в котором вы очутились, сев играть в адвентюру. А вме- шаться в эти законы Автор может, только из- менив причинно-следственные связи в програм- ме, то, что мы в дальнейшем будем назы- вать ЛОГИКОЙ ПРОГРАММЫ. Итак, логика программы позволяет Игроку действовать определённым образом в созданном для него мире. Логика определяется УСЛОВИЯМИ, проверяющими разрешённость того или иного действия Игрока. Условия имеют свою иерархию. Существует три группы условий: - ВЫСШИЕ УСЛОВИЯ - они проверяются раньше других, ещё до совершения Игроком каких-либо действий в текущей локации, сразу как он ока- жется в ней - НИЗШИЕ УСЛОВИЯ - эти проверяются после со- вершения Игроком каких-либо действий - ЛОКАЛЬНЫЕ УСЛОВИЯ - они будут проверяться только в определённой для них локации и от них зависит, сможет ли Игрок вообще что-либо изме- нить в этой локации Внутри каждой группы, условия проверяются по порядку их ввода в программу. Более подробно об условиях мы поговорим в своё время, когда будем изучать язык создания логики программы. Теперь вы уже знаете в общих чертах о том, что из себя представляет созданная в GAC-е программа. А именно: - внутреннее пространство программы состоит из локаций - программа работает с объектами, которые на- ходятся в локациях и с которыми можно взаимо- действовать - взаимодействие с объектами определяется ло- гикой программы Перечисленные сейчас пункты можно было бы назвать принципом создания программ в инстру- ментальной системе GAC. Необходимо ещё добавить об ограничениях по- добных программ: - программа может использовать только зало- женные в неё при создании данные, ввод новых данных в процессе её эксплуатации невозможен - количество используемых объектов, локаций и прочих элементов внутреннего пространства прог- раммы, - ограничено Но пусть вас всё это не пугает. Первое огра- ничение можно обойти, запуская программу не вы- ходя из системы (мы ещё поговорим о преиму- ществах и недостатках этого способа), а второе ограничение, возможно, вас и не коснётся, пос- кольку существует куда более серъёзное ограни- чение: - свободной памяти для вашего творчества сис- тема оставляет только 21К. Это вообще-то тоже можно пережить, если соз- давать несколько независимых программ, связан- ных единым сюжетом. Например, это могут быть уровни игры (и не обязательно только адвентюры) или тематические разделы справочной системы (если вы знаете Бэйсик, то можете даже написать меню для такой системы). Опыт работы подскажет вам новые возможности GAC-а. ГЛАВНОЕ МЕНЮ СИСТЕМЫ GAC Если вы видели главное меню в исходной версии CREATOR-а (хотя бы в том же SPECTROFON-е), то заметите некоторые отличия в русифицированном варианте, улучшившие внешний вид. Выбор функций в меню (равно как и во всей системе) производится нажатием клавиши, соот- ветственно латинской букве, стоящей слева от названия функции. Некоторые режимы системы име- ют дополнительные меню, в своё время мы после- довательно их изучим, а пока лишь коротко поз- накомимся с пунктами главного. М Е Н Ю ГЛАГОЛЫ - ввод словаря команд управления прог- раммой НАРЕЧИЯ - ввод словаря дополнительных команд СУЩЕСТВИТЕЛЬНЫЕ - ввод словаря объектов ОБЪЕКТЫ - ввод описания объектов СООБЩЕНИЯ - ввод текста, выводимого программой ЛОКАЦИИ - ввод описания локации В.УСЛОВИЯ - ввод высших условий Н.УСЛОВИЯ - ввод низших условий Л.УСЛОВИЯ - ввод локальных условий ГРАФИКА - вход в режим работы с иллюстрациями НАЧАЛО - установка номера локации старта прог- раммы ЗАПИСАТЬ - сохранение результата вашей работы на диске ЗАГРУЗИТЬ - чтение сохранённых данных с диска УНИЧТОЖИТЬ - освобождение системы от всех дан- ных ENTER - старт программы не выходя из системы Ещё стоит сказать, что в правом верхнем углу отображается количество свободной памяти, ос- тавшейся в вашем распоряжении. ВНИМАНИЕ! Из-за расположенных в верхних ячей- ках памяти русского шрифта и программы под- держки дисковода, указанное вверху количество свободной памяти следует уменьшать на 2200 Бт. А теперь пора переходить к работе с инстру- ментальной системой GAC. Начнём мы с графичес- кого редактора системы. ГРАФИЧЕСКИЙ РЕДАКТОР СИСТЕМЫ GAC Вход в режим - нажатием <G> в главном меню. Вообще-то, начав с графики, мы нарушили "классическую" схему создания программ в CREA- TOR-е, поскольку иллюстрации всегда выполнялись в последнюю очередь, используя остатки памяти. Но мы не собираемся сразу делать что-то гранди- озное, и к тому же научившись рисовать в GAC-е вы уже сможете получить удовольствие от своего труда. Глянте на рисунок из RANSOM. Слабо? Несколько слов об особенностях графического редактора системы. Если вы рисовали когда-нибудь в редакторе Art Studio или ему подобных, то вы встретите здесь много знакомых вещей: курсор, графические примитивы, заливки текстурой и так далее. Но если рисунок, созданный в Art Studio, яв- ляется целостным изображением и также целиком хранится в памяти компьютера, то рисунок, соз- данный в редакторе GAC-а, представляет собой последовательность ГРАФИЧЕСКИХ КОМАНД с ука- занием координат их применения. Эта последова- тельность команд хранится в БУФЕРЕ РИСУНКА. Представьте, что вам нужно нарисовать квад- рат, затем сверху провести прямую линию и всё это обвести окружностью. На экране это всё так и будет выглядеть, но в памяти ваш рисунок сох- ранится примерно в таком виде: конец 3. команда нарисовать окружность │ 2. команда нарисовать прямую линию │ буфер 1. команда нарисовать квадрат │ начало Всякий раз, когда возникнет необходимость вы- вести рисунок на экран, последовательно будут выполняться команды из буфера рисунка. Такой способ может показаться неудобным, но у него есть свои достоинства. Итак, жмём клавишу <G> и попадаем в редактор. Дорогу нам преграждает грозный вопрос: НОМЕР РИСУНКА? Если вы испугаетесь и нажмёте клавишу BREAK, то вновь очутитесь в главном меню систе- мы. Но "мы не привыкли отступать", поэтому на запрос отвечаем нажатием клавиши <1>. Теперь рассмотрим нижнюю треть экрана. Слева направо отображается информация о текущих режи- мах редактора. Изображение карандаша, опущенного на вообра- жаемую поверхность бумаги (вначале он изображён поднятым), подскажет вам, что процедура ввода очередной графической команды незавершена, то есть положение курсора не зафиксировано повтор- ным нажатием клавиши. Это очень полезный инди- катор при построении графических примитивов (линий, прямоугольников и т.д.). Правее расположен индикатор цвета курсора, так называемые "чернила". Рядом - индикатор фона под курсором, так на- зываемая "бумага". Далее стоят указатели положения курсора по отношению к левому нижнему углу рабочей части экрана в пикселях (в точках): X - по горизонтали Y - по вертикали Правее, под надписью БУФЕР, выводится буква, соответствующая последней графической команде, выполненной из буфера. На самом краю, справа, выводится номер рисун- ка с которым вы сейчас работаете. Всего вы можете создать 9999 изображений, но в каждой локации помещается только одна ил- люстрация. Вы узнаете об этом когда мы будем создавать локации. А пока, вернёмся к редакто- ру. Управление перемещением курсора осуществляет- ся нажатием клавиш: перемещение перемещение по пикселям по знакоместам 7 нажатие курсорных │ клавиш клавиатуры 5 ──┼── 8 │ 6 Графические команды. Воспользоваться функциями редактора можно по- дав команду (нажатием соответствующей клавиши), которая будет записана в буфер и сразу же вы- полнена. I (ink)- выбор цвета курсора ("чернила") P (paper)- выбор фона под курсором ("бумага") T - выбор цвета бордюра B (bright)- выбор уровня яркости: 0 - пониженная яркость 1 - повышенная яркость 8 - не влияющая на текущую V - выбор режима мерцания: 0 - выключение мерцания 1 - включение мерцания 8 - не влиять на текущий режим C (cursor)- показать положение курсора G (grid)- показать расположение знакомест D (dot)- поставить точку L (line)- нарисовать линию: первое нажатие - начало линии второе - конец линии Кстати, в редакторе реализован режим подсказки, называемый "резиновыми линиями" и вы сможете увидеть свои линии, прямоу- гольники и т.д. уже в процессе их построе- ния. R (rectangles)- нарисовать прямоугольник: первое нажатие - фиксация одного угла второе - фиксация угла через диагональ E (ellipse)- нарисовать эллипс первое нажатие - центр эллипса второе - фиксация формы эллипса F (fill)- заполнить замкнутую поверхность цве- том S - заполнить замкнутую поверхность текстурой A - окрасить фон замкнутой поверхности M (merge)- наложить на изображение другой ри- сунок, номер которого вводится после запроса Следует пояснить, что эта команда может при- годиться не только для слияния изображений (например, использование повторяющихся элемен- тов), но и в том случае, если буфер данного ри- сунка уже заполнен (имеет 255 команд). Тогда использование команды MERGE позволит вам про- должить начатое в другом рисунке, если подадите там команду: <M> ... n, где n- номер рисунка с заполненным буфером. Редактор в GAC-е не был бы полноценным, если бы не позволял редактировать уже созданные изображения: Z - перейти в начало буфера команд (назад) W - перейти в конец буфера команд (вперёд) s/s+5 - перейти на одну команду назад s/s+6 - перейти на 5 команд назад s/s+7 - перейти на 5 команд вперёд s/s+8 - перейти на одну команду вперёд DELETE- удалить последнюю команду, выполненную из буфера (см. индикатор БУФЕР) GRAPH- удаление всех команд до конца буфера, начиная с последующей команды Например, последовательность команд: <Z> , <GRAPH> полностью очистит буфер рисунка Используя эти команды вы сможете в любом по- рядке просмотреть процесс создания рисунка; уб- рать элементы изображения (удаляя команды из буфера) или внести новые. Все ваши действия бу- дут отображаться на экране. Обратите внимание на то, что порядок команд в буфере может влиять на скорость построения изображения, а также на объём памяти, занимае- мый рисунком (это связано с особенностью запол- нения изображения цветом, текстурой и т.д.) Вот и подходит к концу наше первое занятие. Предлагаю вам самостоятельно выполнить домашнее задание. 1. Определите опытным путём сколько байт па- мяти расходуется на каждую графическую команду? 2. Какие особенности есть у заполнения изоб- ражения цветом, текстурой и фоном? 3. Нарисуйте в GAC-е двенадцать знаков зодиа- ка (Водолей, Рыбы, Овен и т.д.), каждый знак нарисуйте отдельными рисунками под номерами от 1-го до 12. Эти рисунки пригодятся нам в дальнейшем, но об этом вы узнаете на следующем занятии. Желаю успеха, до скорой встречи! ══ * ══