Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
04.07.2001 10:26

Victor
Гость

Нужны ли новые версии URQ и URQ_DOS ?

Лично я продолжаю разработки в области URQ и URQ_DOS (например, сделал свой Windows-интерфейс для URQ_DOS - с нормальными окнами, поддающимися масштабированию и настройке), но нужны ли они кому-либо еще ? smile

Чтобы там ни говорили противники этой платформы, но несколько хороших квестов под URQ уже создано и кроме того на мой взгляд она может быть очень полезной для начинающих авторов в качестве стартовой точки. Если проводить аналогию с языками программирования, то все ведь когда-то начинали с Бейсика и существование гораздо более мощных языков и по сей день не вытеснило его из своей ниши.

В общем, все-таки хотелось бы узнать мнение постоянных обитателей о целесообразности выпуска новых версий.

0    0    #2
10.03.2009 00:37

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

Недавно попался под руку неплохой urq-квест... под настроение решил сделать свою версию URQ-интерпретатора.
Поиски исходников привели к интерпретатору RipOS, но используемый алгоритм парсинга не понравился... я взял за основу стандартный последовательный парсер что привело к некоторым ограничениям языка URQL: имена переменных не должны содержать служебных символов и команд языка.
Интерпретатор имеет большой потенциал в дополнени и расширении, включены практически все стандартные команды, находится на стадии тестирования, выполнен в Turbo Pascal 7.1 и легко может быть перенесен на другой язык.

Кого-нить заинтересовал проект, остались ли поклонники URQ-среды?

Неактивен

0    0    #3
11.03.2009 08:34

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

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.: квестами интересуюсь недавно, в свободное от работы время, писать их врятли буду из-за отсутствия фантазии.
Буду рад помощи в тестировании. когда отлажу - предоставлю исходники, т.к. делаю только из интереса для общего дела.

Неактивен

0    0    #4
11.03.2009 21:41

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

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. сможет ли кто-нить помочь с особенностями языка, синтаксиса (если таковые имеются)? а то запускать квесты или искать крупицы информации в инете времени не хватает...

Неактивен

0    0    #5
12.03.2009 21:49

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

Спасибо Korwin'у и uux'у за предоставленную информацию! (написано интересно - прочитаю)

Добавил на код "нашлепок" - и превратился в сканер синтакиса, режимы работы:
непосредственная работа/проверка синтаксиса/проверка синтаксиса и наличие меток переходов (режимы работы настраиваются двумя булевскими переменными). сейчас включен последний режим, показывает возможности текущей версии по разбору команд. (без сканирования меток работает на порядок быстрее, и еще, текущая версия не знает оператор ELSE) также не позволяет создавать "goto #%стр$" и прочие безобразия в вычислениях, непомню как выглядело, что-то типа: "x+#abc$" - причем подобные записи были не в строках.
___ комментируйте строки ";" если хотите чтобы их пропускал парсер.

p.s.: для переходов на строковую метку пользователя я лучше сделаю внутреннюю переменную и команду, которая считывает оттуда и преобразовывает строку в пользовательское_имя_метки (просто это концепция парсера - отделить строки от пользовательских имен)
___
если выявилась ошибка, то ее нужно искать назад по строке от обозначенного места, т.к. сканер говорит о ней, когда становится однозначно ясно.
иногда ошибку нужно смотреть на предыдущей строке, во время сканирования текста не выводится ни каких сообщений, текст необходимо переконвертировать а dos-кодировку (можно сделать стандартным виндовым WordPad, предварительно сменив расширение файла на ".txt")
___
ни один из нескольких сканированных не был полностью правильным, то метки не хватало, то команды пропущены...

Отредактировано abcdef (21.07.2009 09:40)

Неактивен

0    0    #6
14.03.2009 00:44

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

Представляю тестовую версию программы 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)

Неактивен

0    0    #7
14.03.2009 19:36

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

прочитал документацию  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?

Неактивен

0    0    #8
16.03.2009 01:03

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

Единые правила работы интерпретатора:

<зарезервированные символы>  -  : ; > < = + - * ( ) / \ , # $ & #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)

Неактивен

0    0    #9
23.03.2009 22:07

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

прошу прощения, черт дернул компилить перед копированием на сайт с опцией с тотальной проверкой выполнения программы - в итоге вылетало при переполнении переменной счетчика...
___
Добавил поддержку как 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)

Неактивен

0    0    #10
25.03.2009 19:25

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

исправлено:
- команда anykey
- зарержка команды pause
- уменьшено мерцание курсора
- генерация ошибки, если невозможно перейти на метку (ранее просто зависал)
- сообщение о завершении квеста, в локации которой нет кнопок

Отредактировано abcdef (21.07.2009 09:45)

Неактивен

0    0    #11
29.03.2009 22:56

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

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)

Неактивен

0    0    #12
19.04.2009 19:41

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

добавлена поддержка шифрованных квестов формата 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)


Прикрепленные файлы:
Qs1ToQst.zip, Размер: 111,699 байт, Скачано: 683

Неактивен

0    0    #13
17.06.2009 09:54

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

Добавлены функции работы со строками:

;получить длина строки///   число = strlen строка&
;сравнить две строки///   число = strcmp строка&строка&
;получить код символа из строки///   число = strchar числовая_позиция,строка&
;скопировать подстроку///  строка = strcopy начальная_позиция, длина_подстроки,строка&
;получить позицию вхождения подстроки в строку///число = strpos подстрока&строка&
;установить символ в строку///   строка = strset позиция, код_символа,строка&

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

Отредактировано abcdef (21.07.2009 09:47)

Неактивен

0    0    #14
22.06.2009 09:43

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

собрал 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

Прикрепленные файлы:
aurq_win007.ZIP, Размер: 374,635 байт, Скачано: 666

Неактивен

0    0    #15
22.06.2009 09:46

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

и вот еще: delphi исходный код библиотеки адаптиции к windows-плитформе


Прикрепленные файлы:
lib.zip, Размер: 3,473 байт, Скачано: 677

Неактивен

0    0    #16
23.06.2009 13:59

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

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)

Неактивен

0    0    #17
26.06.2009 16:26

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

подробное описание, полные исходники и доработаная версия aurq_win0082
_____
в архиве квест "хроники капитана Блуда, тайна левой ягодицы".
замечания: реализация квеста интересная, но примерно треть локаций не существует, добавляйте сами при прохождении переадревацию в пустую локацию. например:

Код:

:give__
:use__
:give_экипаж_блуд
:give_gazettedestribunaux_блуд
:give_gazettedestribunaux_герда
:give_деньги_блуд
:give_блокнот_блуд
:use_gazettedestribunaux_
:use_gazettedestribunaux_столик
:use_деньги_деньги
:use_деньги_столик
:use_деньги_блокнот
:use_блокнот_блокнот
:give_столик_блуд
:читать_газету
:common
end

Прикрепленные файлы:
aurq0082.zip, Размер: 76,864 байт, Скачано: 671

Неактивен

0    0    #18
02.07.2009 10:45

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

версия 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
КвестПроПетю
Константин
Крюгер
Месть
Молчание_хрящей
Мутация+Мутанта
Рагнарек
Тень
Царство_смерти
Черная_пятница
Яша

Прикрепленные файлы:
aurq_demo.zip, Размер: 1,533,895 байт, Скачано: 666

Неактивен

0    0    #19
02.07.2009 10:53

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

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)

Неактивен

0    0    #20
03.07.2009 12:16

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

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)

Неактивен

0    0    #21
07.07.2009 17:02

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

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

Прикрепленные файлы:
aurq009.zip, Размер: 192,498 байт, Скачано: 634

Неактивен

0    0    #22
08.07.2009 09:48

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

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)

Неактивен

0    0    #23
09.07.2009 16:37

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

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.zip, Размер: 43,912 байт, Скачано: 630

Неактивен

0    0    #24
14.07.2009 14:34

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

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-х типов четверостишей написанных автором.


Прикрепленные файлы:
stix.zip, Размер: 1,679 байт, Скачано: 643

Неактивен

0    0    #25
14.07.2009 15:47

abcdef
Участник (+1, -2)
Зарегистрирован: 09.03.2009
Сообщений: 58

Re: Нужны ли новые версии URQ и URQ_DOS ?

тест работы с переменными.
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 новых переменных, которые удаляются т.к. равны нулю.


Прикрепленные файлы:
test2.zip, Размер: 554 байт, Скачано: 614

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru