Лично я продолжаю разработки в области URQ и URQ_DOS (например, сделал свой Windows-интерфейс для URQ_DOS - с нормальными окнами, поддающимися масштабированию и настройке), но нужны ли они кому-либо еще ?
Чтобы там ни говорили противники этой платформы, но несколько хороших квестов под URQ уже создано и кроме того на мой взгляд она может быть очень полезной для начинающих авторов в качестве стартовой точки. Если проводить аналогию с языками программирования, то все ведь когда-то начинали с Бейсика и существование гораздо более мощных языков и по сей день не вытеснило его из своей ниши.
В общем, все-таки хотелось бы узнать мнение постоянных обитателей о целесообразности выпуска новых версий.
Недавно попался под руку неплохой urq-квест... под настроение решил сделать свою версию URQ-интерпретатора.
Поиски исходников привели к интерпретатору RipOS, но используемый алгоритм парсинга не понравился... я взял за основу стандартный последовательный парсер что привело к некоторым ограничениям языка URQL: имена переменных не должны содержать служебных символов и команд языка.
Интерпретатор имеет большой потенциал в дополнени и расширении, включены практически все стандартные команды, находится на стадии тестирования, выполнен в Turbo Pascal 7.1 и легко может быть перенесен на другой язык.
Кого-нить заинтересовал проект, остались ли поклонники URQ-среды?
Неактивен
uux - спасибо за советы!
думаю интерпретатор составит конкуренцию имеющимся.
Способ отображение текста и меню - это подпрограмма берущая данные из подготовленных массивов текста и меток перехода. я сторонник текстового. Однако здесь оч. легко перестраивать под любой формат вывода: текстовый, графический, гипертекстовый.
___
Текущее состояние проекта: 700 строк кода, 18 кб компилированная версия,
+ - * / \ = <> > < <= >= & , # $ ; : <newln> <eof> - используемые команды и символы,
and. or. not. then. p. pln. btn. if. goto. proc. end. pause. inv. input. instr. cls. invkill. perkill. save. common. rnd - поддерживаемые операторы и команды,
music. play. - поддерживает но не обрабатывает.
работа с инвентарем - пока не реализована
___
p.s.: квестами интересуюсь недавно, в свободное от работы время, писать их врятли буду из-за отсутствия фантазии.
Буду рад помощи в тестировании. когда отлажу - предоставлю исходники, т.к. делаю только из интереса для общего дела.
Неактивен
Eten - делаю под dos на "обычном" паскале именно для того чтобы запускалось и в dos и в windows, можно добавить ~100 строк кода эмуляции функций crt.keypressed, crt.readkey, crt.textattr, crt.delay и будет компилиться в delphi, также есть pascal для телефонов ((.www).
Обработка ошибок уже сделана: сообщение_об_ошибке, строка, позиция в файле; кроме того вызывается функция save, которая аналогична команде языка (сохраняет имя квеста,текущий_common,вложенность_вызовов_подпрограмм,таблицу_переменных). формат текстовый, поэтому можно смотреть и анализировать что было во время ошибки и вернуться в это состояние при следующем запуске.
Возможно будет желание и сделаю фунукцию "проверка синтаксиса" ошибки синтаксиса выявятся сразу, когда файл квеста линейно прогоняется через интерпретатор, т.е. блокируется переход по меткам, вызовы подпрограмм, и вызовы меню.
____
(локальные переменные если есть то типы: integer,string,real) а вот список глобальных переменных и структур:
const max = 760; var f,fs : text; lstr : array[0..1024] of integer; {вложенность по номерам строк} name : array[0..max] of string[63];{таблица переменных и инвентаря...} numb : array[0..max] of real; {...и счетчик меток} buf : array[0..4096] of char; {буфер текста} menu : array[0..25] of string[63]; {список комманд} lab : array[0..25] of string[63]; {метки перехода по команде} fname : string; {имя текущего квеста} curlab : string; {имя текущая основной метки} common : string; {имя текущей локации} ts,tt : string; {имя идентификатора, текст} pbuf : integer; {позиция в буфере} plab : integer; {позиция списка команд} pstr,ppos: integer; {текущая строка и позиция в файле} pl : integer; {номер вложенности считывания} toks : integer; {текущий элемент} num,ex : real; {считанный номер} c : char; {текущий символ из файла}
____
Исходя из размера сегмента памяти и длины строки в Turbo Pascal ограничения: длина пользовательских имен (метки,переменные,инвентарь, а также переменных языка типа строка) не больше 63 символов. Строки print, println не более 255 символов (остальное обрезается). И файл при переходе на метку приходится перечитывать заново. Если реализовывать в delphi - то все эти ограничения можно обойти. Но пробую сделать минимально требовательную к ресурсам и простую URQ.
___
недели 2-3 знаком с URQ, но хоть убей, не знаю: зачем нужно было делать тип переменных не целочисленными?
p.s. сможет ли кто-нить помочь с особенностями языка, синтаксиса (если таковые имеются)? а то запускать квесты или искать крупицы информации в инете времени не хватает...
Неактивен
Спасибо Korwin'у и uux'у за предоставленную информацию! (написано интересно - прочитаю)
Добавил на код "нашлепок" - и превратился в сканер синтакиса, режимы работы:
непосредственная работа/проверка синтаксиса/проверка синтаксиса и наличие меток переходов (режимы работы настраиваются двумя булевскими переменными). сейчас включен последний режим, показывает возможности текущей версии по разбору команд. (без сканирования меток работает на порядок быстрее, и еще, текущая версия не знает оператор ELSE) также не позволяет создавать "goto #%стр$" и прочие безобразия в вычислениях, непомню как выглядело, что-то типа: "x+#abc$" - причем подобные записи были не в строках.
___ комментируйте строки ";" если хотите чтобы их пропускал парсер.
p.s.: для переходов на строковую метку пользователя я лучше сделаю внутреннюю переменную и команду, которая считывает оттуда и преобразовывает строку в пользовательское_имя_метки (просто это концепция парсера - отделить строки от пользовательских имен)
___
если выявилась ошибка, то ее нужно искать назад по строке от обозначенного места, т.к. сканер говорит о ней, когда становится однозначно ясно.
иногда ошибку нужно смотреть на предыдущей строке, во время сканирования текста не выводится ни каких сообщений, текст необходимо переконвертировать а dos-кодировку (можно сделать стандартным виндовым WordPad, предварительно сменив расширение файла на ".txt")
___
ни один из нескольких сканированных не был полностью правильным, то метки не хватало, то команды пропущены...
Отредактировано abcdef (21.07.2009 09:40)
Неактивен
Представляю тестовую версию программы URQ-интерпретатора с исходным кодом на языке Pascal.
Оформление отображения текста пока не проводилось, основная задача - проектирование парсера для стандартизации и единообразия представления алгоритма разбор команд языка URQL.
Практически все, если не все, программы URQL построены по принципу вычленения подстрок, когда считанная строка делится по позиции вхождения какого-либо слова, а эти половинки обрабатываются по отдельности...
Здесь-же предлагаю алгоритм, работающий по принципиально-другому способу - разбору как у стандартных языков программирования.
что реализовано в данной (0.0.1) версии:
поддержка всех арифметических и логических операций, операторы:
if ... then ... [else не поддерживается]
p, pln, btn - строки текста с подстановками #выражение$ #%текстовая_переменная$ ##выражение$
instr - единственный способ создания текстовых переменных (длины хранимой строки пока ограничена 63 символами) с подстановками #выражение$ #%текстовая_переменная$ ##выражение$
goto, proc, common, inv, rnd, cls, input, invkill, perkill, save, pause, end.
Характеристики:
* работа с файлами неограниченной длины
* при переходе по метке файл перечитывается заново
* таблица переменных (переменные/инвентарь/метоки/строки) длиной 750 элементов. (строковые типы занимают по два элемента).
* история возврата из подпрограмм на 1025 позиций.
* анализатор ошибки отображает: необходимый оператор для данной конструкции, указание строки, позиции в строке где обнаружена.
* запуск с командной строки (help - выводится при запуске без параметров)
* пока интерпретатором обрабатываются файлы только в dos-кодировке (ASCII).
Режимы работы:
0 - запуск квеста
1 - запуск из сохранения (не тестировался)
2 - сканирование квеста на наличие ошибок
3 - сканирование квеста на наличие ошибок и проверка наличия всех переходов по меткам (долго обрабатывает...)
Отредактировано abcdef (21.07.2009 09:41)
Неактивен
прочитал документацию Korwin'а - для полноценной версии нужно:
* добавить операции сравнения строковых переменных и др. (надо подумать как лучше сделать это).
* автоподстановку имени меток, переменных/инвентаря (лучший вариант сделать спец. переменную которая принимает строку, а обращение к ней возвращает одно_имя или один_оператор языка URQL).
* простой способ внедрения оператора ELSE в том, чтобы разместить его после IF... THEN на следующей строке,
например:
if i<max then pln Обработка...
else pln Конец обработки...
____
в примерах показано так:
if Дубина then btn шмяк,Ударить зеленого гоблина дубиной по башке! else btn драп,Драпать!
так что получается что кроме символов: # & <crlf> в строках нельзя использовать слово <ELSE>?
интересны также часто встречающиеся конструкции вида: if i<max then goto loop1 else pln Конец цикла
в которых можно вообще обойтись без ELSE, т.е. примерно так:
if i<max then goto loop1
pln Конец цикла
_____
осталось несколько вопросов:
в доке: - Выражение #переменная_x$ заменяется на значение числовой переменной 'переменная_x'
вопрос: - понятно если это встраивается в строку, но если это просто оператор по тексту программы, кто мешает просто писать ...переменная_x... без #...$?
__
в доке: - Возможно вложение, то есть такая строка считается допустимой: #var#x$$
вопрос: - а нужно ли вложение? т.к. это аналогично операции вида: #var$#x$
_Заранее спасибо!
_____
p.s.: у кого какие предложения/пожелания для усовершенствования предложенного AURQ?
Неактивен
Единые правила работы интерпретатора:
<зарезервированные символы> - : ; > < = + - * ( ) / \ , # $ & #13#10 #27
<зарезервированные слова> - and or not if then else p pln btn goto proc end inv rnd instr cls input pause music play save common anykey invkill perkill system
<пользовательское имя> - имя состоящее из любых символов, кроме служебных; символы с кодом меньше или равном 32 вырезаются (знаки табуляции, пробелы). Также в имя не могут входить <зарезервированные слова>
<строка текста> - символы до знака "&" или конца строки, где обрабатывается вставки после наличие символа "#", причем этот символ требует завершения символом "$":
#$ - подстановка пробела
#/$ - подстановка перехода на новую строку
##<арифметическо-логическое выражение>$ - где <арифметическо-логическое выражение> = подстановка кода печатаемого символа
#<арифметическо-логическое выражение>$ - где <арифметическо-логическое выражение> = подстановка вычисленного числа
#%<пользователское имя>$ - где <пользователское имя> = подстановка строки из строковой переменной <пользовательское имя>
Опрерация подстановки system. Заменяется содержимым строки sys, например (var=_abc1):
instr sys=lab#%var$
goto system
представляется в:
goto lab_abc1
Оператор выбора записыается следующим видом:
if <условие> then <действие>&<действие>&...
else <действие>&<действие>&...
Количество пореходов на метку можно получить только так: count_<пользовательское имя>
Инвентарь по кнопке "i" - в меню текущей локации добавляются действия с инвентарем. При выборе действия с инвентарем они ставяться в очередь и выполняются при переходе в следующую локацию.
____
p.s.: исправил некоторые ошибки в текущей версии, в ближайщем будущем добавлю сравнение строк по маске и т.д.
о некоторых возможностях интерпретатора сознательно буду умалчивать, чтобы не прививать плохих привычек программирования
Отредактировано abcdef (21.07.2009 09:42)
Неактивен
прошу прощения, черт дернул компилить перед копированием на сайт с опцией с тотальной проверкой выполнения программы - в итоге вылетало при переполнении переменной счетчика...
___
Добавил поддержку как Dos так и Windows кодировок, теперь запуск производиться из командной строки так:
AURQ <тип_запуска> <тип_кодовой_страницы> <имя_файла_квеста>
тип_запуска:
0 - запуск квеста
1 - запуск из сохранения (файл SAVE.TXT)
2 - сканирование квеста на наличие ошибок
3 - сканирование квеста на наличие ошибок и проверка наличия всех переходов по меткам (долго обрабатывает...)
тип_кодовой_страницы:
w или d
имя_файла_квеста:
как и все Dos-имена - не более 8 символов в названии, и без пробелов
Например: aurq 0 w first.qst
Например: aurq 1 d first.qst
_______
Несколько слов о квесте RIGA.QST - интерпретатор пока требует чтоб в каждом квесте была локация common, хоть и пустая, например:
:common
end
Примечание для ускорения работы, желательно часто вызываемые локации, например common размещать как можно ближе к началу файла.
В строках текста два служебных символа: это "&" и "#" первый - признак завершения строки, второй - признак начала подстановки и должен заканчиваться символом "$". Эти два символа можно заменить кодами #38$ и #35$
_______
По Dos делаю потому что несколько ограниченная среда и меньше соблазнов к неоптимальному стилю программирования, что вцелом благоприятно влияет на разработку. Потом можно будет немножко подкорректировать (2-3 часа) и будет готова мобильная версия на MidletPascal.
Отредактировано abcdef (21.07.2009 09:44)
Неактивен
исправлено:
- команда anykey
- зарержка команды pause
- уменьшено мерцание курсора
- генерация ошибки, если невозможно перейти на метку (ранее просто зависал)
- сообщение о завершении квеста, в локации которой нет кнопок
Отредактировано abcdef (21.07.2009 09:45)
Неактивен
1 написал игру Aurq-tetris (в архиве с программой)
2 исправил пару ошибок
3 добавил более корректную обработку переполнение экрана
4 подкорректировал алгоритм задержки
5 добавил работу с цветом, за это отвечают три переменных:
style_textcolor
style_buttoncolor
style_cursorcolor
они определяют цвет текста и заднего фона и находятся в диапазоне 0...255, где
младшие 4 бита цвет текста, старшие 4 бита - цвет фона,
например: фон=2; текст=14 будет так: style_textcolor=2*16+14
Отредактировано abcdef (21.07.2009 09:46)
Неактивен
добавлена поддержка шифрованных квестов формата QS1 (также сделал конвертер отдельной программкой для удобства отладки)
доработал разбор, теперь строки с названиями меток могут содержать комментарии.
при сканировании на синтаксис добавлены два вида предупреждений:
"TOO LARGE BLOCK" - текст локации может не поместиться в один экран
"TOO LARGE TEXT" - текстовая строка содержит более 253 символов
обнаружена ошибка проверки (при выполнении все нормально) - не обрабатываются выражения со стоящим вначале знаком минус или плюс "-" "+", например: a=-2 необходимо написать a=0-2
___
Некоторые замечания по нахождению мест распознанных сканированием:
1. Метки btn сканируются в конце локации, поэтому если будет сообщение вида: "Error: label <30> not found (STR:775,POS:0,TOKEN:end)" где "TOKEN:end" то это говорит что мы в конце локации, а команда с ошибочной меткой "30" находится где-то выше по тексту.
2. "warning: STR 22, TOO LARGE TEXT" - вполне вожможно что это была предыдущая строка, потому как строка заканчивается переходом на новую строку, а после этого определяется что она слишком длинная.
___
Замечания при генерации переходов: если программа сканирования выдает ошибку на переходе типа goto system, то это значит что в текущий момент сканирования в system находиться мусор чтоб обойти это на этапе отладки можно сделать так:
:1
;предыдущая локация
end
instr sys=2 ;этот код ни когда не будет выполняться в реально работающей программе, сюда поместим заполнение system какой-нить меткой
:2
btn system,назад
end
___
проверен разбор нескольких квестов с http://ripsoft.narod.ru/Download.htm
Гарри Гаррисон
Похождения отважного хомяка Семена: Побег
Похождения отважного хомяка Семена-2: КРУТОЙ СПУСК
Древний кинжал 1
НАДЕЖДА НА ЖИЗНЬ
Без права на надежду
Замечания по поводу сканированных квестов:
1. В квесте Гарри Гаррисон автор перевода на URQ намеренно испортил код квеста повсюду на метках отсутствуют либо ":" вначале метки, либо цифра три исправлена на русскую букву "з".
2. Без права на надежду - много ошибок, такое впечатление будто автор также хотел запутать игрока, порой создается впечатление "как это может вообще работать..."
___
Для пользователей: включены все проверки. версия - отладочная.
Отредактировано abcdef (21.07.2009 09:57)
Неактивен
Добавлены функции работы со строками:
;получить длина строки/// число = strlen строка&
;сравнить две строки/// число = strcmp строка&строка&
;получить код символа из строки/// число = strchar числовая_позиция,строка&
;скопировать подстроку/// строка = strcopy начальная_позиция, длина_подстроки,строка&
;получить позицию вхождения подстроки в строку///число = strpos подстрока&строка&
;установить символ в строку/// строка = strset позиция, код_символа,строка&
Примечание:
из версии aurq005 ошибок не выявлено, код немного переработан
версия тестовая. просьба сообщать о найденных багах
для работы используйте только последнюю версию программы, если встретилась ошибка проверьте ее на предыдущей версии.
Отредактировано abcdef (21.07.2009 09:47)
Неактивен
собрал windows-версию aurq007.
__
добавлена поддержка музыки, снято ограничение на длину строковых переменных, таблица переменных увеличина в 20 раз т.е. 750*20.
__
внесена ошибка в версию aurq006: нельзя использовать числа в именах переменных, исправлено в текущей версии.
__
подготовил простой тестовый набор для URQL (без использования #...$ в произвольном месте) смотрите как работает в других URQ.:
pln COMPLEX URQ - TEST by arT (c) pln&pln -----------&pln 1. PRINT demo&pause 1 pln !" $% '()*+,-./0123456789:;<=>?@ pln ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` pln abcdefghijklmnopqrstuvwxyz{|}~Ђ pln Ѓ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—™љ›њќћџ pln ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕїА pln БВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯа pln бвгдежзийклмнопрстуфхцчшщъыьэЃљ pln&pln -----------&pln 2. PRINT (char/var/str) demo&pause 1 n=70 instr s=!" $% '()*+,-./0123456789:;<=>?@ p ##48$ , #n$ , #%s$ pln #/$#$#$#n-10$ pln&pln -----------&pln 3. PRINT (char-generator) demo&pause 1 n=0 :l 1 ;) hi all! p ##n$&n=n+1&if n<255 then goto l 1 pln&pln -----------&pln 4. VARIABLE demo&pause 1 normaL VariablE = 5 !"%'.0123456789?@[]^_`{|}~=50 ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—™љ›њќћџ ЎўЈ¤Ґ¦=40 §Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕї=30 pln #normal variable$ , #!"%'.0123456789?@[]^_`{|}~ * 2$ pln&pln -----------&pln 5. EXPRESSION demo&pause 1 n=2+2*2 n2=(2+2)*2 pln 2+2*2=#n$; (2+2)*2=#n2$& ;comment...... bool=n<n2 pln #bool$ = #n<n2$ bool2=30/9>3 and 1 bool3 = not 30/9>3 and 1 p #bool2$ <> #bool3$ if bool2 then pln ok ;) else pln no :( pln&pln -----------&pln 6. PROC demo&pause 1 goto next :proc_label n=n+1 i=i-1 p . if i>0 then proc proc_label end :next n=0 i=10 proc proc_label pln #/$ 10=#n$ ? pln&pln -----------&pln 7. ANYKEY demo&pause 1 pln press a key: anykey key pln = [#key$] key code pln&pln -----------&pln 8. INPUT demo&pause 1 input n&pln your number=#n$ pln&pln -----------&pln 9. MUSIC demo&pause 1 music=1+1 play m1 pln&pln -----------&pln 10. INV demo (press "i")&pause 1 :0 pln label test count_common=#count_common$ inv+ ttt btn 0,0 end :common end :use_ttt_look pln ttt end
Неактивен
и вот еще: delphi исходный код библиотеки адаптиции к windows-плитформе
Неактивен
AURQ008 (для dos и windows).
1. подкорректирован алгоритм
2. добавлена возможность установки метки в произвольное место, текст метки заканичивается при достижении символов ";" "&" либо конца строки.
кстати напомню что команды "proc" "end" "save" допускается ставить либо единственными на строке, либо в самом конце многокомандной строки.
_______________
привожу пример c произвольным расположением меток
Matrixx-screen:
goto init&:begin&p #/$ #$&i=0&:1&j=0-1&styletextcolor=2&:2&j=j+1&if j>=5 then goto 3 instr sys=x#j$ if (system>=i+1) or (system<i) then goto 2 styletextcolor=10&instr sys=y#j$&system=system+1 if system<=2 then styletextcolor=15 if system>9 then system=1&instr sys=x#j$&system=rnd*10 :3&p #rnd*10$&i=i+1 if i<10 then goto 1 pause 1&goto begin ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; :init&styletextcolor=2*16+10&pln << M A T R I X D E M O by arT (c) e-mail: ironWoodcutter@bk.ru>> styletextcolor=2&i=0&:4&instr sys=y#i$&system=8&instr sys=x#i$&system=1&i=i+1 if i<5 then goto 4 goto begin
Отредактировано abcdef (21.07.2009 10:03)
Неактивен
подробное описание, полные исходники и доработаная версия aurq_win0082
_____
в архиве квест "хроники капитана Блуда, тайна левой ягодицы".
замечания: реализация квеста интересная, но примерно треть локаций не существует, добавляйте сами при прохождении переадревацию в пустую локацию. например:
:give__ :use__ :give_экипаж_блуд :give_gazettedestribunaux_блуд :give_gazettedestribunaux_герда :give_деньги_блуд :give_блокнот_блуд :use_gazettedestribunaux_ :use_gazettedestribunaux_столик :use_деньги_деньги :use_деньги_столик :use_деньги_блокнот :use_блокнот_блокнот :give_столик_блуд :читать_газету :common end
Неактивен
версия aurq0089. описание. белее сотни проверенных и адаптированных квестов в архиве
+Мутанта-3 40000_demo 9_gum A.L about agentD aif Alice's+Adventures+in+Urqland Ancient_dagger_1 Ancient_dagger_2 ARROW Ayk bigsch black_mage BO3POBURN Bodun Brain1 Brain11 buratino CD-пират2-Beginning colors comictravel comictravel2 ConspiracyLifeForNothing Corleone creat Demo DODS DOOMуровень1 DOOMуровень2 ElfQuest ella Escape1_02 EVGENY Evgeny2 fall5 GarpiasFly GEROJ ghost1 grey_mage hacker HackerSim hamster1 hamster2 hippi Hope internet ITF kolobok labirint1 lift-4 Matrix matrix2 mdemo Memory Memory2 mines mystery nash Nightmare p Parish1313 Petrov petrovicch Pikachu poiske Pop qwerty-bench riga Sam Semion StarngerVer11 strtest sword t test tetris TheMagicRill100 the_room TURNIR unreal URQ-2009 VinnyPuh VirusDos VVMB WH Wolf yo Zachetka Вампиры1 Выползание_некроманта Гладиаторы Демоны_темной_стороны Детектив_Memory КвестПроПетю Константин Крюгер Месть Молчание_хрящей Мутация+Мутанта Рагнарек Тень Царство_смерти Черная_пятница Яша
Неактивен
uux - "0 w tetris" значение по умолчанию, если в коммандной строке нет, или не правильно указаны параметры.
запуск производить так:
aurq_win 0 w myquest.qst
aurq_win 1 d myquest.qst
aurq_win 2 w myquest.qst
aurq_win 3 w myquest.qst
aurq_win 4 w myquest.qst
имя квеста без пробелов, а для dos-версии не более 8 символов в имени.
(в предыдущем архиве имеется bat-файл для проверки всех квестов в текущем каталоге с программой aurq_win)
Отредактировано abcdef (02.07.2009 10:56)
Неактивен
aurq - дополнение:
подпрограмма ввода строк в строковую переменную "SYS" (примечание: input - ввод только чисел)
:inp p input str:&instr sys=& ;пустая строка :_inp1_ ;метка повтора anykey k&length_=strlen #%sys$& ;k = код нажатой клавиши, length_ = длина строки if k=8 and length_=0 then goto _inp1_ ;backSpace и пустая строка - не обрабатывать if k=8 then instr sys=#%strcopy 1,length_-1,#%sys$&$&p #/$#%sys$&goto _inp1_ ;удалить последний символ if k=13 or k=27 then pln&end ;Enter или Esc - выход из ввода if k<32 or k>240 then goto _inp1_ ;не вводить непечатаемые символы instr sys=#%sys$##k$&p ##k$&goto _inp1_ ;добавить символ в строку и отобразить на экране end
пример использования:
proc inp
instr name=#%sys$&
if strpos abcdef&#%name$& then pln Здравствуй хозяин!&
else pln Здравствуй гость!&
Отредактировано abcdef (03.07.2009 12:30)
Неактивен
aurq009
1. оператор "input <переменная>" ввод строковых переменных если таковые существуют, иначе ввод числовых переменных.
2. работа с инвентарем кнопки: "i" - показать кол-ва инвентаря, "u" - добавить в текущее меню пункты на использование инвентаря
3. выполнение действий с инвентарем в меню (запускается экземпляр парсера и вызывается подпрограмма инвентаря, пока вложенность переходов не вернется на уровень котором происходил вызов)
4. При отображении сообщений появилась отметка о разделе где обнаружена ошибка.
5. Добавилось два вида предупреждений: оператор "else" не с начала строки, оператор "proc" - не в конце строки. (aurq корректно обрабатывает квесты только если исправить эти предупреждения)
6. Тип только для чтения "счетчик метки" изменен в обычный числовой тип, теперь к счетчику можно получить доступ как с приставкой "count_", так и без нее.
7. Подкорректирован алгоритм вывода локации. Исправлены прочие ошибки.
Документация к версии не прилагается.
8. квесты корректированные программой:
Ожившее дерево
Красная шапочка
Дверь в лето
как заработать триста тысяч евро (demo)
и др
___
примеры алгоритмов AURQ:
эмуляция структуры tokens
;instr tokens_delim=char& ;instr tokens=10ghg& instr tokens_delim=,& instr tokens=1aurq,2d,3xc,4sdfsfsd,5xcvxc,6sdfsdfsd,bond-007,8,9,0& proc toks pln #tokens_num$ = _#%token1$_#%token2$_#%token3$_#%token7$_ end :common end :toks tokens_num=1&b=strpos char&#%tokens_delim$&=0&len=strlen #%tokens$& :loop i=2 if b then i=strpos #%tokens_delim$&#%tokens$&&if i=0 then i=len+1 instr sys=token#tokens_num$&instr system=#%strcopy 1,i-1,#%tokens$&$ if b=0 then i=1 len=len-i&if len>0 then instr tokens=#%strcopy i+1,len,#%tokens$&$&tokens_num=tokens_num+1&goto loop end
Неактивен
Xlomid - прошу прощения за неправильное название, вчера пришлось все делать в спешке, открыл квест (обычно в начале пишется название, помню что "300 тыс. евро"), первое что нашлось "300 тыс... заработать..."
Прикол: Догадываюсь почему работает не совсем корректно - проверить и отладить интерпретатор на всех имеющихся квестах успел, а вот переключить с режима версии dos 16 bit - нет, поэтому таблица имен 750 мест, размер строковых переменных 63 символа...
кстати немножко об обработке квестов:
___
если где-то попадается недопустимое имя, то дабы уберечь нервы от правки во всех местах (кроме того в некоторых ситуациях такие имена не выявляются), я пользуюсь функцией текстового редактора "заменить всё", где вместо недопустимых символов, я например ставлю знак "_".
Пример: "inv+ саша-маша+даша" - здесь ошибка,
а в этом случае ошибки выдавать не будет "if inv_саша-маша+даша>3 then ..." т.к. запись корректна и состоит из 3-х переменных.
___
aurq ни когда не вырезает пробелы из строк простого текста, но если в квесте есть ни как не обозначенные пробелы в конце строк, то они удаляются функцией используемого редактора "удалить пробелы в конце строк".
Обозначать конец строк в aurq только через символ "&", т.к. иногда применяемый символ ";" входит в допустимый набор символов, если нужно поставить комментарий после строки делать так: pln строка текста& ;а это комментарий.
___
если имеется однотипная строка или конструкция выражения которую нужно переделать, также используется "заменить всё", например получение целого случайного числа "rnd2", "rnd3", "rnd4" и т.д. - в aurq нет такой конструкции, поэтому рассмотрим проблему:
1. сгенерировать обычным "rnd" числа в другом диапазоне (отличном от 0...0.999)
2. получить целое число из дробного
решение:
1. изменить диапазон можно умножением, если x10, то будет 0...9.99; если x100 то 0...99.9; если x1000 то 0...999
1a - random функции стандартных языков генерируют случайное число от 0 до границы,
например random(5) = 0...4, если нужно сместить и сделать в диапазоне 1...5, то делают так random(5)+1 тогда диапазон будет 1...5
2. в aurq есть операция (не путать с обычным делением "/") взятие остатка от деления "\" - эта операция возвращает целочисленный результат, поэтому пропустив выражение через нее мы получаем без дробной части.
готовая конструкция: rnd5 = 1+rnd*100\5; rnd200=1+rnd*1000\200
___
если не найдена метка, то:
1. попробовать поискать ее в редакторе "поиском по тексту" с текстом ":<несколько первых бук в названии>"
2. если похожих меток нет и нет локации по смыслу, то можно добавить свою
3. если не охота, то если в локации где ошибочная метка есть другие жесткие "btn", т.е. не появляющиеся по условию, то смело комментируем ошибочную конструкцию с меткой.
4. если ничего не помогло - ищем (поиск по тексту имени метки) все вхождения в тупиковую локацию и комментируем их.
___
для работы с цветом style_dos_textcolor "заменить всё" на styletextcolor, и т.д.
___
Примечание: в работе используется редактор "notepad++" - многооконные вкладки, большое кол-во плагинов для обработки текстов, подсветка синтаксиса, меню запуска интерпретатора и т.д.
______________
По поводу доступа c "count_" и без:
Ответ Виктора читал - обснованно и грамотно, но однозначного ответа не услышал.
Сколько раз уже попадались квесты с обоими вариантами обращений. Примененная возможность позволяет "закрыть глаза" на эти огрехи. (могу вернуть обратно, но тогда запись в счетчики будет запрещена, их можно будет только обнулить через "perkill <имя_метки>")
Отредактировано abcdef (08.07.2009 11:26)
Неактивен
aurq0092 перекомпилен с опциями win 32 bit, добавлена проверка диапазона чисел в текстах.
прим. в игре "где достать 300 тыс евро" где-то на 603 строке в команде "btn system, Говорить с #%system$", вместо #%system$ подставить #%tmps$, для цветного режима заменить переменные цвета.
в алгоритм эмуляции токенов добавить 3-ю строку
:toks
tokens_num=1&b=strpos char&#%tokens_delim$&=0&len=strlen #%tokens$&
IF LEN=0 THEN TOKENS_NUM=0&END
:loop
Неактивен
AURQ0092 - программа сочинения случайных четверостишей. Если подобрать свои сходные слова и изменить рифмовку результат будет на много лучше.
goto init :begin pp=0 pln "не долго думая..." ;обойти 5-ть строк со списком слов i=0 :r1 p s#i+1$[&pause -1 instr sys=s#i$ instr str=#%system$ len=strlen #%str$& ;посчитаем кол-во входящих слов c=0&j=1 :r2 if strchar j,#%str$&=46 then c=c+1 j=j+1&if j<=len then goto r2 ;END - посчитаем кол-во входящих слов p #len$]=#c$ >>> &pause -1 ;выберем 4-е случайных слова из строки j=0 :r3 n=rnd*1000\(c-1) m=len k=m :r4 if strchar k,#%str$&<>46 then goto r5 if n>0 then m=k-1&n=n-1 ;если разделитель - запомним его позицию else goto r6 ;перешли к нужному слову :r5 k=k-1 if k>0 then goto r4 :r6 ;сохраним найденное слово в массиве instr sys=ss#pp$&instr system=& :r7 k=k+1&instr system=#%system$##strchar k,#%str$&$& if k<m then goto r7 ;END - сохраним найденное слово в массиве p "#%system$", &pause -1 pp=pp+1&j=j+1&if j<4 then goto r3 ;END - выберем 4-е случайных слова из строки pln & i=i+1&if i<5 then goto r1 ;END - обойти 5-ть строк со списком слов ;вывод строки pln&pln&pln&pln pln Я сочинил:& pln #%ss12$ #%ss0$ #%ss8$ #%ss4$,& pln #%ss13$ #%ss2$ #%ss10$ #%ss16$,& pln #%ss1$ #%ss9$ #%ss5$,& pln #%ss3$ #%ss11$ #%ss17$...#/$ 2009г.& pln --------------- pln пересочинить - жмите кнопку! anykey pln&pln&pln&pln goto begin :init pln Стихоплюй портировано из j2me Pascal pln pln автор и первая версия без исходников: Orakcool http://waper.ru/forum/topic/335584& pln декомпиляция/оптимизация: abcdef arT(c). 2009. e-mail: IronWoodcutter@bk.ru& pln (p.s. abcdef не несет ответственности за полученные стихи.) pln instr s0=шаг.гамак.мрак.моряк.компакт.ламер.чайник.дом.пятак.итак.пусть так.пустяк.носок.косяк.ништяк.бардак.Длинный чувак.простак.эмперичесчкий маг.БОМЖ.голый Бомж.дурак.контракт.унылый маг.законный бардак.штатный враг& instr s1=читает.открывает.незнает.мечтает.тает.растает.теряет.латает.обалдевает.куда-то девает.о чем-то незнает.отрывает.принимает.отвергает.обобщает.раздевает.одевает.убивает.оживляет.чихает.лает.стирает.стонает.стекает.пугает.всех пугает.неподозревает.тебя направляет.направляет.его отбивает.чего то теряет.меня поздравляет.тебя поздравляет.постоянно чихает.ужасно чихает.тихо чихает.громко чихает.томно чихает.убого мечтает.повсюду растает.постоянно тает.и не одевает.аккумулятор сажает.цветы поливает& instr s2=грустный.синий.зеленый.влюбленный.оголенный.обножонный.огорченный.красный.безобразный.ужасный.прекрасный.неописуемый.хваленный.смирный.игривый.чудной.фиолетовый.незаметный.летний.офигенный.одномоментный.серый.коричневый.как обычный но& instr s3=в сарае.в чулане.на крыше.чуть выше.в потемках.далеко.в масленке.на бороде.в компе.в Москве.на балде.в танке.в железной банке.в машине.на голой резине.в зыбучей трясине.по ныне& instr s4=идет.не идет.наоборот.глаз не сомкнет.орет.поет.несет.трет.сосет.на оборот.обойдет.проймет.не уйдет.поет на пролет.чистит и рвет.рвет.обосрет.не заснет.врет не уйдет.обойдет.мечет и рвет.пальчиком трет.в баню пойдет.песню поет.хочет аборт.постоянно орет.непременно сосет.бывает проймет.иногда и не врет.постоянно храпит. .что бывает ворчит.убивая кричит.не читает, молчит.раздеваясь ворчит& goto begin
Описание и версии более сложных программ-поэтов.
http://pascal.sources.ru/cgi-bin/show.c … id=rhymer4
http://lleo.aha.ru/soft/lleo_dip.htm
http://lleo.aha.ru/soft/text_dip.htm
в архиве представлен алгорит для 3-х типов четверостишей написанных автором.
Неактивен
тест работы с переменными.
urq_dos-0.46; aurq_win -2.08; furq -4.25.
после комментирования первой строки
urq_dos - 1.00 мин; fireurq - 7.28 мин; aurq_win 9.42 мин.
aurq проигрывает т.к. на каждом цикле включается длительный алгоритм поиска и создания 7*3=21 новых переменных, которые удаляются т.к. равны нулю.
Неактивен