Форум » » 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

Nex: о, какие страшные конструкции.

fireton: Идиотизм, по-моему. URQL ущербен, по определению. Синтаксис языка не продуман совершенно. Поэтому постоянно приходится подставлять костыли...

Александр Граф: Знаю... зато можно будет в метках локаций использовать запятые и & :) Они хотя-бы похожи на конструкции URQL...


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

Акела: как никто не отвечает) я каждый день заглядываю на форум и стараюсь отвечать даже на лс) мне просто страшно читать эту тему х) акурк2 на хтмл, первая на рич, основное отличие в этом Nex пишет: о, какие страшные конструкции. +1)

Korwin: Акела пишет: Nex пишет: цитата: о, какие страшные конструкции. +1) А что если все же как я предлагал? :лока1 ... xbtn метка_проц,Название кнопки ... end :метка_проц операторы end Мне кажется не слишком уродливо и сочетается с принципами URQL Какая разница - внутри локи операторы лежат или рядом?

frodo: А может так? :лока1 ... xbtn метка_проц,лока2,Название кнопки ... end :метка_проц операторы end где лока2 -- локация, выполняемая после :метка_проц, т.е. xbtn выполняет proc метка_проц&goto лока2

Korwin: frodo пишет: :лока1 ... xbtn метка_проц,лока2,Название кнопки ... end :метка_проц операторы end где лока2 -- локация, выполняемая после :метка_проц, т.е. xbtn выполняет proc метка_проц&goto лока2 Тогда надо оставить возможность пустой метки xbtn метка_проц,,Название кнопки

MixeratoR: 2Akela: Не мог бы ты ввести в Акурку (опционально) отображение названия текущей локации?

СантиМЭТР: Могут быть проблемы при переходах в локацию по goto. Может лучше сделать системную переменную для отображения заголовка окна? Или ничего не делать?

Акела: Системные переменные: previous_loc - Содержит имя предыдущей локации current_loc - Содержит имя текущей локации

Korwin: Акела пишет: Системные переменные: previous_loc - Содержит имя предыдущей локации current_loc - Содержит имя текущей локации Это понятно. Речь шла об отображении в заголовке окна не названия программы, а имени локации. Т.е. например системная переменная instr win_capture="" - отображается имя программы интерпретатора, instr win_capture=current_loc - - отображается название текущей локации. instr win_capture="Дом" - заданное название окна. Лично я не уверен, что это надо делать.

Акела(w): MixeratoR пишет: 2Akela: Не мог бы ты ввести в Акурку (опционально) отображение названия текущей локации? Корв чтото ты мудришь, тут ничего такого я не нашёл. ну делать в любом случае не стану.

Korwin: Акела(w) пишет: Корв чтото ты мудришь, тут ничего такого я не нашёл. Может это я неправильно понял? MixeraroR, поясни свою мысль? Акела(w) пишет: ну делать в любом случае не стану Ну, меня ты не расстроил. :)

MixeratoR: Korwin, ты всё правильно понял. Да, это в принципе не сильно нужная функция : pln Название Локации pln Только придётся сделать вывод названия в виде отдельной метки, чтобы отображать ТОЛЬКО при переходе с другой локации.

Хломидоманад: Ну, это не такая большая жертва. Можно, кстати, и без отдельной метки сделать. Только не нужно Согласен, что функция слишком специфическая, чтобы добавлять ее в ближайшие несколько десятков акурок.

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

hi: К слову, а как на ней вставлять картинки?

noname: 1) Korwin, frodo - молодца! xbtn локация_процедуры, локация_перехода, название_кнопки идеально! 2) xbtn метка_проц,,Название кнопки - совершенно излишне. разве не лучше: xbtn метка_проц,текущая_локация,Название кнопки ? ведь после выполнения чего-угодно хорошо бы отобразить чё-то на экране, а не так, что юзер жмёт чего-то и ничего не меняется... или ты, Корв другое имел ввиду? p.s. только сегодня серьёзно взялся за куспель, так нате- урка возвращается! прямо издевательство какое-то :)

Korwin: noname пишет: 1) Korwin, frodo - молодца! xbtn локация_процедуры, локация_перехода, название_кнопки идеально! 2) xbtn метка_проц,,Название кнопки - совершенно излишне. разве не лучше: xbtn метка_проц,текущая_локация,Название кнопки ? ведь после выполнения чего-угодно хорошо бы отобразить чё-то на экране, а не так, что юзер жмёт чего-то и ничего не меняется... или ты, Корв другое имел ввиду? Ну, можно и так (с) И.Сталин Ты прав... только кто же это будет реализовывать в интерпретатор?



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