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

fireton: Не, парсить названия параметров и присваивать - это гимор. :) Пусть лучше будет так. При нажатии на кнопку, определенную как [pre]btn локация(зн1, зн2), Текст кнопки[/pre] произойдет переход на локацию "локация". При этом переменной локация_пар1 будет присвоено значение зн1, переменной локация_пар2 - значение зн1 и т.п. Количество значений-параметров - не ограничено. Так нормально? (а чего мы делаем в теме про акурку?)

ghoest: fireton! Абсолютно согласен! Единственное - при возможности использовать в общем виде неограниченное количество передаваемых параметров - переменная, хранящая общее число переданных параметров все-таки нужна. А вдруг мы не будем знать заранее количество параметров, которые нам передадут в обработчик. Пока в голову не приходит пример такой ситуации, но мало ли? Повторяю - я не настаиваю на использовании ТОЛЬКО ОДНОЙ переменной, передаваемой как параметр. Это самоограничение родилось исключительно от мысли, что реализация подобная вашей окажется сложной и несогласующейся с парадигмой URQL. Суть моих рассуждений можно свести только к одному - НЕ ИСПОЛЬЗОВАТЬ предлагаемый здесь (и возникший явно в запарке) формат xBtn Лока_Проц, Лока_Переход, Кнопа. НЕ ИСПОЛЬЗОВАТЬ потому, что функционал этого формата гораздо беднее существующего сейчас в Акурке. Не все это понимают, но это именно так. А обсуждаю в этой теме, потому что такое предложение (по формату) возникло именно здесь. Авторы Акурки справедливо отметили неудобность нынешнего формата xBtn {} (Хотя эта неудобность - исключительно неудобность чтения кода человеком. С машинной точки зрения нынешний xBtn идеален) - и, не совсем подумав, предложили в качестве замены набора произвольных операторов в фигурных скобках использовать ссылку на локацию, содержащую этот набор. С первой точки зрения кажется, что это абсолютно равноценная замена, однако это не так, что я и пытаюсь объяснить. Согласен, что мое утверждение об ОДНОЙ переменной (что все таки вполне сработает) было излишним и сбивающим с толку, уводящим от основной темы, которую мне хотелось затронуть. Не подумав, запихнул в одну кучу две разные темы :)

Nex: БОЖИЙ СУД, ААА


ghoest: ну блин, или иначе поединок, дуэль, брошенная перчатка, вызов. БОЖИИМ СУДОМ в средние века называлась крайняя степень разбирательства, когда анализ аргументов сторон заходил в тупик и невозможно было иначе доказать/опровергнуть чью-то правоту. Поскольку я видимо страдаю формой дизлексии, а именно, неспособностью выражать свои мысли в форме, понятной оппонентам, я предлагаю произвести доказательство практическими действиями.

fireton: Единственное - при возможности использовать в общем виде неограниченное количество передаваемых параметров - переменная, хранящая общее число переданных параметров все-таки нужна. А вдруг мы не будем знать заранее количество параметров, которые нам передадут в обработчик. Пока в голову не приходит пример такой ситуации, но мало ли? Если будет ситуация, когда понадобится передавать нефиксированное количество параметров, передавай первым параметром их количество. :)

noname: fireton пишет: (а чего мы делаем в теме про акурку?) эта тема- про акурку-2, автор которой ещё не определился с синтаксисом xbtn в этом языке (я так понял). пишет: btn локация(зн1, зн2), Текст кнопки ОК! мне это нравится больше любого из предложенных до этого вариантов. а, например, локация_парN будет хранить кол-во передаваемых параметров. to ghoest: кажись, я тебя понял. понял, что неверно тебя понимал, но ты и сам выражался не больно-то ясно. теперь- порядок! НО остался ещё один малюсенький момент: xbtn локация_процедуры, локация_перехода, имя кнопки, работающая так, как я описывал, математически ровно настолько же функциональна, как и твой xbtn. минутку, щазз поясню...

ghoest: fireton пишет: Если будет ситуация, когда понадобится передавать нефиксированное количество параметров, передавай первым параметром их количество. :) ААААААААААААААААААААААААААААААЯТОРМОЗ Вот это действительно, гениально ЗЫ (чет на форуме цитирование хреново работает - вместо автора цитаты вставляется мое имя, приходится править UPD noname Извините, что не жду вашего объяснения. Для начала уточню: я понимаю механизм действия формата xBtn Лока_Проц, Лока_Переход, Кнопа как ПОЛНОСТЬЮ эквивалентный нынешнему оператору xBtn Лока_Переход, {proc Лока_Проц}, Кнопа. Если я неверно вас понял, смоделируте то, как вы видите этот формат использую нынешний формат xBtn, если это невозможно - то объясните его действие подробнее. Если же я верно понял - то обещаю, конечно, сильно подумать над вашим разъяснением, однако чувствую, что все-таки прав я, однако объяснить не могу - не хватает мощности преобразовать мысль в текст :)

noname: ghoest пишет: я понимаю механизм действия формата xBtn Лока_Проц, Лока_Переход, Кнопа как ПОЛНОСТЬЮ эквивалентный нынешнему оператору xBtn Лока_Переход, {proc Лока_Проц}, Кнопа. вроде бы так, хотя я могу ошибаться насчёт особенностей работы xbtn в Акурке. по логике вещей- именно так. стираю начатый текст объяснений за ненадобностью, готовлю вариант 'Божий суд'. для этого придётся качать акурку. не уверен, что она у меня выжила на винте. UPD АГА! понял окончательно и бесповоротно! действительно, ТЫ ПРАВ! суть в чём: предложенный в этой теме xbtn (в споре с тобой нагло названный мной 'моим') был значительно более удобен старого btn и давал возможность обойтись значительно меньшим числом локаций там, где с btn пришлось бы использовать переменное либо очень большое кол-во локаций. на форуме мне не раз говорили, что без xbtn можно обойтись, и я не раз приводил контрпримеры. на этот раз Вы(раз уж Вы на Вы, но вроде бы в нете принято на ты?) предложили ещё более удобный и простой вариант, а я проявил узость и не гибкость мышления, и продолжил отстаивать предыдущий. СПАСИБО за проявленное терпение и подробные разъяснения. мне было сложно врубиться, так как не мог использовать xbtn на практике- в досурке его, к сожалению, нет. p.s. под занавес хочу ещё раз поддержать вариант, предложенный fireton-ом.

noname: НО есть одно НО, смотрим тему сначала: Korwin пишет: Не все так легко, Граф. Код может иметь вставки в виде других операторов с запятыми, те же кнопки, да и #%строковая переменная$ тоже штука непредсказуемая. В свое время я предлагал xbtn метка, название, где метка это имя proc, но не понравилось другими словами, нехорошо, что в предложенном fireton-ом xbtn разделяются запятой название кнопки(которое может содержать запятые) и передаваемые параметры(разделённые запятыми). на этом мозг отключается. иду спать.

ghoest: noname пишет: редложенный в этой теме xbtn ... был значительно более удобен старого btn и давал возможность обойтись значительно меньшим числом локаций там, где с btn пришлось бы использовать переменное либо очень большое кол-во локаций АГА :). И все таки лучший вариант предложил fireton (строго говоря, вариант предлагавшийся мной является лишь частным случаем варианта fireton'а) - с чем я и согласн. Главное - то, что к лучшему для УРКи. нехорошо, что в предложенном fireton-ом xbtn разделяются запятой название кнопки(которое может содержать запятые) и передаваемые параметры(разделённые запятыми). на этом мозг отключается. иду спать 1. fireton предлагает заключать список параметров в скобки 2. разделять можно точками с запятой 3. можно по прежнему использовать фигурные скобки, по любому оператор вида xBtn {пар1; ...; парN},Лока, Кнопа будет более стройным по построению и человекочитаемым, чем оператор xBtn Лока, {pln Куча_текста; if Укуренное_Условие then; и_прочая_чертова_куча_операторов}, Кнопа 4. В конце концов можно все-таки склониться к минимализму, и обойтись ОДНОЙ переменной :-D А теперь, раз опасный камень с предлагавшимся ранее нефункциональным форматом xBtn обойден (надеюсь) - просто соображение в порядке бреда. Касательно использования метки вида :#%Переменная$. Сейчас объявить такую метку невозможно (проверил лично на имеющихся у меня УРКах). Но если бы это было возможно (а почему бы и нет?) - то это, друзья, БОМБА. Представьте, что действительно можно описать метку, составная часть имени которой является переменной и определяется на этапе выполнения кода. Это вполне реально - ведь URQL является интерпретируемым языком, и текст программы, с которым работает плеер вполне можно динамически обновлять. Что мы имеем? А мы имеем неявно задаваемый параметр, который можно использовать при вызове метки! Проще объяснить на куске кода (он не рабочий, но мог бы работать): :loca input UsrData btn Say#%UsrData$, Answer end :Say#%UsrData$ pln You said #%UsrData$ end Данный пример, конечно мало показателен (он вполне может быть изменен с применением обычной метки - но важно следующее - мы смогли передать в вызываемую локацию некий параметр. Если эту возможность реализовать, то URQL станет единственным претендентом на самый бредовый язык в мире :-D

fireton: ghoest пишет: Касательно использования метки вида :#%Переменная$. Мой мозг отказывается это воспринимать. :(

ghoest: fireton пишет: ghoest пишет: цитата: Касательно использования метки вида :#%Переменная$. Мой мозг отказывается это воспринимать. :( Во-первых, такую метку употребил noname, см. в постах выше. Во-вторых, это в порядке бреда, просто для разминки мозгов :). В-третьих, это вполне в духе URQL :) ЗЫ. Хотя размышлять над таким извращением трудно. (Для меня метка вида :loc#%VAR$ примерно то же самое, что файл c именем file*name.??? :-D) - но тем не менее, легкость, с какой noname применил эту конструкцию заставляет предположить, что она вполне ожидаема кодером (в духе URQL)

ghoest: Перечитал еще раз участок ветки с моими рассуждениями - действительно, невнятно, и уводит от темы :( Предлагаю резюмировать итоги обсуждения - чтобы не забивать голову как вновь пришедшим, так и людям, непосредственно причастных к созданию Акурки2 и в частности, к определению окончательного формата xBtn. МАНИФЕСТ xBtn. 1. Необходимость введения оператора xBtn (либо расширения синтаксиса оператора Btn) признается и более не обсуждается. [для противников xBtn предлагаю кусок кода из поста о Божием Суде - этот код написан с применением существующего варианта xBtn из 1-й Акурки и, смею утверждать, не может быть реализован с помощью стандартного Btn - ни более длинным/трудным способом, ни каким либо другим - вообще никак] 2. За основу синтаксиса для нового xBtn (либо для расширения синтаксиса Btn) принимается вариант firetona, записываемый в общем виде как Оператор_Btn [список_выражений], Локация, Название кнопки - окончательный синтаксис следует в дальнейшем уточнить Данный вариант xBtn понимается, как вариант, математически эквивалентный существующему формату xBtn из 1-й Акурки, а так же как вариант, математически эквивалентный вызову процедур в других языках программирования. 3. Вариант синтаксиса xBtn Л_Проц, Л_Перехода, Название кнопки (а также любой другой синтаксис, который использует в качестве операндов только метки) - признается неудовлетворительным с функциональной точки зрения и далее не обсуждается.



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