Введение в "AkURQ"

Введение в "AkURQ 1.28"

"AkURQ" - иначе, "Акурка", – это программа-проигрыватель (интерпретатор) текстовых квестов, написанных на несложном, бейсико-подобном языке URQL (Universal Ripsoft Quest Language). Проигрываемые акуркой файлы игр-квестов являются обычными текстовыми файлами в win (Windows-1251) или dos (cp866) кодировке, и имеющими расширение .qst (незашифрованный квест), .qs1, .qs2, .qs3 (зашифрованные квесты). На настоящий день написано более 200 квестов, с большинством из которых можно ознакомиться здесь. Квесты пишутся в любом текстовом редакторе, - что очень удобно, - хотя существует специальный текстовый редактор SMSQ, название которого расшифровывается, как "Сам Можешь Сотворить Квест".

Главный экран

Обзор главного экрана

Главное Меню

Меню "Файл"

Меню "Вид"

Меню "Утилиты"

Меню "Опции"

Меню "?"

Обзор главного экрана

В интерфейсе акурки присутствуют следующие элементы:
Главное меню (Файл, Вид, Утилиты, Опции, ?) - описание см. ниже
Главное окно - здесь выводится текст описаний локации и рисунки, если включен режим html
Окно инвентаря (может быть скрыто, см. рисунок выше) - здесь обычно выводится имеющийся у главного героя игры инвентарь (вещи), но автор квеста может использовать это окно по своему, или не использовать совсем.
Окно "кнопок" - в этом окне находится список возможных действий, представленных или в виде кнопок или в виде списка.
Строка ввода - расположена между главным окном и окном кнопок и видима только в случае необходимости ввести в квест с клавиатуры какие-либо данные (числовые или текстовые)

Подсказка: чтобы получить информацию о любой иконке на экране, достаточно нажать на неё.

Главное меню

Главное меню состоит из подменю Файл, Вид, Утилиты, Опции, ?(помощь):

Меню "Файл"

Меню "Файл" позволяет:

- Загрузить квест,

- выбрать его из истории уже сыгранных квестов,

- запустить его заново,

- загрузить сохраненную игру,

- и, наконец, закончить работу с программой.

Меню "Вид"

- Позволяет игроку подключить/отключить окно инвентаря,

- Выбрать цветовой режим экрана (черный на белом фоне - Акурка, белый на черном - Дос).

- Настроить размер, вид и цвет шрифта во всех трех окнах (главном, инвентаря и кнопок) .

Меню "Утилиты"

- Позволяют вызвать блокнот для редактирования квеста;

- Зашифровать квест по стандарту шифровки URQ .qs1, .qs2 или .qs3

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

Меню "Опции"

- Один клик - выбор действия одним кликом мышки;

- Мультимедиа: звук, музыка, рисунки - эти переключатели включают/выключают проигрывание музыки в фоновом режиме, проигрывание звуков и показ картинок, т.е. действия операторов play, image, и системной переменной music

Разное:
- включить/выключить сигнал beep при паузе и anykey
- риповский подсчет заходов на метку (для совместимости со старыми играми написанными под URQ 1.4 от RipOs'a - если включен (стоит галочка), то в этом случае интерпретатор при каждом заходе на локацию "x" увеличивает переменную "x" на 1(единицу), если отключен, то на единицу увеличивается переменная с именем "count_x" (стандарт досурки).
- закрепить окна (зафиксировать границы окон, чтобы они больше не двигались).
- Сохранить настройки - сохранить Ваши настройки в файл AkURQ.ini или файл Имя-квеста.ini
- Удалить ini файл - стереть старый файл Akurka.ini - полезно для устранения несовместимости ini-файлов разных версий.

Меню "?"

- "СК [Евгений] F1" - подсчет СК - коэффициента квеста;

- "Помощь" - вызов этого файла помощи.

- "О программе" - информация об авторе программы и его "сообщниках".

Краткая история "URQL"

URQ была cоздана вскоре после одной из первых известных в Рунете русских программ для написания квестов OrcZero. Язык URQL (URQ Language), используемый в платформе для текстовых квестов (Universal Ripsoft Quest), сравнительно молодой. Его первый вариант, включающий всего несколько простых команд, появился 5 мая 2000 года. Создатель URQ, Тимофей Басанов aka RipOs, несколько лет улучшал ее, добавляя все новые возможности. Первоначально URQ была сделана на Visual Basic, и предназначалась для создания книг-игр и простых менюшных квестов, то есть предоставляла возможность описать локацию и, по нажатию кнопки выбора, перейти на другую локацию. Была возможность работы с инвентарем – числовыми переменными.

Простота платформы привлекла внимание создателей квестов, первой серьезной разработкой по воспоминаниям тех, кто присутствовал при рождении URQ стал "Древний кинжал" - большой и интересный квест от Кащея, написанный по мотивам произведений Д.Р.Р.Толкиена. Другими ранними квестами, очаровавшими игроков, были коротенькие "Приключения хомяка Семена" в двух частях (третья появилась намного позднее и была написна уже другим автором). Чуть позже Кащей выпускает вторую часть "Древнего кинжала", которая, как и первая, отличалась от прочих квестов трудностью прохождения в связи с многочисленными вариантами смерти главного героя. Да, кроме Кинжалов, в начале был еще «Странник» - по содержанию квест объективно слабоватый, но там Смайлик впервые показал приемы, которые потом использовались во многих разработках того времени. Эпохальным событием был выход демо-версии очень большого квеста от Etev'a, - "Без права на надежду", который многие до сих пор, - и не без оснований, - считают лучшим квестом на URQ. Это был квест с использованием практически всех тогдашних мультимедийных возможностей Win URQ: музыки, картинок, - и при этом отличался очень хорошим литературным стилем, в сравнении с прочими "Бананами" и "Петровичами".

Платформа развивалась, RipOs вносил изменения и новые возможности, дошел до версии 2.0 альфа 3, - очень интересной, но совершенно неудовлетворительной в плане устойчивости в работе, - и внезапно прекратил работу над URQ. Предположительно, это было связано с разрушением накопителя, на котором хранились исходники URQ. Последняя, относительно устойчиво работающая версия URQ 1.4, позволяет вставлять в квест картинки (в 6 разных форматах) и отслеживать клики мышкой по этим картинкам, использовать звуки и музыку (wav и mid), делать квесты, состоящие из нескольких файлов, и многое другое, в том числе ввод чисел и строк пользователем (но это еще не парсер).

Параллельно RipOsу разработку урки вел серьезный программист, выпускник мехмата МГУ Корянов Виктор, скрывающийся под именем Виктор Корянов :). Он писал (и продолжает писать) на Си Dos-версию URQ, которая так и называется URQ_DOS. Вот что он сам пишет о создании досурки:

"Почти все здесь, наверное, знают как я пришел к Урке, но поскольку соответствующие посты и текстовые файлы имеют обыкновение теряться и закапываться :) ...
Это был самый конец 2000 года, буквально несколько дней до праздника. Так получилось, что у меня в то время на «домашней» машине не было хоть сколько-нибудь нормального монитора, приходилось как-то жить на переделанной советской Электронике (модель уже не помню). Более или менее приемлемо этот агрегат работал только в текстовом монохромном режиме EGA, графический EGA теоретически был, но постоянно в нем находиться было трудно из-за проблем с частотой - быстро уставали глаза (теоретически был и VGA, но только для быстрого просмотра графики - что-то читать в нем было невозможно совсем). Жил я, в общем, полностью в мире текстового Доса - много читал с экрана в Дос Навигаторе, играл в Адом, программил в bc++ 3.1 ... Естественно, иногда искал в Инете на университетской машине что-нибудь соответствующее и как-то раз по запросу «текстовые квесты» (или, может, «текстовые игры») нашел сайт Кащея (текстовыми играми интересуюсь давно, еще с до-PCшных времен). Там я сразу обратил внимание на Древний кинжал, Урка Рипа не запустилась из-за традиционного для старых версий Windows отсутствия ВБ-библиотек, да даже если и запустилась бы, все равно я тогда грузил его только в случае совсем уж крайней необходимости (кстати, в 95-ом нет штатной поддержки EGA). Самая первая версия Досурки была написана буквально в Новый Год за два дня."

Так что, если бы у В.Корянова тогда под рукой была монитор получше, мы бы, возможно, и не увидели этого великого творения, которое обеспечило URQ-квестам распространенность, популярность и дальнейшее развитие. А может быть, и увидели бы, так как текстовыми квестами он интересовался давно, и, как говорили еще древние римляне, "истина побеждает всё"!

Развитию "урки" немало способствовал и SMSQ - редактор для создания URQ-квестов. Он первоначально предназначался для написания квестов для проигрывания на сотовых телефонах, то есть SMS-игр. Редактор сделан Евгением Бычковым (партийные клички "Евг" и "brevno"), и очень облегчает работу с большими квестами.

Встроенная в версию 8 редактора возможность определить некий СК (вероятно, суммарный коэффициент) квеста на некоторое время вызвала ажиотаж и гонку среди авторов квестов в попытках достичь максимального рейтинга. После появления ТРИОН’а – гигантского квеста от Terracon’a который набрал максимальный СК 20+++ ажиотаж снизился, а после написания «Самого наглого квеста» - из одной локации, но с таким же рейтингом и вовсе утих :). Возможность определить СК Вашего или любого другого квеста присутствует и в «акурке».

До 2006 года основными проигрывателями URQ-квестов были URQ 1.4 от RipOs'a и urq_dos от Виктора Корянова. Эти замечательные программы существуют и сейчас, но, похоже, уже не развиваются. В настоящее время AkURQ (акурка) объединяет в себе достоинства обеих программ: возможность использования мультимедийных возможностей URQ 1.4(картинки, звуки, музыку) и новые операторы urq_dos, а кроме того, обладает богатым набором присущих только ей возможностей и функций, что, делает ее одной из лучших отечественных программ по проигрыванию текстовых квестов. Например, ДОС-кодировка квестов распознается автоматически, есть поддержка html-страниц, встроенных в квест, можно настроить интерфейс программы под себя и эти настройки автоматически сохранятся.

Идеология URQL

Достоинства языка URQL (Universal Ripsoft Quest Language) для новичка:

1. Простота освоения. Достаточно выучить знак метки-начала локации и 3 оператора (END - конец локации, РLN - вывод текста и BTN – кнопка перехода), чтобы уже сделать книгу-игру.

2. Неплохая документация, которую можно найти на сайтах создателей URQ. Данный текст, кстати, тоже является документацией.

3. Огромное количество примеров в виде уже созданных квестов. Все ссылки не привожу, ибо их довольно много. Основное собрание на www.urq.allquests.ru, оттуда можно перейти на другие сайты. Квесты могут быть зашифрованы от просмотра, но обычно это не делается - кому же интересно смотреть сначала внутрь игры, а потом играть - всё удовольствие пропадет. Таким образом, обычная практика такова: сначала в квест играют, потом смотрят, как он устроен внутри. Потом делают свой квест. Благодаря этой "открытости кода" количество квестов на URQ превосходит все другие русские платформы вместе взятые. Смею надеяться, что так оно будет и далее.

4. Эта платформа – «живая», то есть на ней уже написаны квесты, она продолжает развиваться, активно обсуждаться и т.д. Следовательно, пока она не собирается тихо умереть в забвении, подобно десятку других платформ. Кстати, к числу "живых" в настоящее время относятся, по моему мнению: URQ, QSP - менюшные, RTADS, Adrift, RINFORM - с текстовым вводом команд. Если я кого-то забыл - поправьте меня. Новичку легко получить консультацию по любому вопросу у мэтров на форуме www.urq.fastbb.ru или у многочисленных сторонников этой платформы.

5. URQ имеет богатые возможности для создания квестов, а создание квеста требует НА ПОРЯДОК меньше времени, чем создание текстовой адвентюры. Это ОЧЕНЬ ВАЖНО, особенно для начинающих «квестописателей», которые таким образом получают возможность начать с небольших, но вполне работоспособных квестов, а потом подняться к вершинам мастерства.

Достоинства языка URQL (Universal Ripsoft Quest Language) для профессионала:

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

2. Наличие переменных (числовых и строковых, в том числе системных), позволяет как угодно много создавать флагов, счетчиков;

3. Управление цветом фона и текста, причем можно задать разный цвет символов даже в одном слове (хотя увлекаться этими изысками я бы не рекомендовал);

4. Возможность ввода числа или строки пользователем;

5. Наличие локации common, исполняющейся автоматически при переходах из локации в локацию и позволяющей организовать смену дня и ночи, подсчет ходов, голод, "запалы", "демоны" и т.п.;

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

7. Код акурки оптимизирован, что обеспечивает довольно быструю работу с квестами;

8. Функции работы со строками, определение длины строки, поиск шаблона в строке позволяют сделать простой парсер(!) (синтаксический анализатор);

9. Процедуры позволяют сократить размер квеста при многократном использовании одного и того же фрагмента;

10. Конструкция if then else и логические операторы not, or, and со скобками позволяют несложно запрограммировать сколь угодно сложные условия в квесте и реализовать циклы;

11. Реализована, поддержка звуков, музыки и графики;

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

13. Настройками интерфейса можно управлять как из самого квеста, так и из программы-проигрывателя;

14. Появилась возможность использования нескольких действий в одной кнопке – xbtn.

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

16. Просмотр в тексте квеста html-кода дает возможность использовать объединение графики, текста и анимации для оформления квеста.

17. Кроме того, в версии 1.28 поддерживаются гиперпереходы на кнопки из текста, что открывает перед автором квеста возможность изменить интерфейс квеста, приближая его к интернет странице (с возможностью использования инвентаря, переменных, логических условий, вывода в главное окно содержимого переменных и т.п).

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

Недостатки URQL и AkURQ:

1. Это НЕ ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ ПЛАТФОРМА. Поэтому создание по настоящему БОЛЬШИХ ИГР на URQ непросто, так как требует значительной самодисциплины, чтобы писать комментарии, необходимые для предотвращения путаницы в голове! (Впрочем, профи, - поклон Krol`у, - могут писать структурные программы на неструктурных языках и даже самостоятельно создавать классы и объекты на языках программирования к этому изначально не предназначенных.)

2. Профессиональное программирование на урке требует опыта и терпения (интересно, существует ли хоть один язык программирования, у которого нет этого недостатка?).

Установка и запуск AkURQ 1.28

"AkURQ"- "Акурка" состоит из:
- файла интерпретатора AkURQ.exe
- файла помощи AkURQ.chm
- файла настроек AkURQ.ini, который создается самой программой

Запуск акурки:

Первые два файла обычно находятся в упакованном виде в архиве (например, akurka.rar). Для использования программы распакуйте содержимое архива в любую папку (я использую папку URQ, – удобнее, если там же лежат файлы квестов, но это необязательно) и запустите AkURQ.exe двойным щелчком левой кнопки мыши. В открывшемся окне вы на пару секунд увидите изображение симпатичного волчонка, после исчезновения которого, программа готова к работе.

Справочник по операторам и системным переменным AkURQ версии 1.28

Примечания
Комментарии
Локация
Вывод текста в главное окно
Кнопки
Инвентарь
Условный переход
Логические условия
Подпрограммы и переходы
Сохранение квеста
Ввод значения пользователем
Многофайловые квесты и другие полезные возможности
Мультимедиа: изображения
Мультимедиа: звуки и музыка
Функции
Вывод всплывающих сообщений
Системные переменные
Использование HTML

Примечания

Внимание: символы <.[...].> написаны для более легкого понимания текста и файле их нет, причем символы [ ] используются для обозначения текста, который можно опустить. Пример:

print <строка> - напечатает просто строка

Внимание: параметры операторов разделены запятыми, то есть, в качестве параметра берется строка от пробела после оператора до запятой, не включительно, а в качестве второго параметра от запятой до конца, кроме последнего пробела. Исключение: "if" имеет особый формат. Пример:

btn странная пещера, Войти в странную пещеру, затаиться, и прислушаться.

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

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

Комментарии

Комментарий - совершенно необходимый элемент любой грамотно написанной программы, в том числе, квеста. Без них вряд ли Вам удастся разобраться даже в собственной программе спустя полгода. В URQL поддерживается два вида комментариев:

/* Это длинный,
многострочный
комментарий*/

; Это комментарий в одну строку

pln Это будет напечатано… ; А этот комментарий - до конца строки, напечатан не будет.

Вверх

Локация

Метка ":" - двоеточие, символ начала локации.

Использование:

:имя_локации

Пример:

:локация

"end" - символ конца локации.

Использование: так и используется, на отдельной строке.

Пример:

:локация

pln Описание локации

btn другая_локация,Переход в другую локацию

end

Вверх

Вывод текста в главное окно

"p" - печатает указанную строку на экране.

Использование: p строка

Пример:

p Напечатанная строка

Примечание: Для оператора p есть аналог - оператор print.

"pln" - печатает на экране текст, после него всегда (даже если строка и пустая)автоматически ставится символ перевода строки.

Пример:

pln Програмист - узник замка Иф.

Примечание: Для оператора pln существует аналог - println

Исключение: символы "#<выражение>$" заменяются на значение этого выражения, символ '&' означает конец оператора печати текста и начало следующего оператора.

Пример:

p У тебя #money+10$ монет напечатает "У тебя 110 монет", если money=100.

Примечание: если длина введенного текста превышает размер страницы, то в Акурке в главном окне появляется вертикальный скроллер, позволяющий пролистать текст вверх или вниз.

Вверх

Кнопки

"btn <локация>,<надпись>" - кнопка. Создает кнопку для выбора вариантов действия с надписью на ней <надпись>, при клике на ней будет осуществлен переход на метку "Common" (если такая есть), потом (когда встретиться "end") на <локация>. Если локации common нет, сразу осуществляется переход на метку <локация>

Использование: btn имя локации,надпись на кнопке

Пример: btn tower,Взобраться на башню

Примечание: для акурки не существует ограничитель длины надписи на кнопке, но из практических соображений рекомендую не писать более 70 символов. В имени локации и названии кнопки допустимо применение #$, #числовая_переменная$, #%строковая_переменная$, ##код$. Опять же не советуем в строковую переменную, предназначенную для вывода надписи на кнопку вставлять "Войну и мир".

Вверх

Инвентарь

"inv+" - добавляет в инвентарь предмет(ы).

Использование: inv+ [кол-во], Название предмет[a](ов)

Пример: inv+ 5,Жемчужин

Примечание: Не обязательно указывать количество предметов для добавления - если не указано, добавляется 1 предмет. Проверяется, что кол-во предметов положительно, то есть если было 15 Рип и "inv+ -20,Рип" то Рип исчезнет из инвентаря.

"inv-" - удаляет предмет(ы) из инвентаря.

Использование: inv- [кол-во], Название предмет[a](ов)

Примечание: Не обязательно указывать количество предметов для удаления - если не указано, удаляется 1 предмет. Проверяется, что кол-во предметов положительно, то есть если было 15 Рип и "inv- 20,Рип" то Рип исчезнет из инвентаря.

"inv_<предмет>" - устанавливает и возвращает количество предметов с заданным названием в инвентаре.

Использование: inv_НазваниеПредметов

Пример: slonov=inv_Слонов

inv_Слонов=16

Вверх

"inv_visible <логическое значение>"

пишем: "inv_visible true" - инвентарь виден. "inv_visible false" или что-нибудь еще - не виден.

"btn_visible <логическое значение>"

пишем: " btn _visible true" - панель кнопок видна. "btn_visible false" или что-нибудь еще - исчезает. (для однооконного интерфейса)

urq_inv (кол-во разных вещей в инвентаре) - системная переменная, только для чтения.

Пример: if urq_inv>2 then pln У тебя только две руки, поэтому ты можешь нести только два предмета!

Вверх

:use_<предмет> - метка локации, в которой описывается действие "Осмотреть предмет". Соответствующее действие появляется в списке действий с предметами инвентаря (см. рисунок)

:use_<предмет>_<действие> - метка локации, в которой описывается <действие> по отношению к <предмет>

hide_use_<предмет>_<действие> - системная переменная, если равна 1 - скрыть действие. Пример:

hide_use_inv_воровство=1 если 1 то действие скрывается. Если не 1 то это действие показывается).

Внимание! Если после присваивания идет perkill, то hide_use_inv_воровство снова становится 0! т.е. переменная зависит от perkill.

hide_use=1 - СКРЫТЬ ВСЕ ДЕЙСТВИЯ ИНВЕНТАРЯ! hide_use=0 - ПОКАЗАТЬ ВСЕ ДЕЙСТВИЯ ИНВЕНТАРЯ!

Пример:

hide_use_inv=1 (скроет действия у "инвентаря"),

hide_use_топор=1(скроет все действия у топора) или hide_use_топор_поломать=1 (скроет у топора только действие "поломать")

Вверх

"invkill" - без параметров удаляет все предметы из инвентаря.

Invkill предмет - удаляет "предмет" из инвентаря.

Удобно использовать в паре с оператором perkill в начале квеста для очищения памяти.

"perkill" - уничтожает все переменные.

Примечание: Используется без параметров. Удобно использовать в паре с оператором invkill в начале квеста для очищения памяти.

Вверх

Оператор условного выбора

"if условие then оператор & оператор [else оператор & оператор]" - условная конструкция.

Использование:

if условие then оператор & оператор & ... & оператор

или

if условие then оператор & ... & оператор else оператор & ... & оператор

Пример: if inv_Спичек=50 then btn buildHouse, Построить домик из спичек

Примечание 1: Заканчивается оператор if ... then ...[else]... всегда символом конца строки!

Примечание 2: Можно делать сложную конструкцию, используя &, and, or, not и скобки. Допустимость любой степени вложенности if'ов сохраняется, else всегда соответствует последнему незакрытому then'у.

Вверх

Логические условия

"and"

- логическое "и". Использование: В основном, в условных конструкциях. Пример: If inv_Slon=5 and inv_Mouse=2 then btn scare, Шугануть слонов мышами

"or"

- логическое "или". Использование: В основном, в условных конструкциях. Пример: if Inv_Slon=1 or inv_Mouse=1 then btn zoo,Да у тебя тут зоопарк!

"not"

- логическое "нет". Использование: В основном, в условных конструкциях. Пример: if not CocaCola then btn cocacola,Купить "Кока-Колу"
Вверх

Подпрограммы и переходы

"proc <метка> " - передает управление на метку <метка>, то есть инструкции квеста выполняются с метки <метка>, но когда встречается "end" возвращает управление обратно, оператору, следующему за proc, при условии, что не было оператора forget_procs. (forget_procs - "забывает" все переходы по процедурам.) Допустима вложенность.

Использование: proc имя_локации

Пример: proc tower

Примечание: при переходе по proc - common не выполняется

Вверх

"goto" - переходит на указанную локацию, но не возвращается обратно.

Использование: goto имя_локации

Пример: goto tower

Примечание: В отличие от URQ 1.4, в акурке - как в urq_dos - не выполняется заход на локацию common.

Вверх

Сохранение квеста

"save" - оператор, сохраняющий в файл вида имя_квеста.qsv текущие значения переменных и предметы инвентаря, чтобы потом можно было этот квест с сохраненного места продолжить.

Использование: save локация_для_восстановления

Пример: save tower

Вверх

Оператор ввода

"input" - просит пользователя ввести строку, значение которой будет присвоено указанной переменной. При необходимости ввести с клавиатуры русский текст через оператор input в строковую переменную, в отличие от досурки и URQ 1.4 ее не обязательно сначала объявлять, достаточно просто присвоить переменной строковое значение.

Input <имя-переменной>

Использование input для ввода числовой переменной:

input переменная_для_записи_числа

Пример: input x

Более того, можно ввести в числовую переменную строковое значение или в строковую - числовое и переменная примет тип введенного значения. Внимание! В досурке было не так! Там под одним именем существовало две переменные и числовая переменная с именем строковой хранила ее длину. В акурке для определения длины строковой переменной x существует функция len(x).

"anykey [переменная]"

- оператор приостанавливает работу интерпретатора до нажатия произвольной клавиши, заносит код клавиши в переменную.
Вверх

"instr <переменная>" - создает текстовую переменную и присваивает ей значение.

Использование: instr имя_переменной=значение

Пример: Instr time=время - 17:42

Instr pusto= ;В этом случае значение текстовой переменной равно пустой строке.

"#переменная$" - вставляет в текст для вывода на экран значение переменной (и строковой и числовой).

Использование: Обычно так и используется.

Пример: x=5

pln #x$

goto b#x$

btn b#x$,Неизвестная локация

#%переменная$ - вставляет значение строковой переменой. Устарело, но понимается интерпретатором для совместимости с квестами для досурки.

Использование: Обычно так и используется.

Пример: instr x=loc

pln #%x$

goto b#%x$

btn b#%x$,Неизвестная локация

Вверх

"pause " - оставливает выполнение квеста на указанное в операторе количество милисекунд (т.е. pause 1000 = паузе в 1 секунду).

Использование: pause <время> - прекращение выполнения инструкций на <время> в милисекундах, причем пользователь в это время может выбирать варианты с помощью кнопок выбора и квест будет работать дальше, но по истечении <время> выполнение квеста продолжиться, одновременно двух работающих "pause" не может быть, новая затирает старую - движок о ней "забывает", забывает также он о паузе при нажатии кнопки действия.

Пример: pause 3000

Вверх

"music=" - проигрывает циклично звуковой файл.

Использование: music=имя_файла_в_директории_квеста

Примеры: music=17; здесь нет кавычек, т.к. значение - число

music="17.mid";

instr music=17.mid; здесь нет кавычек, из-за оператора "instr" перед переменной.

В двух последних случаях расширение у файла можно опустить.

"play " - проигрывет однократно файл в формате .wav

Использование: play имя_файла_в_директории_квеста

Пример: play 2051; будет проигран файл 2051.wav (если существует)

play "oh.wav"

play "oh"

Вверх

Многофайловые квесты и другие полезные возможности:

"include "имя файла" - до выполнения в код вместо этой строки вставляется содержимое указанного файла. Позволяет создавать многофайловые квесты.

Пример: "include C:\quest.qst"

"count_<локация>" - подсчет заходов на указанную локацию.

Использование: count_имя локации

Пример: x=count_tower

"rnd" - генерирует случайное число от 0 до 1, не включая 1, т.е. от 0 до 0(9).

Rnd дает целые случайные числа от 1 до X (включая X), Rnd1245 - от 1 до 1245

Использование: Можно присвоить переменной, можно вывести в текст, создать кнопку, переход и т.п.

Пример: x=rnd5

pln #x$

btn #x$,Случайная локация.

Примечание: Можно организовать диапазон дробных чисел не до 0(9), а, например, до 10: x=rnd*10. Допустимо использовать Rnd#числовая_переменная$

Вверх

"cls" - очищает экран от всяческой информации.

Использование: Так и используется.

Пример: cls

Существуют две формы: clst - очищает только окно описаний; clsb - очищает окно кнопок. Эти две формы полезно применять в операторе xbtn.

Вверх

"&" - конкатенация, объединение команд.

Использование: команда1 & команда2 ... & командаN

Пример: pause=1000 & pln Текст & clrscr=0

Вверх

"quit" - оператор немедленного выхода из квеста.

"tokens" - разложение строки на "токены", то есть куски текста, отделенные друг от друга разделителями.

Применение: tokens <стр. перем>

Результат: числовая переменная tokens_num содержит количество токенов (например, слов в предложении), строковые переменные token1, token2 ... token# tokens_num$ содержат сами токены (например, слова). См. строковую. сист. перем. tokens_delim

Вверх

"==" (два знака равно) - оператор неточного сравнения. Дает истину при сравнении строковой переменной со строкой по правилам сравнения регулярных выражений, т.е. :

? Любой одиночный символ

* Ноль или более символов

# Любая одиночная цифра (0-9).

[charlist] Любой одиночный символ в классе символов (списке)

[!charlist] Любой одиночный символ не принадлежащий классу символов

Например:

Instr фраза=

Input фраза

If фраза=="*парол*" then p Проходи! else p Стоять, руки вверх!

Введенные фразы "Пароль!", "Я знаю пароль!", "Никто не знает пароль" - дадут ответ "Проходи!"

оператор "==" (проверка строки на маску)

Примеры:

"aBBBa" == "a*a" ; Возвратит True.

"F" == "[A-Z]" ; Возвратит True.

"F" == "[!A-Z]" ; Возвратит False.

"a2a" == "a#a" ; Возвратит True.

"aM5b" == "a[L-P]#[!c-e]" ; Возвратит True.

"BAT123khg" == "B?T*" ; Возвратит True.

"CAT123khg" == "B?T*" ; Возвратит False.

Вверх

"xbtn" - eXtended BuTtoN - кнопка с расширенными функциями. Позволяет выполнить несколько действий ДО перехода на указанную локацию. До перехода выполняеются еще операторы на локации common. Формат оператора:

xbtn <метка>,{оператор&оператор},<Название кнопки>

Пример:

xbtn loka,{голод=голод+3},кинуть гранату

Вверх

Мультимедиа: Изображения:

Наверно, многие авторы, глядя на текстовые квесты, задумывались о том, что так, без графики, некрасиво. Именно поэтому введена частичная поддержка (язык не предназначен для написания графических квестов, хотя его возможности это позволяют) графики. За вывод картинки отвечают переменные: Image и ImageType.

Image - имя файла с графикой (без расширения)

Примечание: имя может быть целым числом, а может быть и строкой с названием картинки, если Image=0, то картинка не выводится, окно закрывается.

ImageType - устаревшая переменная, обозначает тип картинки: 0-bmp 1-ico 2-rle 3-wmf 4-emf 5-gif 6-jpg. Примечание: картинка ищется в каталоге с квестом.

Пример:

В каталоге с квестом есть файл "собака.jpg". В квесте есть строки:

ImageType=6 ;Задано расширение

image_caption="Шавка" ;Задано имя картинки

Image="собака" ;Задано имя файла без расширения

или:

image_caption="Шавка" ;Задано имя картинки

Image="собака.jpg" ;Задано имя файла с расширением, для того чтобы пропустить ImageType.

Вверх

Пример 2

В каталоге с квестом есть файл 22.jpg

В квесте есть строки

ImageType=6 ;Задано расширение jpg

image_caption="Шавка" ;Задано имя картинки

Image=22 ;Задано имя файла без расширения (номер картинки)

Результат будет тот же.

image_caption присваивать не обязательно. если эта переменная будет равна 0, то рамки у картинки не будет)

Вверх

image<Номер>

Возможно наложение до 100 картинок на главный рисунок.

Пример:

image="16.jpg"

image2="22.jpg"

image10="22.jpg"

и координаты. пример:

image2top=1000

image2left=1000

Реакция на нажатие на картинку

Но ведь и реагировать не щелчки по картинке нужно - например осмотр шкатулки и при клике она открывается. Для этого при щелчке не картинке вызывается локация Image_Click.

По переменной BMouse<индекс_картинки> - можно узнать какой кнопкой мыши щелкнули и по какой картинке (после прохождения метки, переменная снова становится равной 0)

Пример:

:image_click

if BMouse1=1 then ... ;если нажали на главную левой кнопкой мыши то...

if BMouse2=1 then ... ;если нажали на первую вложенную то....

Пример 2:

:лока2

cls

p Была нажата

if BMouse1=1 then p левая

if BMouse1=2 then p правая

if BMouse1=3 then p ?

if BMouse1=4 then p средняя

pln кнопка мыши.

end

Однако часто бывают случаи, когда надо определять еще и позицию клика, для этого созданы переменные

XMouse, YMouse,

которые определяют позицию в пикселях клика по картинке.

Примечание: двойное нажатие отрабатывается, как одинарное.

Вверх

Мультимедиа: Звуки

Но ведь более полное погружение в квест требует еще и звука. Как его использовать? Существует два способа:

Фоновая музыка

Загружается аудио и играется циклично. Его имя - переменная Music.

Пример: Music=17 ;в этом случае проигрывается циклично midi-файл "17.mid" из директории квеста.

Music="paganini.mp3" ;в этом случае проигрывается mp3-файл, путь можно указать.

Звук (можно на фоне проигрывающейся музыки).

Загружается звуковой файл. После загрузки файла работа квеста продолжается, новый звуковой файл останавливает предыдущий.
play "Babah.wav" ;проигрывает Babah.wav из папки квеста.
play "Song.mp3" ;проигрывает Song.mp3 из папки квеста.
play "\Sound\Song.mp3" ;проигрывает Song.mp3 из папки Sound находящейся внутри папки квеста.

Вверх

Схемы вида и цвета

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

Цвет

Все эти переменные - число - цвет в формате Blue*256*256+Green*256+Red, где Blue, Green и Red - яркость каждого из каналов цвета от 0 до 255.

Style_BackColor

- цвет фона формы, описания, инвентаря и прочего

Style_TextColor

- цвет текста описания, инвентаря и прочего

Допустимо применение и ДОС-кодировки цвета:

0-15 - задает цвет шрифта от черного до белого, соответствующая переменная Style_Dos_TextColor

Размеры форм и кнопок

Все эти переменные - число, задающее в твипсах размеры формы:

Style_FormWidth - ширину

Style_FormMinimumHeight - высоту

Единица измерения каждого параметра - твипс (twips) - 1/20 часть пиксела. Водном дюйме 1440 твипсов, поэтому для вычисления координат следует рассчитать размеры в пикселях и умножать значения координат на 20.

Примечание
Исторически в полиграфии используются такие единицы измерения, как пункты (points) и твипсы (twips), размеры которых составляют (приблизительно) 1/72 и 1/1440 дюйма, соответственно. Для обозначения точки экрана мы используем понятие пиксел (pixel), который приблизительно равен пункту...

Вверх

Функции Акурки:

Математические функции

-=, /=, *=, +=, ++, -- (x+=x например, тоже самое что x=x+x).

Математические функции:

Abs() - вычисление модуля числа

Int() - определение целой части (дробная вычисляется элементарно, вычитанием из числа его целой части!)

Sqr() - квадратный корень числа

Atn() - арктангенс

Cos() - косинус

Sin() - синус

Tan() - тангенс

Len() - длина строковой переменной

Round() - округление числа до чисел после запятой

^ (степень) - например х=2^3 (x=8)

Вверх

MsgBox - Вывод окна сообщений.

Пояснение к оператору MsgBox:

Оператор MsgBox служит для вывода стандартных окон информации (как в Windows)

Синтаксис: MsgBox "Текст", "Заголовок окна", тип_окна, переменная. Все параметры являются необходимыми. Переменная - числовая, куда записывается результат окна (проще говоря, на какую кнопку нажали). тип_окна - числовая переменная или число. При нажатии "ОК" переменная принимает значение 1, "Отмена" или окно закрыто - 2, "Да" - 6, "Нет" - 7

Примечание: Понятное дело, что надписи на всех кнопках зависят от языка Windows.

Рисунки:

0=none

16=критическая ошибка

32=вопрос

48=предупреждение

64=информация

Кнопки:

0=ок

1=ок, отмена

2=Прервать, Повтор, Пропустить

3=Да, Нет, Отмена

4=Да, Нет

5=Повтор, Отмена

Следовательно, чтобы получить требуемое, надо сложить рисунок+кнопка переменные по умолчанию:

urqNone=0

urqError=16

urqQuestion=32

urqWarning=48

urqInfo=64

UrqOk=0

UrqOkCan=1

UrqARI=2

UrqYNC=3

UrqYN=4

UrqRC=5

т.е. можно писать: MsgBox "Сообщение","Заголовок",urqError+UrqARI,s

Вверх

Системные переменные

image_caption (надпись, которая будет сверху рисунка вместо надоедливого "имаге")

quest_path - системная переменная, хранящая путь к квесту, полезна для поддержки мультимедийных возможностей (загрузки картинок, звуков, многофайловых квестов и т.п.

urq_type - переменная, по которой можно определять тип интерпретатора (urq_type) в Акурке urq_type=1

Time - системная переменная, хранит число секунд от полуночи.

Rnd - вещественное случайное число от 0 до 1, меняется при каждом вызове.

Music - имя фоновой музыки вроде "104.mid".

Common - номер действующей локации Common, если переменная Common=12, то вызывается по btn-переходу Common_12. При Common=0 вызов вызывается просто "Common" (то есть вместо локации :Common используется :Common_номер)

Style_dos_textcolor - цвет текста, от 0 до 15. (ДОС формат)

current_loc и previous_loc (строковые системные переменные) хранят имена соответственно текущей и предыдущей посещенной локаций. previous_loc удобно использовать для сохранения игры из любой локации при помощи действия типа use_inv_Запись. Для первой локации previous_loc равна ее имени (чтобы сохранение работало и для нее). current_loc и previous_loc теперь меняются только при btn-переходах.

Location = имя текущей локации, работает везде, вне зависимости от того, каким образом осуществлен переход в текущую локацию (через proc, goto, btn и т.д.)

hide_phantoms=0 - показывает кнопки ведущие в "никуда" с пометкой "phantom", hide_phantoms=1 - не показывает такие кнопки.

last_btn_caption - строковая переменная, которая содержит название последней выбранной кнопки.

fp_prec - числовая переменная, которая содержит точность вычислений, число знаков после запятой в функции round. По умолчанию 2.

tokens_delim - строковая переменная, содержащая список символов, являющихся разделителями (по умолчанию пробел, запятая, кавычки, вопрос, восклицательный знак. Если в tokens_delim строка char, то tokens s разбивает s на отдельные символы.

Вверх

Использование HTML-разметки

Легче понять на примерах. Имейте в виду, что для работы вам необходим установленный Internet Explorer версии не ниже 4-й (Windows 98). Если картинки не отображаются следует проверить а)правильно ли указан путь; б) включена ли поддержка рисунков в браузере. Поддерживаются стили css и гиперссылки на локации - смотри пример ниже.

:1

html true ;включаем хтмл режим. чтобы отключить, пишем html false

btn_visible false ;отключаем окно кнопок внизу

inv_visible false ;отключаем окно инвентаря

html true ;включаем хтмл режим. чтобы отключить, пишем html false

; Внутри html ";" надо заменять на "##59$" - так же, как после P и PLN

<html>

<p>Модель игрового html-движка для квеста##59$ пожалуйста, пощелкайте по ссылкам. <br>

<hr>

<div align="center"><img src="#quest_path$/супергерой.jpg" class="foto" alt="СУПЕРГЕРОЙ"></div>

; так осуществляется вставка картинок, обратите внимание, что значение переменной quest_path выводится в #$

<a href="btn:game">играть</a> ::

<a href="btn:author">об авторе</a> ::

<a href="btn:exit">выход</a>

</html>

end

<a href="btn:1">назад</a>

:author

<html>

Вы самый-самый замечательный автор.<br>

<hr>

<a href="btn:1">назад</a>

</html>

end

:exit

<html>

Вы действительно хотите выйти? <br>

<hr>

<a href="btn:2">да</a> ::

<a href="btn:1">нет</a>

</html>

end

:game

<html>

<div align="center"><img src="#quest_path$/пещера.jpg" class="foto" alt="СТРАШНАЯ ПЕЩЕРА"></div>

Вы крутой герой. Стоите перед ОЧЕНЬ ТЁМНОЙ ПЕЩЕРОЙ. <a href="btn:4">Войти в пещеру</a> или <a href="btn:5">подождать</a>? Еще можно отсТУПИТЬ <a href="btn:1">назад</a>

</html>

end

:2

html false

btn_visible true

pln Спасибо за внимание!

btn 1,В стартовое окно.

btn 3,В никуда

end

:3

pln THE END

end

:4

<html>

<div align="center"><img src="#quest_path$/мишка.jpg" class="foto" alt="СЫТЫЙ МИШКА"></div>

Вы вошли и одним крутым героем стало меньше, зато сытым медведем - больше! <br>

<hr>

<a href="btn:2">Ой!</a><br>

<a href="btn:1">Ай!</a>

</html>

end

:5

<html>

 Вы подождали. Но
ничего не случилось! <a href="btn:4">Может,
всё же войти в пещеру</a> или <a href="btn:5">ещё
подождать</a>? Еще можно <a href="btn:1">отсТУПИТЬ</a>

</html>

end

Вот так (примерно) выглядит результат - инвентарь и кнопки отключены, переходы осуществляются по гиперссылкам:

Ответы на частые вопросы (ЧаВо)

Вот некоторые вопросы, остающиеся после просмотра учебника:

Q: Что будет, если сделать ссылку на несуществующую метку?
A: В AkURQ кнопка-переход на несуществующую метку либо не действует, помечаясь при этом словом phantom (если системная переменная Hide_phantom=0), либо вообще невидима (если системная переменная Hide_phantom=1), goto и proc на несуществующую метку просто не выполняется.

Q: Что будет, если создать несколько меток с одинаковым именем?
A: Сделать их можно, но переход будет происходить только на первую из них.

Q: Вопросы о Common:
Q1. Что такое метка Common?
A1. Часто необходимо выполнять некую общую последовательность действий для всех локаций... Именно для этого есть :Common метка - при вызове btn метка,Название метки на самом делается следующее:

proc Common & GoTo метка

к примеру, то есть вызывается Common и при встрече end идет выход из процедуры и только после этого уже переход на требуемую метку.

Q2. Зачем служит системная переменная common?
A2. Для разных частей квеста порой требуется разные Common локации (например идет герой по лесу - пить не хочется, вышел в пустыню - стала увеличиваться жажда и т.п.), поэтому системная числовая переменная common отвечает за имя вызываемой локации: :Common_номер, к примеру при Common=5 будет вызов :Common_5.

Q3.Что будет, если присвоить переменной common нулевое или отрицательное значение, а также значение, для которого нет соответствующей метки Common_Номер. Что будет, если создать метку с именем Common_-128, когда их всего две (Common и Common_-128), то есть, во-первых, корректно ли такое имя, а во-вторых, возможно ли создавать метки вида Common, перескакивая через номера (Common, Common_5, Common_12, Common23), или следует создавать их в строгой последовательности (Common, Common_1, Common_2, Common_3 и так далее)?
A3. Никаких ограничений по номерам (подряд или нет) не накладывается, для простоты рекомендуется использовать только целые числа. Если Common=-5, то вызов будет соотвественно :Common_-5.

Q4. Что будет, если создать несколько меток Common с одинаковым номером?
A4. Сделать их можно, но переход будет происходить только на первую из них.

Q5. Можно ли обойтись без локации common? И при этом выполнить все ее функции?
A5. Можно также обойтись и без использования локации Common вообще, например в КАЖДОЙ локации писать proc CommonLoc_#CommonLoc_N$, при этом будет происходить подобный же механизм(только имя Common локации будет :CommonLoc). Использование локации common сильно упрощает написание квестов, в которых надо вести учет ходов игрока (например, для введения игрового времени, голода, запаса энергии в лампе и т.п.)

Q: Как нормально сделать голод в квесте?
A: Используйте локацию Common, например, так:

:Common
Сытость=Сытость-1
if Сытость<=0 then PrintLn Вы голодны!!!
if Хлеб then Сытость=Сытость+10 & Inv- Хлеб
end

Q: Равнозначны ли k=5 и k = 5 ? То есть пробелы как-то убираются?
A: При вещественных присваиваниях - да, убираются. При строковых (если k объявлена через instr k= как строковая переменная) можно включить сохранение пробелов через системную переменную Instr_leave_spc - если отлична от нуля, то в instr-присваиваниях сохраняются пробелы перед строкой и после, иначе нет.
Q: Пишу instr text=Пароль
If text=Пароль then … - и не работает! Почему?
А: if сравнение чего-то=текст может быть только if чего-то="текст", так как сравнивается только содержимое текстовых переменных, а в последнем случае как раз создается переменная с именем и содержанием text.
Q: Пишу сравнение двух строковых переменных if stroka1<>stroka2 then … - но работает неправильно!
A: Правильно писать if not (stroka1=stroka2) then … так как неравенство для строковых переменных не поддерживается!

Q: Как узнать длину строковой переменной?
А:. Длина строки заносится в числовую переменную с тем же именем! Таким образом если instr слово=Пароль, то Длина_слово=#слово$ Кстати, при сравнении строки с числом сравнивается именно ее длина.

Q: И еще вопрос: есть ли в УРК команды для работы со строками? Т.е. ты input строчку, а потом, скажем, рассматриваешь ее n-ный символ (парсер хотел сделать)? Или все придется делать способом дровосека?:

:main
i=0
:cycle
i=i+1
anykey l#i$
a=l#i$
if a=13 then goto vvod
if a=97 or a=65 then p ф
if a=98 or a=66 then p и
if a=99 or a=67 then p с
...
goto cycle
end

А:
Это можно сделать при помощи операции расщепления на подстроки (токены).
tokens_delim - строковая переменная, по которой делится строка. Если равна char, то строка делится на отдельные символы.
tokens - команда делит строку на подстроки (разделитель - tokens_delim) Результаты сохраняются в строках вида tokenN, где N - номер подстроки. (очевидно, что если tokens_delim равно char, то в этих строках содержатся отдельные символы)
tokens_num - содержит число подстрок в результате расщепления строки.
Операция разделения на подстроки никак не сказывается на исходной текстовой переменной.

Пример:
:1
instr string=
pln Введите строку:
input string
instr tokens_delim=char
pln Введите позицию символа:
input n
tokens string
if tokens_num>=n then pln #%token#n$$ - #n$-й символ строки "#%string$" else pln Такого символа нет.
pln #/$В строке #tokens_num$ символов.
btn 1,еще
end

Q: Фиксирует ли anykey код нажимаемой кнопки или для этого используется другая команда?
A(Victor): Да, фиксирует. Простой пример:

:0
anykey x
p #x$ ;
if x<>27 then goto 0

выводятся коды нажатых клавиш, пока не нажмешь Esc.

Полезные алгоритмы URQL для написания квестов от "мэтров".

Etev

Как сделать подобие ссылки:

HealthEnemy1=30;жизнь первого врага
HealthEnemy2=30;жизнь второго врага
instr HealthTarget=.;якобы ссылка

потом запрашиваете у юзера (или через цикл) порядковый номер врага, здесь описывать не буду - элементарно (например input target), и присваиваете:
instr HealthTarget=HealthEnemy#target$
а затем можно оперировать напрямую через ссылку в любом выражении, например:
if toHitHero>armorEnemy then #%HealthTarget$=#%HealthTarget$-5

Victor

Распечатка токенов:
:0
instr a=
input a
tokens a
pln #tokens_num$ tokens:
i=1
:loop
if i‹=tokens_num then pln #i$: #%token#i$$ & i=i+1 & goto loop else ;
_if not(a="bye") then goto 0 else end

Поиск в токенах слова "гоблин":
:1
instr pars=.
input pars
tokens pars
i=1
:loop
if token#i$="гоблин" then pln Я не гоблин! - истерически кричит урук-хай & goto 1
if token#i$="пока" then quit
if i‹tokens_num then i=i+1 & goto loop
pln Не понимаю
goto 1
Пример из 2kw, с которого началась работа с парсером:
:0
instr a=
input a
if a=="*проси*гоблин*золот*" then pln гоблин: золота нет else ;
_if a="bye" then quit else pln гоблин ничего не ответил
goto 0

Korwin
Для начала предлагаю свою процедуру выведения времени с часами и минутами:
:common
m=m+rnd30 ;Каждый ход прибавляется случайное количество минут от одной до 30
proc minute ;Подсчитывается прибавка минут и часов
if h›23 then h=h-24&d=d+1 ;Подсчитывается прибавка часов и дней
p #d$-й день. Время #h$:&if m‹10 then p 0&p #m$.#/$ else p #m$.#/$ ;Осуществляется вывод дней, часов и минут. Обратите внимание - корректно выводится количество минут, меньшее 10! Аналогично можно сделать и с часами, если нужно делать вид "электронных часов".
end
:minute
if m›59 then h=h+1&m=m-60
if m›59 then goto minute ;Если прибавили более 60 минут, то нужна проверка.
end
Переключение цветов.
Чтобы не писать каждый раз: Style_Dos_TextColor=11 (лиловый, к примеру)
можно создать строковую переменную в которую ввести весь этот текст и вставлять ее вызов по мере необходимости в нужное место.
:Инициализация переменных квеста
...
instr vio=Style_Dos_TextColor=11 ;Лиловый
instr yel=Style_Dos_TextColor=14 ;Желтый
...
:Локация желтого цвета
#%yel$
p Этот текст будет желтым &#%vio$&pln Этот текст будет лиловым
...
как сделать goto в локацию, название которой только что введено пользователем через input?
instr loc=
input loc
goto #%loc$

Определения

Текстовые квесты – это сюжетные компьютерные игры, основанные на текстовом литературном описании ситуации, после которого игроку предоставляется возможность изменить эту ситуацию путем команды введенной в программу-проигрыватель. Команда может вводиться прямым текстовым вводом по инициативе игрока (классическая текстовая адвентюра) или выбором из нескольких вариантов, предоставленных автором квеста («менюшный» квест). Слово квест происходит от английского «quest» – поиск, так как обычно, в ранних квестах требовалось для прохождения игры куда-нибудь дойти и что-нибудь найти. Такие игры интересны в первую очередь своей интерактивностью, то есть возможностью игрока воздействовать на развитие сюжета, а во вторую – своей литературностью, то есть качеством интересного сюжета, богатством и выразительностью языка, характерами встретившихся персонажей и так далее.

Интерпретатор – (языка программирования) - программа для непосредственного исполнения программ (производства вычислений, предписываемых этими программами) из исходного кода на определённом языке.
Простые интерпретаторы анализируют и выполняют (интерпретируют) программу последовательно (покомандно или построчно). Синтаксические ошибки обнаруживаются такими интерпретаторами только когда интерпретатор приступает к выполнению команды (строки) содержащей ошибку, это может быть удобно начинающим.
Более сложные интерпретаторы (называемые интерпретаторами компилирующего типа) перед выполнением производят компиляцию исходного кода программы в машинный или некий "промежуточный код", и только после этого приступают к выполнению. И поэтому все синтаксические ошибки обнаруживаются до выполнения. Такие интерпретаторы быстрее выполняют большие и циклические программы, так как не занимаются анализом исходного кода (в т.ч. избыточным, например, в циклах) в реальном времени.
(с) Материал из Википедии - свободной энциклопедии

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

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

Переменная - именованная "ячейка памяти". В URQL переменные - автоматически создающиеся структуры, которые могут хранить вещественное десятичное число в большом диапазоне или строку:
структура:Переменная=Выражение ;При этом переменной присваивается значение выражения.
1) Переменные создаются при обращении к ним, если переменная не создана, то при обращении к ней она равна нулю.
2) Никакие альтернативные формы записи (2e+5, другие системы счисления ...) не поддерживаются.
3) Для вывода на экран значения переменной используются символы #$.
4) Имя числовой переменной подчиняется общим требованиям к строке (то есть допустимы пробелы и практически любые символы, кроме '#' '$' ',' ';' '/*' '*/' '&' но для совместимости со следующими версиями лучше не использовать других знаков, кроме букв русского или латинского алфавита, знака подчеркивания, цифр. Еще переменные нельзя называть ключевыми словами типа if, then, not, and, or и др. так как в выражениях такие имена будут распознаваться как ключевые слова!

Оператор - ключевое слово языка программирования, выполняющее какое-либо действие. Часто операторы имеют аргументы. Например, оператор "btn" имеет 2 аргумента: имя локации и надпись на кнопке. В URQL аргументы операторов отделяются запятыми.

Функция - в программировании - один из видов подпрограммы. Особенность, отличающая ее от другого вида подпрограмм - процедуры, состоит в том, что функция возвращает значение, а ее вызов может использоваться в программе как выражение.
С точки зрения теории систем, функция в программировании - отдельная система (подсистема, подпрограмма), на вход которой поступают управляющие воздействия в виде значений аргументов. На выходе системы получаем результат выполнения программы, который может быть как скалярной величиной, так и векторным значением. По ходу выполнения функции могут выполняться также некоторые изменения в управляемой системе, причем как обратимые, так и необратимые.
В некоторых языках программирования (например, в Паскале) функции существуют наряду с процедурами (подпрограммами, не возвращающими значения), в других, например, в C, являются единственным реализованным видом подпрограммы (то есть все подпрограммы являются функциями и могут возвращать значение).
Побочным эффектом функции называется любое изменение функцией состояния программной среды, кроме возврата результата (изменение значений глобальных переменных, выделение и освобождение памяти, ввод-вывод и так далее). Теоретически наиболее правильным является использование функций, не имеющих побочного эффекта (то есть таких, в результате вызова которых возвращается вычисленное значение, и только), хотя на практике приходится использовать функции с побочным эффектом, хотя бы для обеспечения ввода-вывода и отображения результатов работы программы. Существует специфическая парадигма программирования - функциональное программирование , в которой любая программа представляет собой набор вложенных вызовов функций , не вызывающих побочных эффектов.
(с) Материал из Википедии - свободной энциклопедии

Системные переменные – переменные, заранее зарезервированные системой. Могут быть использованы пользователем для получения / установки различных системных параметров (цвет текста, время и т.п.).

Ссылки и техническая поддержка

Поддержка гарантирована только для посетителей форума на urq.fastbb.ru.

http://urq.fastbb.ru/ - форум по URQ, где можно найти ссылку на последнюю версию "акурки"
http://www.urq.allquests.ru - официальный сайт по URQ
http://urq.allquests.ru/qst.urq - большой выбор URQ-квестов.
http://vkoranov.newmail.ru- страничка, откуда можно скачать последнюю версию urq_dos.exe

Если Вы обнаружили баг в Акурке или хотите внести пожелание по ее работе пишите akela88@bk.ru – разработчику программы.

Если Вы желаете внести добавления/исправления в этот документ, прошу сообщить мне на tightbow@yandex.ru – автору документации.

С уважением, Korwin.

Версия документа: 06 февраля 2007 г.
©2007 Korwin


Меню справки

Вступление

Главный экран

История URQ

Иделогия URQL

Установка и запуск AkURQ.

Справочник операторов.

Поддержка HTML

Системные переменные

Ответы на ЧАстые ВОпросы

Полезные алгоритмы

Определения

Ссылки и связь