Лично я продолжаю разработки в области 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 новых переменных, которые удаляются т.к. равны нулю.
Неактивен
кто-нить уже написал другой рифмосоставитель для программы aurq-Стихоплюй? что-нить связаное с urq... и главное чтоб по-смешней! (рифму можно сделать например как у частушек, см. ссылки на описание др. прог)
____
в танке БОМЖ незаметный лает,
в танке чайник офигенный мечет и рвет,
ништяк хваленный постоянно тает,
мрак коричневый врет не уйдет...
2009г.
Неактивен
ASBer - а на глупый вопрос можно глупо ответить?...
...хотя ладно, опиши алгоритм этой программы, укажи ссылки на уже сделанные, и желательно кол-во строк кода языка на котором написана. Если заинтересует, возможно возьмусь, ибо нет других стимулов, в виде достойной оплаты подобного проекта.
p.s. удивлять я ни кого не собирался, просто показал как сделать это на urq
Неактивен
aurq0092 нашел интересную ошибку в условном операторе одного квеста...
решил показать ее работу:
pln Тест на ошибочные конструкции языка URQ. p=0& pln - записываем число в недопустимую переменную p=p+10& pln - увеличиваем число в недопустимой переменной pln #p$ - результат который хранится в недопустимой переменной p #/$ДИАГНОЗ: все работает & if p<>10 then p не & pln правильно.& end
p.s. удалил из старых постов многие предыдущие версии aurq с проверенными квестами...
версия доступная в исходниках aurq0082
для работы пользуйтесь aurq0092
Отредактировано abcdef (21.07.2009 10:14)
Неактивен
Спасибо APROMIX, за интерес к платформе aurq и предложенный исходник win-оболочки.
В проектировании старался сделать aurq стандартным языком с жесткой структурой, все конструкции единобразны
и абстракции от систем ввода-вывода для лучшей переносимости. Базовой все-таки считаю aurq dos-режима (750 переменных, 63 знака в строках и макс. строка вывода в 255 знаков).
________
Оболочку, если и делать, то лучше канвасом с двумя слоями: на нижнем слое - рисунки, на верхнем - текст, типа fireurq, только не "пушкой по воробьям" без DirectX/OpenGL.
________
aurq0093 исправлен формат save-файла хранения строк, убрано ограничение в функциях обработки.
тестовая программа текстовый 3D-лабиринт. 16x16 клеток (портированно с j2me Pascal).
Неактивен
сетевая версия aurq0094net
добавлены две системных функции:
crc32 - строка с контрольной суммой квеста. Используется для сравнения с копией удаленной программы, пересылается в заголовке письма.
connect <тип_соединения> <порт_сервера> <host_адрес_сервера>
поддерживаются 3 типа соединения:
instr ответ=#%connect 0,80, адрес&$ - http (загрузка через методы get и post, возможна работа через proxy)
instr ответ=#%connect 1,25, адрес&$ - smtp (отправка электронной почты)
instr ответ=#%connect 2,110, адрес&$ - pop3 (получение первого письма из почтового ящика и удаление его оттуда)
_____
переменные используемые в работе системных функций и примеры использования:
http:
"_url"-полный путь к ресурсу (напр: instr _url=http://www.google.ru&);
"_data"-блок данных, если не пустой, то запрос будет вида post (напр: instr _data=Login=mymail##38$Domain=mail.ru##38$Password=пассворд##38$level=1&)
instr ответ=#%connect 0,80,win.mail.ru&$
в переменной "ответ" - полученный ресурс
smtp:
"_login"-пользователь
"_password"-пароль
"_mailfrom"-email-адрес отправителя
"_mailto"-email-адрес получателя
"_data"-текст письма (желательно не использовать переносы строк)
instr ответ=#%connect 1,25,smtp.mail.ru&$
если ошибка отправки - переменная "ответ" не пустая, с сообщением об ошибке
pop3:
"_login"-пользователь
"_password"-пароль
instr ответ=#%connect 2,110,pop3.mail.ru&$
в переменной "ответ" - загруженное письмо
___
примечание переменная "ответ" содержит "NO CONNECTION", если не удалось соединиться с сервером, подробную информацию об обмене данными или ошибке можно просмотреть в переменной "_log". перезаписывается при каждом соединении, также дублируется в файл "logio.txt"
прим: для выделения необходимы данных из принятого ответа и переменной "_log" см. функции работы со строками
___
p.s.: в архиве тестовые примеры
Отредактировано abcdef (28.07.2009 11:35)
Неактивен
чтоб наглядно - сделал пример AURQ-чат, только большинство серверов блокируют частую отправку почты через smtp, в том числе mail.ru, поэтому не желательно слишком часто писать сообщения, чем длиньше текст, тем выгоднее отправка, т.к. за сеанс передается много служебной информации все можно просмотреть кнопкой "смотреть лог", для тестирования можно указать, что свой тестовый почтовый ящик как отправитель, так и получатель.
:init cls btn setup,Настройка btn begin,Коннект! btn about,О программе btn exit,Выход end :common end :begin pause 1000 ;Очистка буфера текста pln _____________________________системная информация._____________________________& pln размер лога[#strlen #%_log$&$ bytes] crc32[#%crc32$] (см поле "Subject:" в логах)& btn get,опросить btn send,отправить btn log,смотреть лог btn init,выключение pause delay :get if strlen #%server$&=0 or strlen #%_login$&=0 or strlen #%_password$&=0 or strlen #%_mailfrom$&=0 or strlen #%_mailto$&=0 then pln ОШИБКА: пустые настройки&goto setup pln #%connect 2,110,pop3.#%server$&$ goto begin :send if strlen #%server$&=0 or strlen #%_login$&=0 or strlen #%_password$&=0 then pln ОШИБКА: пустые настройки&goto setup p введите текст сообщения:&instr _data=&input _data pln #%connect 1,25,smtp.#%server$&$ goto begin :log pln #%_log$ goto begin :setup if strlen #%server$&=0 then instr server=mail.ru& if strlen #%_login$&=0 then instr _login=my@mail.ru& if strlen #%_password$&=0 then instr _password=****& if strlen #%_mailfrom$&=0 then instr _mailfrom=my@mail.ru& if strlen #%_mailto$&=0 then instr _mailto=you@mail.ru& if delay=0 then delay=120000 pln Заполните настройки клиента (в скобках записаны примеры) p сервер (#%server$): &instr server=&input server p логин (#%_login$): &instr _login=&input _login p пароль (#%_password$): &instr _password=&input _password p мой e-mail ящик (#%_mailfrom$): &instr _mailfrom=&input _mailfrom p e-mail ящик клиента (#%_mailto$): &instr _mailto=&input _mailto p принудительный опрос в миллисекудах (#delay$): &input delay btn init,Закончить настройку end :about pln AURQ-NET. Демонстрационная программа email-chat pln автор: abcdef arT (c). pln e-mail: ironwoodcutter@bk.ru btn init,Назад end :exit pln Пока ;) end
Неактивен
подкорректирован обмен данными по протоколу pop3/smtp
Отредактировано abcdef (30.07.2009 15:55)
Неактивен
) такое уже сделано, достаточно писать квесты в "*.BAT - файлах" - тут вам и форматирование, и работа с реестром, ftp, и много другое... достаточно глянуть в папку "c:\windows\system32\*.exe"
добавляю к AURQ smtp ssh-аутентификацию - на хакерских форумах оценят, если сделать соединения потоков в 50-100 и чтение/запись в файлы;)
Неактивен
да,да...
ЭХ, застать бы тот светлый момент, когда на urq появятся вирусы, пользователи будут ими любоваться, оптимизировать, набираться опыта, хвастаться перед друзьями и т.д.
p.s.:уже и название готово: реинкарнация. urq-терминатор ![]()
Неактивен
шутник
)
эт старая серия, сейчас показывают "да прийдет спаситель". услуга, как подсказывают, платная (нужно ж как-то на кусок хлеба с маслом заработать).
хотя, если серьезно, в aurq нет, и ни когда не будет деструктивных функций, скрипты всегда работают только "в песочнице".
Неактивен
идеи о диагностических функциях ни чем толковым не помогут, а их реализация - шаг в прошлое. Лучше реализовать конвертер, приводящий и оптимизирующий квесты к единому виду, согласно негласному формату, который выполняется на всех интерпретаторах, напр: удаление всех пробелов в именах, единые строковые операции и тд.
Неактивен
Выкладываю вторую часть: 130 проверенных и конверированных квестов для aurq.
Может кому и пригодиться, а у меня пока пропал интерес, и более серьезные дела
жаль, но действительно интересные квесты - редкость...
___
о кодинге: все расширения других urq можно эмулировать.
Вот эмуляция для получения имени предыдущей локации
:common instr previous_loc=#%loc$& ;запоминаем предыдущую локацию instr loc=#%current_loc$& end
Отредактировано abcdef (03.11.2009 13:43)
Неактивен
а, и вот последняя из собранных версий.
более корректная работа с инвентарем.
( I - информация о переменнх инвентаря, U - дополнить меню элементами инвентаря )
Неактивен
APROMIX, интерпретатор это одно, а редактор - другое,
тем более пожелания пользователей относятся к другим платформам.
Советую писать на си, там отладчики удобнее.
p.s.: хотел сказать в аське, но похоже, ты удалил свой контакт из моих, о чем тогда с тобой можно говорить?
Неактивен