Форум » » уроки URQ » Ответить

уроки URQ

qwerty: Они самые. предлагаю вести такую тему, где будет по шагам описано создание игры на досурке. UPD уроки по досурке (URQ_DOS от 30.11.04). Скачать её(досурку), а так же её описание можно здесь: http://urq.plut.info/soft (см ссылки: [quote]Скачать URQ_DOS от 30.11.04 - 132 Кб Описание URQL для URQ_DOS версии 1.35 от 23.11.2006 года от Корвина.[/quote] ) UPD(11.02.09, 0:59): оказался недостаточно организован, что бы вести уроки. НО с удовольствием отвечу в этой теме на любые вопросы по urq_dos. появляюсь на форуме не реже 1 раза в неделю

Ответов - 139, стр: 1 2 3 4 5 6 7 All

noname: вот простейший пример::хоббит pln pln Вы у хоббичьей норы. pln У входа в нору на скамеечке сидит Бильбо Беггинс, и курит трубку. pln btn разговор, поприветствовать хоббита btn мост, идти на север- к мосту через речку end :мост pln pln Вы у моста. pln Мост разрушен. Прохода нет! pln btn хоббит, идти обратно btn ремонт, а можно ли его починить? end если вышеприведённый текст набить в блокноте в файл, к примеру game.qst, и проиграть его проигрывателем urq_dos.exe(72кб), то в досовском окошке на экране увидим описание игровой ситуации:Вы у хоббичьей норы. У входа в нору на скамеечке сидит Бильбо Беггинс, и курит трубку. а чуть ниже- варианты возможных действий:поприветствовать хоббита идти на север- к мосту через речку причём, выбрав второй вариант- перейдём к другой игровой ситуации, описанной в тексте программы под названием "мост". да, не всем может понравится досовская консоль. ну, в таком случае можно воспользоваться fireurq.

qwerty: Ну вот- начало положено! Хотя я вообще-то предполагал как-то более упорядоченно начать, а не так сумбурно и сразу. Насчёт FireURQ: это, конечно, хороший выбор, но релиза пока нет. даже не известно, как будет выглядеть его интерфейс. Так что, если без фантастики, то будем ориентироваться на "URQ_DOS от 30.11.04". Скачать его можно здесь: http://urq.plut.info/soft Запускать из командной строки, например, Total Commander-а: urq_dos.exe game.qst Настроить шрифт можно через левый верхний значок появившейся консоли: свойства/шрифт.

noname: qwerty, а лучше- через bat-файл. да, кстати Хелп по AkURQ от Korwin'a по твоей ссылке не скачивается- он пропал вместе со всем аплоадом. какая жалость! я как-то скачивал весь аплоад НО, к сожалению, на момент его исчезновения у меня на винте остались жалкие крохи. всё собирался скачать снова- да так и опоздал... выкладываю хелп по URQL от Корвина: http://slil.ru/26532134 upd Внёс исправление 27.01.09-го в 16:42 - по ссылке в сообщении, действительно, скачивается описание не Акурки, а языка URQL, который поддреживается досуркой и фуркой. Диалект Акурки слегка отличается.


Byte: Что за маскарад? :)

qwerty: Значит так, УРОК ПЕРВЫЙ: Ну, из-за слегка поспешных действий noname, первые несколько операторов мы можем рассмотреть на живом примере. Хотя в дальнейшем мы постепенно создадим другой пример, и без цитат из Толкиена. Авторские права, всё-таки. Итак: 1. Текст программы разбит на локации. Названия локаций пишутся после знака двоеточие " : " 2. Оператор end завершает описание локации. Дойтя до end интерпретатор завершает обработку, и ждёт выбора действия игроком. Если же никаких действий в данной локации не предусмотрено, то end завершит игру. 3. Оператор pln выводит текст, после чего переводит строку. это как writeln в Паскале, или print в Бэйсике. 4. Оператор "btn локация, название" создаёт 'кнопку'(она же бАттон, с ударением на А), при выборе игроком которой, произойдёт переход на локацию с названием 'локация'. Надпись на кнопке (описание выбора игрока) пишется через запятую. Т е кнопка btn локация, название будет видна в игре как название Всё не так просто- всё гораздо проще, хотя имеется и множество ньюансов. На сегодня всё, загляну сюда ещё через неделю!

Nex: Byte это у него раздвоение личности. Вот до чего доводят текстовые квесты!

fireton: qwerty, вспомнил пароль от аккаунта? ;)

qwerty: УРОК ВТОРОЙ: Пока нет noname, надеюсь успеть дать вначале теорию, а уже потом- пример. Итак, с помощью уже изученных в первом уроке операторов, уже можно создать игру любой сложности. Была бы задумка. С другой стороны, авторы иногда задумывают такие задумки, что реализовать их таким методом очень непросто. Например, пусть игрок играет шахматным конём, ходит по доске по шахматным правилам, и вступает в диалог только с теми, кто находится на соседних полях. Даже если из игры убрать остальных персонажей, то и тогда конь может находиться в 64-х ситуациях, каждую из которых придётся прописывать ручками. Ясно, что это- никуда не годится. В таких случаях авторам приходят на помощь переменные. Даже если вы не собираетесь делать ничего столь замороченного, как описанное выше, переменные всё равно могут здорово упростить написание более-менее 'живой' игры. Пример: :инициализация на_коне = 1 волшебный_меч = 0 принцесс_спасено = 0 узнал_секрет = 0 goto начало end :начало pln pln Царь послал тебя выручить свою дочь из лап дракона. "Езжай куда угодно, pln да только без неё- не возращайся!" - таков был царский наказ. Делать нечего- pln собрался ты в путь-дорогу, снарядился лучшим оружием и доспехами. Лучшего pln коня тебе из царских конюшен отдали. Да только видано ли дело- с драконом pln справиться? pln btn развилка, дальше end :развилка pln if на_коне=1 then pln Долго ли, коротко ли ты ехал, да прискакал к горюч-камню, у которого дорога if на_коне=0 then pln Долго ли, коротко ли ты шёл, да пришёл к горюч-камню, у которого дорога pln надвое разбегается. А на камне том надпись выбита: pln "Налево пойдёшь- коня потеряешь." pln "Направо- логово ужасного дракона. Можно звать просто Горынычем." pln btn старичок, налево btn горыныч, направо btn царь, назад- к царю if (узнал_секрет=1) and (волшебный_меч=0) then btn сдвинуть_камень, сдвинуть камень end :старичок if на_коне=0 then goto старичка_нет pln pln Вскоре наткнулся ты на седого старичка, который расселся посреди дороги. pln - Подсоби, внучек, дай своего коня. А то я уже не ходок. А я тебе секрет pln открою. Да не один, а сразу три секрета. pln btn отдать_коня, отдать коня btn развилка, вернуться на развилку end :отдать_коня pln pln Старичок лихо уселся на коня, и так повёл свою речь: pln - Первый секрет: надпись на камне выбил Горыныч. Я за объяву про коня ему pln свой жуб отдал. pln - Второй секрет: не всё оказывается таким, как кажется. Я вот, например, pln не старичок вовсе, а злой колдун Мамез в полном расцвете сил. pln - Третий секрет: к казённому добру надо относиться бережно, и малознакомым pln личностям коней не раздаривать. pln - Это всё. - сказал вмиг помолодевший Мамез, и умчался. pln pln На дороге остался клочок какой-то тряпки. pln на_коне=0 btn развилка, вернуться к камню btn подобрать_тряпку, подобрать тряпку end :старичка_нет pln pln Дорога уходит в дальние дали. Тебе туда не надо. Тем более- без коня. if узнал_секрет=0 then pln На дороге ты видишь клочок какой-то тряпки. pln btn развилка, вернуться к камню if узнал_секрет=0 then btn подобрать_тряпку, подобрать тряпку end :подобрать_тряпку pln pln Тряпка оказалась платком Мамеза, которым он, видимо, вытирал пот. На ней pln вышито: "Пельмени в печи, волшебный меч- под камнем. Не забудь поесть перед pln тем, как идти на работу. Твоя Василиса." pln pln Хмм... Видимо, не все секреты раскрыл тебе злой колдун! pln узнал_секрет=1 btn развилка, вернуться к камню end :сдвинуть_камень pln pln Достав волшебный меч-кладенец, ты поставил камень на место. pln волшебный_меч=1 btn развилка, дальше end :горыныч if принцесс_спасено=1 then goto логово pln pln В логове тебя встретил радушный Змей Горыныч в домашнем халате, и пушистых pln тапочках. Дипломатическая беседа проходила за обильным столом, прислуживала pln вам та самая царская дочь- Несмеяна. pln btn развилка, вернуться к развилке btn попросить, попросить Горыныча вернуть Несмеяну if волшебный_меч=1 then btn обмен, попробовать выменять Несмеяну на волшебный меч end :логово pln pln Ты стоишь, в обнимку с Несмеяной, у логова Змея Горыныча. Вход заперт. pln btn развилка, к развилке end :попросить pln pln Дракон напрочь отказался. Ни уговоры, ни твоё оружие на него не подействовали. pln А взять её без разрешения- совесть не позволяет. pln btn горыныч, дальше end :обмен pln pln - Как он у тебя оказался? Впрочем, неважно: забирай девку, а у меня появились pln срочные дела... pln принцесс_спасено=1 btn горыныч, дальше end :царь if принцесс_спасено=0 then goto царь_недоволен pln pln Как вернулся ты к царю с его дочерью- сразу он закатил пир на весь мир... pln А на утро- на дочке пришлось жениться. pln pln Вот и сказочке КОНЕЦ, а кто слушал- молодец! pln end :царь_недоволен pln pln Как вернулся ты к царю ни с чем- сразу начал он кудесить, и тебя хотел pln повесить... Но немного погодя, пощадить решил тебя. pln btn развилка, опять отправиться в путь end

noname: про коня на шахматном поле ты лихо загнул! сделать, что ли? а пример длиной 144 строчки! проще ничего не смог придумать? и про переменные ни фига не объяснил: что это такое, как их объявлять, операторы if..then и goto. щазз ещё и глюков наловлю

qwerty: Уймись, noname- некогда мне. Потом объясню. ОБЪЯВЛЕНИЕ для гостей этой темы: любые вопросы по URQL приветствуются! Бываю на форуме редко. Но не реже, чем раз в неделю.

elmortem: Вопрос от гостя: Когда уже будут сформированы единые стандарты языка, которые будут поддерживаться всеми интерпретаторами? ^___^

noname: дорогой, elmortem. единые стандарты языка сформированы очень давно. но, дело urql не стоит на месте! так, например, автор акурки пошёл альтернативным путём, и хотя он таки и 'не дошёл' до логического конца, которым мог бы стать безбажный релиз, но было сделано очень многое. так же в файрурке, наряду с поддержкой стандарта urql добавлены новые возможности. развитие языка- общепринятая практика. добавлю, что на последней версии досурки, рекомендованной в этой теме выше, идут все квесты, написанные под любую версию досурки. конкурент урки не может этим похвастаться- не все скачанные с их сайта старые файлы примеров идут под новую версию. ИМХО- в любом случае, развитие необходимо, даже если ради него приходится отступать от стандартов. одной из особенностей урки является сравнительная многочисленность пишущихся под неё игр. и авторы часто выбирают альтернативные недоработанные версии, вместо стандартной досурки. чтож, - их право! и это никоим образом не умаляет достоинств urql. так же, как если б кто-то, взяв куспелевские исходники, создал бы альтернативный акусп, то это ни в коей мере не умалило бы достоинств куспа. надеюсь, полностью ответил на твой вопрос. скачать наиболее удобоваримое описание стандарта URQL можно здесь: http://slil.ru/26532134 UPD да, и напоминаю об одной особенности выкладываемых в сообщениях темы текстов: несколько пробелов подряд заменяются одним. так что, если при запуске примера в текстах описания кое-где не сделаны отступы в начале строки- не автора вина. если кто знает, как помочь этой проблеме- буду благодарен.

elmortem: наиболее удобоваримое описание стандарта URQL Какая противоречива строка. Стандарты либо есть, либо нет. Тогда каждый кроит их по своему. Примерно похожая ситуация сейчас с HTML/CSS/JavaScript. Каждый браузер кроит стандарты по своему. Так что на вопрос вы мой не ответили, сроков выхода стандартов не написали.

qwerty: ответ to elmortem:Ситуация такова: стандарт есть. Текста с названием 'стандарт URQL' нет. Есть досурка, признанная в качестве стандарта, на которую принято ровняться.наиболее удобоваримое описание стандарта URQLОписаний чего угодно может быть множество, и они могут различаться. Так например, у меня были разные книги с описанием C++ от разных авторов: один из них начинал с описания структурной схемы языка, и вставлял скриншоты, другой- вставлял цитаты из Кэролла, и стремился сделать описание языка удобочитаемым. Впрочем, возможно, и составлю когда-нибудь текст 'стандарт URQL', и тогда urql станет первой РИЛ-ориентированной платформой, имеющей 'стандарт'. Но можешь и ты это сделать. Упомянутое выше описание может в этом помочь. Будут сложности- спрашивай. Желаю удачи!---про переменные ни фига не объяснил: что это такое, как их объявлять, операторы if..then и goto. щазз ещё и глюков наловлюОтвет для noname, и всех интересующихся: За дебагинг буду благодарен. А теперь, объясню, как смогу: Про переменные:Что такое переменные? Ну, кто не разберётся- пусть спросит. Тогда и подумаю, как объяснить. Никакого специального объявления переменных в URQL не требуется. Но для удобства я их объявляю в начале игры::инициализация на_коне = 1 волшебный_меч = 0 принцесс_спасено = 0 узнал_секрет = 0 goto начало end Если значение переменной специально не задано, то оно равно нулю. В данном примере показан пример числовых переменных(в языках Си и Паскаль такой тип принято называть вещественным)- это могут быть как положительные, так и отрицательные, как дробные, так и целые числа. В одном из следующих примеров будут показаны и строковые переменные.--- про оператор GOTO ..В тексте первой же локации видим новый оператор::инициализация на_коне = 1 волшебный_меч = 0 принцесс_спасено = 0 узнал_секрет = 0 goto начало end goto- оператор безусловного перехода. Применяется: goto локация. По этой команде выполнение программы продолжится в локации локация. В нашем примере мы переходим к локации с именем начало. В дальнейших примерах будет рассмотрена возможность переходить в любое место программы, а не только на начало локации.--- Про оператор IF .. THEN ..Переменные создаются для активного влияния на ход игры. Чтобы реализовать эту возможность, существует оператор условия: If Условие then Действия Если выполняется Условие, то производятся Действия. А если нет, то- нет.pln if на_коне=1 then pln Долго ли, коротко ли ты ехал, да прискакал к горюч-камню, у которого дорога if на_коне=0 then pln Долго ли, коротко ли ты шёл, да пришёл к горюч-камню, у которого дорога pln надвое разбегается. А на камне том надпись выбита:В данном отрывке примера от того, есть ли конь у нашего героя, зависит текст выводимого сообщения. Информация о том, есть ли у него конь, хранится в переменной на_коне. В ситуации, когда герой теряет коня, автор игры должен позаботиться о том, что бы переменная отображала изменения ситуации:pln - Это всё. - сказал вмиг помолодевший Мамез, и умчался. pln pln На дороге остался клочок какой-то тряпки. pln на_коне=0 В дальнейших примерах мы не раз ещё вернёмся к оператору if..then.. и его возможностям.--- Фу-ух! Неужели это всё? До встречи через неделю! p.s. Эх, я-то ожидал, что скрытые тексты будут "открываться" не зависимо друг от друга... p.p.s. И ещё о шахматах: когда-то давно, Victor написал интересную прогу qwerty-bench на досурке. Хорошо бы её найти... UPD С удовольствием даю ссылку на http://www.vkoranov.newmail.ru/ Помимо прочего, там можно найти и qwerty-bench-vic, сделанный по моей просьбе Виктором для демонстрации работы с массивами.

elmortem: qwerty Стандарт, который нигде не зафксирован - миф. Досурка не может быть стандартом пока существуют и поддерживаются квестописателями другие интерпретаторы. И не нужно путать "описание чего-либо" и "описание стандарта чего-либо". В случае с С++ есть описание стандарта С++ от его автора Страуструпа, все остальные описания основаны на этом стандарте, оталкиваются от него и не вносят в него изменения. Стандарты URQL нужны не мне, а вам. Если вы этого не понимаете - мне всё равно. Можете и дальше агонизировать... upd: Арвагравия... P.S. Грязную провокацию нонейма оставляю без внимания...

Ехидна: Помогите, пожалуйста! Пыталась сделать все, как было написано в уроках. Однако когда попыталась сделать inv_Вампирья стрела=15 все последующие предметы, дописаные как Inv_ или даже inv+ в инвентаре выбиваются тоже как 15! Я уже просто не знаю что делать. Может, кто-то сумеет подсказать в чем дело?.. Заранее спасибо.

qwerty: Ехидна, Во-первых было бы интересно глянуть на код. Возможно, дело не в одной этой строчке. (Хотя вряд ли. Наверное, всё-таки в этой) Во-вторых... в данный момент исследую этот вопрос- ждите ответа... UPD Есть прекрасные сложные квесты, состоящие только из локаций и переходов, но, как правило, создатели квестов предпочитают еще и добавлять в игру предметы, заставляя играющих активно работать с ними. При грамотном использовании этой возможности можно значительно разнообразить игровой процесс, есть интересные квесты, которые построены исключительно на манипулировании предметами.Inv+ [Количество,]ПредметПосле выполнения этого оператора игроку дается Количество (1 по умолчанию) предметов Предмет. Можно прибавить и отрицательное количество предметов - это все равно, что вычесть их из инвентаря. Помните только, что число предматов в инвентаре не может быть меньше нуля - если количество предметов инвентаря после выполнения оператора меньше либо равно нуля, тогда соответствующий предмет из инвентаря убирается. например: inv+ Кирпич или: inv+ 10,Рублей Исследование завершено. Готов выложить пример программы, работающей с Вампирьими стрелами, и не затрагивающей кол-во листков подорожника. Но для начала выскажу рекомендацию: - Хорошо бы избегать по-возможности пробелов в названиях предметов. Например писать Вампирьих_стрел вместо Вампирьих стрел. Либо придумать вампирьим стрелам уникальное название: кровострелы. Давно ходил слух, что при пробелах в названии предметов происходит что-то не то. В данный момент продолжаю попытки нащупать проблему. Вот пример программы: :10 pln pln Допустим, у героя УЖЕ есть изначально 10 Вампирьих стрел pln И тридцать три листка подорожника (залечивать раны) pln Проверьте работу программы, пользуясь клавишей 'i' для показа инвентаря: pln Кол-во листков подорожника должно оставаться неизменным! pln inv +33,листка подорожника inv +10,Вампирьих стрел btn 20, купить ещё 5 стрел btn 30, продать 5 стрел btn 40, произнести жуткое заклинание 15-ти end :20 inv +5, Вампирьих стрел pln pln Денег у героя- куры не клюют. Теперь у него на 5-ть стрел больше. pln btn 20, купить ещё 5 стрел btn 30, продать 5 стрел btn 40, произнести жуткое заклинание 15-ти end :30 if inv_Вампирьих стрел < 5 then goto 50 inv -5, Вампирьих стрел pln pln Теперь у нашего героя на 5-ть стрел меньше. pln btn 20, купить ещё 5 стрел btn 30, продать 5 стрел btn 40, произнести жуткое заклинание 15-ти end :40 inv_Вампирьих стрел = 15 pln pln Теперь у нашего героя ровно 15-ть стрел. pln btn 20, купить ещё 5 стрел btn 30, продать 5 стрел btn 40, произнести жуткое заклинание 15-ти end :50 pln pln У нашего героя нет столько стрел для продажи! pln btn 20, купить ещё 5 стрел btn 30, продать 5 стрел btn 40, произнести жуткое заклинание 15-ти end

Ехидна: qwerty Вот код. :Системное inv_Клановый меч=1 inv_Костяной лук=1 inv_Вампирья стрела=15 goto Начало end Затем по сюжету персонаж может выстрелить в человека - следовательно, стрела отнимается... :Выстрел inv- Вампирья Стрела if 1 Вампирья Стрела then invkill Вампирья Стрела btn Обыск, Обыскать тело. end :Обыск inv_Металлический браслет=1 pln Больше здесь просто было нечего делать. btn Уйти, Вы уходите. end Вот... (текст я вырезаю, он же ненужен, нэ?.. Но если нужен, могу бросить полностью... просто там лирики много)

Ехидна: (кстати, только что заметила: если переставить текст так :Системное inv_Вампирья стрела=15 inv_Клановый меч=1 inv_Костяной лук=1 то и лук, и меч тоже будут выбиваться как 15 штук...)

qwerty: Ехидна, спасибо, щазз проверю... UPD ОПС! обратил внимание на: "...все последующие предметы, дописаные как ..." Переставил операторы местами: inv +10,Вампирьих стрел inv +33,листка подорожника И всё равно жуткое заклинание 15-ти сработало нормально. Впрочем, может в таком варианте проглючит какая-нибудь последовательность действий? Щаззз опробую Ваш код UPD Вы пользуетесь urq_dos.exe, скачанной по ссылке в этой теме? UPD Да, проблема обнаружена: Ваш код действительно не работает. Слухи о нежелательности пробелов в названиях предметов пока не подтвердились. Щазз готовлю исправленную версию Вашего кода.



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