Форум » » AkUrq2 » Ответить

AkUrq2

Акела: AkUrq 2.12 beta 8 Потихоньку пишется новая акурка2, основанная на идее Sfeli и содержащая не малую долю его кода. Возможности пока довольно скромные, но это вопрос времени. требует только IE5 (Windows 98+) Что мы имеем:[quote]Операторы: ;комментарий :(локация) p (текст без кавычек) pln (текст без кавычек) goto (локация) proc (локация) btn (локация),(описание) (оператор)&(оператор) cls instr (переменная)=(текст без кавычек) (переменная)=(значение) if (условие) then (оператор) [else (оператор)] inv+ [число,]предмет inv- [число,]предмет invkill [предмет] perkill play (имя_файла)[.wav] input (переменная) end _ (продолжение предыдущей строки) (<= >= <> > < = - + * / ==) Системные метки: :Сommon[_номер] :use_(предмет)[_действие] Конструкции: #/$ ##(код символа)$ #%(имя переменной)$ #(имя переменной)$ Системные переменные: previous_loc current_loc last_btn_caption common music count_(метка) rnd[число] inv_(предмет) [/quote] Краткое описание языка (Выборочно использовалась помощь от Корвина) [more][quote]Операторы: ;комментарий - Помогает разработчику не запутаться в своём коде. Всё после ; игнорируется интерпретатором (до конца строки) Пример: pln Это будет напечатано.;А этот комментарий - до конца строки, напечатан не будет. :(локация) - Оператор обозначения меток. Пример: :локация Отличие от досурки - в метках поддерживаются конструкции #$, #%$, ##$. Если вы хотите сохранить совместимость с dos_urq не используйте в метках такие символы х) p (текст без кавычек) - Выводит на экран текст. pln (текст без кавычек) - Выводит на экран текст и переносит строку. goto (локация) - Переходит на указанную локацию. Если метки не существует, - оператор игнорируется. Пример: goto tower proc (локация) - Передает управление на указанную метку, но когда встречается end, - возвращает управление обратно, оператору, следующему за proc. Допустима вложенность. Если метки не существует, - оператор игнорируется. Пример: proc tower btn (локация),(описание) - Создает кнопку для выбора вариантов действия с надписью на ней (описание), при клике на ней будет осуществлен proc на системную метку Common (если такая есть), затем переход на (локация). Пример: btn tower,Взобраться на башню (оператор)&(оператор) - объединение нескольких операторов. Пример: cls&pln Текст&btn tower,Взобраться на башню cls - Очищает экран instr (переменная)=(текст без кавычек) - Устаревший оператор. Присваивает переменной текстовое значение. Всё что после "=" заносится в переменную (переменная), поэтому писать следует без кавычек. Пример: instr time=время - 17:42 (Альтернатива time="время - 17:42") (переменная)=(значение) - Присваивает переменной (значение). Пример: time="время - 17:42" min=42 В первом случае присвоили строку, во втором число. Для совместимости с досуркой, которая некорректно понимает кавычки, крайне не рекомендуется присваивать строки таким способом, желательно использовать для этих целей устаревший оператор instr. if (условие) then (оператор) [else (оператор)] - Оператор условия. Можно делать сложную конструкцию, используя &, and, or, not и скобки. Допустимость любой степени вложенности if'ов сохраняется, else всегда соответствует последнему if'у. Пример: if inv_Спичек>=50 then btn buildHouse, Построить домик из спичек inv+ [число,]предмет - Добавляет в инвентарь предмет(ы). Если [число,] не указано, добавляется 1 предмет. Пример: inv+ Жемчужина inv+ 5,Жемчужина В первом случае добавится одна Жемчужина, во втором пять. inv- [число,]предмет - Удаляет предмет(ы) из инвентаря. Если [число,] не указано, удалится 1 предмет. Пример: inv- Жемчужина inv- 5,Жемчужина Количество предметов не может быть отрицательным. invkill [предмет] - Без параметров - удаляет все предметы из инвентаря, Если [предмет] указан, то удаляет только предметы типа [предмет]. Пример: invkill invkill Жемчужина В первом случае удаляются все предметы, во втором только все жемчужины. perkill - Очищает все ранее присвоенные переменные. play (имя_файла)[.wav] - Однократно проигрывает из папки квеста указанный файл. Если расширение явно не указано, то по умолчанию ищется .wav файл. Пример: play 05 - Forsaken.mp3 play 05 - Forsaken В первом случае проиграется файл "05 - Forsaken.mp3", во втором - "05 - Forsaken.wav" input (переменная) - Просит пользователя ввести строку, значение которой будет присвоено указанной переменной. Пример: input x Для совместимости с досуркой, которая некорректно понимает присвоенные в input строки, перед воодом строки следует делать так: instr x= input x end - Оператор конца локации. На этом месте выполнение квеста обычно прерывается для ожидания дальнейших действий игрока (например нажатие на кнопку). Или же происходит возврат к следующему после proc`а оператору, если до этого встречался proc (смотри подробнее proc). _ (продолжение предыдущей строки) - Оператор склеивает строку с предыдущей. Пример: pln Текст в этой строке слишком длинный, поэтому мож _ет следует перенести его сюда? (<= >= <> > < = - + * / ==) - Используются в операторе if и операторе присваивания. Подробнее о ==: == Дает истину при сравнении строковой переменной со строкой по правилам сравнения регулярных выражений, т.е.: Пример: if "aBBBa"=="a*a" then ;Верно if "F"=="[A-Z]" then ;Верно. if "F"=="[!A-Z]" then ;Неверно. if "a2a"=="a#a" then ;Верно. if "aM5b"=="a[L-P]#[!c-e]" then ;Верно. if "BAT123khg"=="B?T*" then ;Верно. if "CAT123khg"=="B?T*" then ;Неверно. Верно значит что условие даст истину и выполнится then Неверно - условия ложно, и выполнится else (если он есть). На самом деле это несложно. Описание: ? Любой одиночный символ * Ноль или более символов # Любая одиночная цифра (0-9). [charlist] Любой одиночный символ в классе символов (списке) [!charlist] Любой одиночный символ не принадлежащий классу символов Примечание: в Досурке этот оператор работает по другому. За подробностями к Виктору. Системные метки: :Сommon[_номер] - Локация вызывается после каждого нажатия на кнопку. Зависит от системной переменной common, (при common=0 вызывается "common", при common=12 уже "common_12", и так далее) Пример: :Сommon pln Если вставить этот кусок кода в большой квест, то к его концу всем точно надоест эта надпись х) end :use_(предмет)[_действие] - Системная локация, если она существует, то с предметом можно совершать действия. Если действие опущено, то по умолчанию оно будет "Осмотреть". Таких локаций может быть несколько, но они не должны называться одинаково. Конструкции: Конструкции которые заменяются при выполнении кода значением. #/$ - Заменяется на перенос строки. ##(код символа)$ - Заменяется на аски символ с указанным кодом. Обычно используется для вывода служебных символов (";", "$"..) #%(имя переменной)$ - Устаревшая конструкция. Используется вывода строковых переменных в досурке. #(имя переменной)$ - Оператор для вывода переменных. В досурке - только числовых. Для совместимости всегда выводите строки с помощью #%(имя переменной)$ пустые конструкции типа #$ заменяются на пробел Системные переменные: previous_loc - Содержит имя предыдущей локации current_loc - Содержит имя текущей локации last_btn_caption - Содержит описание последней нажатой кнопки. common - Переменная управляющая работой системной локации Сommon (смотри подробнее "системная локация Сommon") Пример: common=1 music - зацикленно проигрывает из папки квеста указанный файл. Если расширение явно не указано, то по умолчанию ищется .mid файл. Пример: music=5 music="5.mid" instr music=5.mid Во всех случаях проигается файл "5.mid" count_(метка) - Переменная хранит в себе число заходов на метку. rnd[число] - Если число опущено, то при обращение генерирует случайное число от 0 до 1. Если обозначено, то случайное целое число от 1 до число. inv_(предмет) - Системная переменная для управления инвентарём. Пример: inv_жемчужина=50 if inv_жемчужина<5 then pln Что-то у тебя мало жемчужин! Возьми-ка ещё одну!&inv+ Жемчужина В первом случае, сколько бы у вас не было жемчужин, их станет 50, во втором - если жемчужин меньше пяти, то выводится текст и в инвентарь добавляется ещё одна жемчужина. Существует устаревший вариант проверки вещей в инвентаре, для совместимости с RipUrq: Пример: if 2 жемчужина then pln Хмм, у тебя есть две жемчужины (или даже больше)! Ладно проходи! if Жемчужина then pln Хмм, у тебя есть жемчужина! Ладно проходи! В первом случае проверяется есть ли у игрока две жемчужины. Проверка пройдет успешно если у игрока две или больше жемчужин. Альтернатива if inv_жемчужина>=2 then .... В втором случае проверяется есть ли у игрока предмет жемчужина. Проверка пройдет успешно если у игрока одна или больше жемчужин. Альтернатива if inv_жемчужина>=1 then .... Дополнения приветсвуются.[/quote][/more] очень короткий FAQ:[quote]В1: Тут слишком мало возможностей для моих извращённых идей :) где синусы, вычисление корня, тысячи картинок, xbtn, и вообще где первая акурка? (привет Суд :) О1: Думаю первая акурка дорабатываться больше не будет. Новые операторы в квотерое появятся со временем, но не так как они появлялись в первой акурке: операторы будут появляться только после того как их синтаксис утвердят большенство метров, к которым я отношу: Евгения, Сфели, Виктора, Корвина. Уважаемый Борщевский разумеется тоже метр, но поскольку он ненавидит урку, я боюсь его спрашивать :) В2: Где инвентарь? Месяц найти не могу уже. (привет Хлом :) О2: Клавиши I и F6 открывают инвентарь. В3: Как теперь закрыть инвентарь? (привет Гор ) О3: Теми же клавишами. В4: Как закрыть текущий квест и начать новый? О4: F2 выводит в меню. В5: Что можно настроить в ини файле? О5: Можно изменить шрифт (Goraph) и включить/отключить управление кнопками на цифрах. Если результат вас не устроит, а как было вы не запомнили х) то удалите ини файл[/quote] Ну и выражаю благодарность Sfeli который написал добрую половину функций. Их легко вычислить - если чтото в квотерое работает без проблем - это писал Сфели) Если глючит - то Акела) Сообщения в этой теме буду периодически удалять

Ответов - 73, стр: 1 2 3 4 All

p_alex:

Акела: 2.12 beta 8 (первый пост обновлён) *поправлен оператор input (Goraph) *можно уменьшать и увеличивать шрифт [+ -] (Евгений) *по умолчанию убраны цифры с кнопок (Евгений) (можно сменить в ини файле) *по умолчанию подсвечивается первая кнопка (Goraph) *добавлена системная переменная inv_<предмет> *подправлен интерфейс *добавлена поддержка дос кодировки (Goraph) *вернул возможность шифровать файлы *invkill [предмет] *переменная music= previous_loc current_loc last_btn_caption *== *_перенос в ней даже работает кукла х)

Platov: Шикарно. Проверил на паре квестов, работает без глюков. )


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

Platov: Приятно что вернули шифрование, теперь не будет больше прохождения игр в блокноте. )

Акела: написал небольшое описание по urql (только те операторы которые поддерживают на данный момент и досурка и акурка2, с комментариями) (в первом посте нажмите на "Скрытый текст")

fireton: (задумчиво) Хм. Может, для урки еще не все потеряно...

Хломидоманад: Ура! С новой жизнью и избавлением от richtx'а!=)) Толком пока не играл ни во что (как раз, наверно, опробую на игре Platov'а), но первые впечатления от тестовых запусков в целом положительные. Есть пока две сравнительно несложно реализуемых (надеюсь)) просьбы: вернуть инвентарь по правой кнопке (потому что в лом тянуться до клавиатуры каждый раз) и сделать, помимо досуркиных, ргбшные настройки для цветов фона и текста. И не забудь сделать urq_type=2 =) Вива Квотерой=))!

Korwin: Platov пишет: Приятно что вернули шифрование, теперь не будет больше прохождения игр в блокноте. ) Не в этом счастье... поверь мне дружище... чиет (xbtn) хоца... а по рукам!!! по рукам!!! А все равно хоца...

Korwin: Бумеранг-Урка (Урка возвращается)=BURQ - оно же расшифровывается как вторая попытка (A(эй) - первая, B(би) - вторая. А размер шрифта регулируется из главного меню? В смысле вижу, что нет, но это как-то не совсем удобно. Особенно для начинающих игроков, которые ини-файлы не умеют редактировать. Порадовало очень, что справился с шифровкой .qs2 - свои же Крылья запустил. Но с проблемами - там у меня часы есть, так квотерой выдает Время 7: 0 5 А надо разумеется Время 7:05 Еще - при попадании в локацию, где есть btn - пустышка а других btn нет - Квотерой вылетает. :( А так - отличная программа! Жду развития совместимости в первую очередь.

Акела: Korwin пишет: Еще - при попадании в локацию, где есть btn - пустышка а других btn нет - Квотерой вылетает. :( подробнее?..

Platov: Korwin пишет: Не в этом счастье... поверь мне дружище... чиет (xbtn) хоца... а по рукам!!! по рукам!!! А все равно хоца... Та верю Корв, верю. А почему все так против xbtn? Ну да, несовместимость со старыми версиями. Но если будет хорошая новая версия, все ведь перейдут на неё? Отпадёт проблема с поиском нужного интерпритатора, и xbtn будет.

Korwin: "Все против" это сильно сказано. Просто есть проблема синтаксиса, доставшаяся нам в наследство от первого автора. Это определение оператора в URQ. Оператор состоит из собственно оператора и параметров, отделенных запятыми. Концом оператора является или конец строки, или '&'. Отсюда проблема - каким образом интерпретатор определит, что закончился составной оператор xbtn? Та реализация, которая есть в первой AkURQ, насколько я помню, выглядит не по-урковски.

Александр Граф: А почему бы Вам не сделать xbtn не совсем так, как задумано было. т.е. не переход и выполнение, а просто выполнение кода. А запятые и & можно будет экранировать ##$?

Korwin: Александр Граф пишет: А почему бы Вам не сделать xbtn не совсем так, как задумано было. т.е. не переход и выполнение, а просто выполнение кода. А запятые и & можно будет экранировать ##$? Какой синтаксис предлагаешь? А то мы в свое время голову сломали - ветка до сих пор на форуме висит. Свой пример, пожалуйста:

Александр Граф: xbtn (код),(имя) Примеры: xbtn goto abcd,hhh xbtn goto abcd##28$p здесь у нас текст##44$ даже с запятой, а тут у нас название кнопки или даже xbtn (метка), (код), (имя) Примеры: xbtn abcd, p здесь у нас текст##44$ даже с запятой, а тут у нас название кнопки Правда я не помню как заменяются ##$ по-моему уже при выводе, а не при парсинге, но для xbtn можно свое правило создать. Только запутаться можно жестоко.

Korwin: Не все так легко, Граф. Код может иметь вставки в виде других операторов с запятыми, те же кнопки, да и #%строковая переменная$ тоже штука непредсказуемая. В свое время я предлагал xbtn метка, название, где метка это имя proc, но не понравилось

Александр Граф: А если запятые в конструкции #%$, то они там и должны оставаться, не может быть такого, чтобы конструкция начиналась и не заканчивалась, т.е. запятые в таких конструкциях должны автоматически игнорироваться, а не то будет ошибка. xbtn goto abcd##28$p здесь у нас текст##44$ даже с запятой #%asd,$ а тут у нас название кнопки Тут будет ошибка, от того, что "goto abcd##28$p здесь у нас текст##44$ даже с запятой #%asd,$ а тут у нас название кнопки" воспринимается одной строкой(должна быть по идее). А если в самой переменной(не в названии) содержатся запятые и &, опять же можно создать правило, что они все в xbtn заменяются на конструкции ##$. Хотя получается слишком много правил.

Chicago1920: Акела, может стоило из пре 1 и пре 6 сделать стабильную 1.3, а потом заниматься второй акуркой? И второй вопрос:в чем отличие 1 и 2 акурки?

Александр Граф: Кажется, я сглупил: при таком подходе не возможны вложенные xbtn. Придумал другое: создать конструкцию, которая заменяется на текст конструкции. т.е. #@abc$ заменяется на abc. Причем, замена происходит только на первом уровне. Вот: xbtn #@goto ass&proc xyz$,назв. #@goto ass&proc xyz$ должно замениться на goto ass&proc xyz и выполниться. По идее.



полная версия страницы