Форум » » уроки 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: здесь демка html-возможностей акурки by Korwin: http://slil.ru/27246304 ничего сложного нет. знания html практически не требуется. да и в 'похищенных' код довольно прост остаёстся только прояснить вопросы: - как сделать в акурке фоновый рисунок - как сделать в акурке текст рядом с картинкой я этого не знаю помню, была такая игра, где ГГ в море собирал брёвна для плота и т п после кораблекрушения. там ещё был массив картинок. короче, технически игра была- на уровне. вроде бы и текст с картинкой рядом был. не помню

uux: noname пишет: помню, была такая игра, где ГГ в море собирал брёвна для плота и т п после кораблекрушения. там ещё был массив картинок. короче, технически игра была- на уровне. вроде бы и текст с картинкой рядом был. не помню Игра с ЛОК-2007, называется "Бриг КРИК". Есть здесь.

Ktirff: Спасибо большое за ответы и ссылки) в "бриг крик" лежит только файл квеста, никаких картинок нет) хотя из кода выкопал пару интересных вещей. Попробую поработать с html, сопоставлю свои возможности с тем, что требуется. Программер из меня не ахти.. qwerty, да, то что нужно) а можно снабдить текст комментариями? я пытался понять, что к чему, но совершенно запутался :) вот эта странная переменная r, как она работает.


uux: Ktirff пишет: Спасибо большое за ответы и ссылки) в "бриг крик" лежит только файл квеста, никаких картинок нет) хотя из кода выкопал пару интересных вещей. Попробую поработать с html, сопоставлю свои возможности с тем, что требуется. О, вспомнил! "Бриг КРИК" участвовала еще в КРИЛ-2008, и ее можно найти в архиве участников данного конкурса.

qwerty: Ktirff, вот простая прога с комментариями: ; это- комментарий :размышления pln pln что бы ещё сделать? pln номер=rnd3 ; генерим случайное число от 1 до 3 включительно btn дело_#номер$, придумать ; вместо #номер$ подставится значение переменной 'номер' end :дело_1 ; если номер=1, попадём сюда pln pln а напишу-ка я супер-мега квест! pln btn размышления, дальше end :дело_2 pln pln а напишу-ка я новый urql-интерпретатор! pln btn размышления, дальше end :дело_3 pln pln а забью-ка я на всё, и лягу спать! pln btn размышления, думать ещё btn конец, лечь спать end :конец pln pln --- КОНЕЦ --- pln end

noname: Ktirff пишет: вот эта странная переменная r, как она работает ну, к написанному qwerty могу добавить только: читай описание языка URQL от Korwinа. скачать его можно, например, в шапке ЭТОЙ темы по второй ссылке цитирую: ; Это комментарий в одну строку ещё: Rnd[Num] - целое случайное число от 1 до Num, меняется при каждом вызове. и ещё: 17). "#переменная$" - вставляет значение числовой переменной. Использование: Обычно так и используется. Пример: x=5 pln #x$ goto b#x$ btn b#x$,Неизвестная локация 18). #%переменная$ - вставляет значение строковой переменой. Использование: Обычно так и используется. Пример: instr x=loc pln #%x$ goto b#%x$ btn b#%x$,Неизвестная локация как это работает- см пост qwerty чуть выше ну, теперь не должно остаться никаких неясностей

Ktirff: Спасибо, разобрался :) Фон вставлять можно, через стандартные html-тэги :) Вероятно, еще появятся вопросы, тогда обращусь к вам и вашему терпению) вот, кстати, чего удалось добиться на данный момент http://keep4u.ru/imgs/b/2009/03/18/35/35fb30579a654a494f.jpg

qwerty: выглядит вкусно! Ktirff пишет: [в Акурке] Фон вставлять можно, через стандартные html-тэги :) это как? не все это знают- поделись, плиззз to uux: О, вспомнил! "Бриг КРИК" участвовала еще в КРИЛ-2008, и ее можно найти в архиве участников данного конкурса конкурс "КРИЛ-2007"

Ktirff: Чтобы сделать фон, я воспользовался такой формой (возможно, в ней есть что-то лишнее): <style type="text/css"> body {background-image: url(#quest_path$/[имя картинки с расширением]); } </style> Теперь меня волнует проблема вставки стандартного urql в этот html-код) Как можно воспользоваться операторами if, input и аналогичными. В faq по Акурке Корвин указал только пример работы с pln, btn. Какие-то интересные моменты, заметил в квесте "возрождение" http://urq.plut.info/node/137 . Попробую там покопаться)..

noname: дай простой пример того, что хочешь сделать. вот, переведённый в html, пример про самурая: :1 invkill perkill html true btn_visible false inv_visible false goto 2 end :2 r=rnd2 <html> Ты стоишь у очень широкого обрыва<br> Ветер обдувает решительное лицо,<br> Лучи заходящего солнца окрасили обнажённую катану.<br> За спиной- враг<br> <br> <a href="btn:#2+r$">говорить</a><br> <a href="btn:#4+r$">действовать</a><br> </html> end :3 <html> вариант говорить- А<br> <br> <a href="btn:2">откат</a><br> </html> end :4 <html> вариант говорить- Б<br> <br> <a href="btn:2">откат</a><br> </html> end :5 r=rnd2 if r=2 then goto 7 <html> действие успешно<br> <br> <a href="btn:2">откат</a><br> </html> end :6 <html> действие неудачно<br> <br> <a href="btn:2">откат</a><br> </html> end :7 <html> критический успех!<br> <br> <a href="btn:2">откат</a><br> </html> end

Ktirff: Мне надо сделать html-обработку оператора if, как то: :Бар pln Горький дым мешает разглядеть обстановку бара. Что вы хотите сделать? btn бармен,подойти к бармену if Записка then btn столик,сесть за столик if matrix=0 then btn незнакомец,пройти в дальнюю сторону зала end Если надо изменять параметры переменных, то они объявляются до <html> вставки, это я уже понял)

qwerty: ну, поскольку ни с html, ни с Акуркой толком не знаком, могу предложить лишь не вполне удобный вариант. а именно- переименовывать кнопки например, так: :инициализация invkill perkill html true btn_visible false inv_visible false ; список переменных записка=0 ; флаг наличия записки, которую ГГ найдет в Баре matrix=-13 ; флаг глюка матрицы ; обсчёт всех переменных proc обсчт ; Акурка, блин, не различает ё и е goto Бар end :Бар <html> Горький дым мешает разглядеть обстановку бара. Что вы хотите сделать?<br><br> <a href="btn:#%Бар_бат2$">#%Бар_кап2$</a><br> <a href="btn:#%Бар_бат3$">#%Бар_кап3$</a><br> </html> end :светильники записка=1 ; в случаях, когда значения переменных могли измениться ; вызываем процедуру обсчёта ; после работы с переменными, но до html-вставки proc обсчт <html> На столиках расставлены оригинальные китайские фонарики. Под одним из них, ты заметил клочок бумаги<br><br> <a href="btn:#%Бар_бат2$">#%Бар_кап2$</a><br> <a href="btn:#%Бар_бат3$">#%Бар_кап3$</a><br> <a href="btn:Бар">осмотреться</a><br> </html> end :посетители matrix=0 proc обсчт <html> Завсегдатаи бара пьют, общаются, расслабляются. В дальней стороне зала, твоё внимание привлёк одинокий незнакомец. Причудливая игра теней, странным образом, постоянно меняет его внешность<br><br> <a href="btn:#%Бар_бат3$">#%Бар_кап3$</a><br> <a href="btn:#%Бар_бат2$">#%Бар_кап2$</a><br> <a href="btn:Бар">осмотреться</a><br> </html> end :столик <html> Ты сидишь за столиком, на котором из-под светильника виден клочок бумаги<br><br> <a href="btn:Бар">встать</a><br> </html> end :незнакомец <html> Ты подошёл к странному незнакомцу<br><br> <a href="btn:Бар">отойти</a><br> </html> end :обсчт if записка=1 then Бар_бат2= "столик" & Бар_кап2= "сесть за столик" if записка=0 then Бар_бат2= "светильники" & Бар_кап2= "осмотреть светильники" if matrix=0 then Бар_бат3= "незнакомец" & Бар_кап3= "пройти в дальнюю сторону зала" if matrix<>0 then Бар_бат3= "посетители" & Бар_кап3= "осмотреть посетителей" end ; идея в том, что бы подменять те ссылки, которых не должно быть видно, ссылками на нечто, не важное для сюжета, а лишь создающее атмосферу квеста

noname: qwerty, скрывать кнопки в html можно. если нужно (тема про досурку ударилась твёрдо ушла в сторону Акурки, а это- не мой конёк). так, например, в следующем мини-примере ссылка целиком хранится в одной текстовой переменной. а если это переменная пуста- то и ссылки не будет(так что твой пример можно здорово упростить, и при этом УБРАТЬ не нужные кнопки, как того хотел автор(Ktirff). твой пример переделывать не буду, а только дам иллюстрирующий мини-примерчик: :инициализация invkill perkill html true btn_visible false inv_visible false instr a= <a href="btn:1">опробовать</a> ; убери комментарий со следующей строки, ; и сравни результат: ;instr a= goto 001 end :001 <html> Вот лежит колобок, без рук, без ног. Помнит [#гг_закл$] заклинаний<br><br> #%a$ </html> end

qwerty: подведу итог: видимо, наиболее корректным стилем программирования под Акурку, с использованием html будет предварительное формирование html-текста в особой переменной: ; заполняем куски текста. как-нибудь так: if ... then text1= ... if ... then text2= ... if ... then text3= ... ; что бы пропустить переменную- присваиваем ей пустое значение instr код_локации = #%text1$#%text2$#%text3$ ; собственно, 'код_локации' можно тоже формировать с ифами <html>#%код_локации$</html> ; вот и всё т е 'безусловные' локации делаем как обычно, а в начале составных локаций, составляем их текст с использованием переменных text1..textn ИМХО- проще не придумаешь. и, повторюсь, я на самом деле не знаю языка html, и поддерживает ли Акурка какие-то ещё его возможности, кроме вывода текста(с форматированием и выбором шрифтов/цвета и т п), и гиперссылок, и картинок(в т ч - фона) // все примеры с html-вставками проверял на Акурке pre6

noname: переходим к водным процедурам... то есть, от Акурки к fireurq. вот, например, очередной пример игры-головоломки. никаких специфических функций fireurq в игре не используется, НО что бы перевести её на Акурку, возможно, понадобится изменить работу с токенами. а для перевода на dos_urq, возможно, понадобится изменить выводимые строки, что бы они нормально размещались на экране. не знаю- тестировал только на fireurq когда Вы в неё поиграете- поймёте, что тестировать эту игруху было ой, как не просто // блин, и как в этой фразе правильно расставить запятые? короче, вот эта игруха: // кажися, Korwin любил головоломки? ; посадить ... [на плот] ; высадить ... [с плота] ; переплыть [реку [на плоту]] :инициализация invkill perkill clrscr=1 cls instr перс1им= маму instr перс2им= Таню instr перс3им= Машу instr перс4им= папу instr перс5им= Ваню instr перс6им= Борю instr перс7им= зэка instr перс8им= копа перс1где = 1 ; 1-2-3 берег-плот-перег перс2где = 1 перс3где = 1 перс4где = 1 перс5где = 1 перс6где = 1 перс7где = 1 перс8где = 1 там1= 8 ; кол-во персонажей там там2= 0 там3= 0 плот_где= 1 ; 1-3 ходы=0 goto intro end :intro pln pln Представляю Вашему вниманию ГОЛОВОЛОМКУ, на подобии "волк,коза и капуста". Неблагополучная семья, и полицейский с заключённым направляются в исправительное поселение. В игре время не ограничено, но для получения максимального фана от игры, рекомендую засечь время. Интересно, как быстро Вы сможете её решить? pln btn rules, правила головоломки end :rules pln pln Цель игры: Перевести группу из 8-ми человек через реку. Когда все буду на другом берегу- победа твоя pln pln Правила такие: Перебраться через реку можно только на плоту. Одновременно на плоту помещаются не более 2-х человек. Управлять плотом умеют только родители и полисмен. Нельзя оставлять заключённого с членами семьи без присмотра полицейского. Нельзя оставлять папу с дочками без присмотра мамы. Нельзя оставлять маму с сыновьями без присмотра папы pln btn ruling, управление игрой end :ruling pln pln Управление осуществляется посредством ввода команд с клавиатуры pln pln Игра понимает следующие команды: pln pln посадить <кого-то> [на плот] pln высадить <кого-то> [с плота] pln переплыть [реку [на плоту]] pln pln например: посадить зэка на плот pln pln в квадратные скобки заключена необязательная часть команды pln btn start, начать игру end :start clrscr=1 cls if плот_где=1 then pln плот находится у первого(исходного) берега реки pln p На другой берег нужно переправить #там1$ чел: n=0 :start_label1 n=n+1 if перс#n$где=1 then p #%перс#n$им$ if n<8 then goto start_label1 pln pln p На плоту мы видим #там2$ чел: n=0 :start_label2 n=n+1 if перс#n$где=2 then p #%перс#n$им$ if n<8 then goto start_label2 pln pln p Уже удалось переправить #там3$ чел: n=0 :start_label3 n=n+1 if перс#n$где=3 then p #%перс#n$им$ if n<8 then goto start_label3 pln pln if плот_где=3 then pln плот находится у желаемого(второго) берега реки instr vvod= пусто input vvod if vvod="" then goto start tokens vvod if token1= "посадить" then goto action_посадить if token1= "высадить" then goto action_высадить if token1= "переплыть" then goto action_переплыть goto action_help end :action_help clrscr=1 cls pln pln *** введена неизвестная команда "#%token1$" ! *** pln pln Игра понимает следующие команды: pln pln посадить <кого-то> [на плот] pln высадить <кого-то> [с плота] pln переплыть реку [на плоту] pln pln в квадратные скобки заключена необязательная часть команды pln pln команды нужно вводить именно в такой форме. например: посадить зэка на плот pln pln *** никаких других команд игра не понимает! *** btn start, ОК! end :action_help2 clrscr=1 cls pln pln ** указан неизвестный персонаж "#%token2$" ! ** pln pln Для команд "посадить" и "высадить" нужно указывать персонажа именно так, как он упомянут в описании ситуации. соблюдая падеж, регистр букв, и прочая pln pln Например: pln посадить папу pln высадить Машу pln pln ** игра понимает лишь минимальный набор жёстко заданных команд! ** btn start, ОК! end :action_help3 clrscr=1 cls pln pln * Вы уже посадили "#%token2$" на плот до этого ! * pln pln внимательно читайте описание ситуации btn start, ОК! end :action_help4 clrscr=1 cls pln pln * персонажу "#%token2$" не удаётся забраться на плот! * pln pln плот находится у другого берега реки btn start, ОК! end :action_help5 clrscr=1 cls pln pln * персонажу "#%token2$" не удаётся забраться на плот! * pln pln на плоту уже находится два человека. больше туда никто не поместится btn start, ОК! end :action_help6 clrscr=1 cls pln pln * "#%token2$" не удаётся высадить с плота! * pln pln Этот персонаж находится на берегу btn start, ОК! end :action_help7 clrscr=1 cls pln pln * не удаётся переплыть реку! * pln pln На плоту нет никого, кто умел бы им управлять. Это умеют только мама, папа и коп btn start, ОК! end :action_посадить n=0 flag1=0 :action_посадить_label1 n=n+1 if перс#n$им=token2 then goto action_посадить_label2 if n<8 then goto action_посадить_label1 goto action_help2 :action_посадить_label2 if перс#n$где=2 then goto action_help3 if перс#n$где<>плот_где then goto action_help4 if там2=2 then goto action_help5 перс#n$где=2 там2=там2+1 там#плот_где$= там#плот_где$-1 ходы=ходы+1 goto start end :action_высадить n=0 flag1=0 :action_высадить_label1 n=n+1 if перс#n$им=token2 then goto action_высадить_label2 if n<8 then goto action_высадить_label1 goto action_help2 :action_высадить_label2 if перс#n$где<>2 then goto action_help6 перс#n$где=плот_где там2=там2-1 там#плот_где$= там#плот_где$+1 ходы=ходы+1 goto start end :action_переплыть if (перс1где<>2)and(перс4где<>2)and(перс8где<>2)then goto action_help7 плот_где=4-плот_где ; автоматическая высадка(для облегчения проверки недопустимой ситуации) n=0 :action_переплыть_label1 n=n+1 if перс#n$где=2 then перс#n$где=плот_где & там2=там2-1 & там#плот_где$=там#плот_где$+1 if n<8 then goto action_переплыть_label1 ходы=ходы+1 ; проверки: зэк=7 коп=8 if (перс7где<>перс8где)and(там#перс7где$>1) then goto Failure1 ;мама=1 сыновья= 5 и 6, папа=4 if (перс1где<>перс4где)and((перс1где=перс5где)or(перс1где=перс6где)) then goto Failure2 ;папа=4 дочери= 2 и 3, мама=1 if (перс1где<>перс4где)and((перс4где=перс2где)or(перс4где=перс3где)) then goto Failure3 if там3=8 then goto victory goto start end :victory clrscr=1 cls pln pln + +++ +++++ ПОЗДРАВЛЯЮ ! +++++ +++ + pln pln Вам удалось решить эту головоломку за #ходы$ ходов pln pln + +++ +++++ +++++++ ВЫ ПОБЕДИЛИ !!! +++++++ +++++ +++ + pln pln и зэк с копом, и вся неблагополучная семейка успешно добрались до исправительного поселения Бобруйск-2050 btn инициализация, начать заново end :Failure1 clrscr=1 cls pln pln * нельзя оставлять зэка с любым из членов семьи без присмотра копа! * pln pln ... сцены секса и насилия вырезаны цензурой ... pln pln ***** игра окончена ***** pln btn инициализация, начать заново end :Failure2 clrscr=1 cls pln pln * нельзя оставлять маму с любым из сыновей без присмотра папы! * pln pln ... сцены секса и насилия вырезаны цензурой ... pln pln ***** игра окончена ***** pln btn инициализация, начать заново end :Failure3 clrscr=1 cls pln pln * нельзя оставлять папу с любой из дочерей без присмотра мамы! * pln pln ... сцены секса и насилия вырезаны цензурой ... pln pln ***** игра окончена ***** pln btn инициализация, начать заново end

qwerty: щазз перевыложу. при выкладывании сообщением пробелы урезаются. я это знал. обычно это не критично для игры, НО не на этот раз. выкладываю 'нормальную' версию, т е ту же прогу, но 'прикреплённым' файлом. игра проверена. пройти можно, но сложно нажми сюда, что бы скачать файл 'головолом.qst' со slil.ru p.s. прошу прощения за нечаянную лажу подпись: noname (он же= qwerty) upd и, да- файл на сервисе slil.ru автоматически удаляется через месяц после последнего скачивания...

Chicago1920: А вот такой вопрос на смекалку. Как говорил великий (?) Евг(?) - "в урке немного возможностей, но при должной смекалке...". так вот... a=0 :1 cls a=a+1 pln #a$ pause 1000 ;эникей goto 1 end Простой пример. Зацикленная локация. И тут... Я хочу ввести в локации эникей. Соответственно дойдя до него, система встанет в ожидании нажатия клавиши. И не произойдет переход по goto. Можно ли каким то оригинальным кодом это обойти?

Серый Волк: Ktirff - выглядит и правда симпатично, будем ждать... noname - спасибо за головоломку

noname: Chicago1920А вот такой вопрос на смекалкузвучит так, как будто это возможно, и ты знаешь как. чему я удивлён можно попробовать так: засечь текущее время в тиках(1/50мс), поставить паузу требуемой длительности(желательно от 2сек и более). после паузы опять засечь время в тиках, и сравнить разницу. если была нажата клавиша, то разница по времени будет меньше паузы, так как нажатие клавиши прерывает паузу таким образом, можно вести отчёт, как в твоём примере, и в то же время среагировать на нажатие клавиши если нужно что-то более другое- поясни, какой конкретно эффект должно производить нажимание клавиш --- гораздо проще всё вышеописанное можно реализовать другим, более традиционным способом: a=0 :1 cls a=a+1 pln #a$ btn fin, конец pause 2000 goto 1 end :fin end --- естественно, кнопок может быть и больше // тестировано на dos_urq

Chicago1920: noname пишет: звучит так, как будто это возможно, и ты знаешь как. чему я удивлён Не хотел ввести тебя в заблуждение ненароком, но я этого не знаю. noname пишет: можно попробовать так: засечь текущее время в тиках(1/50мс), поставить паузу требуемой длительности(желательно от 2сек и более). после паузы опять засечь время в тиках, и сравнить разницу. если была нажата клавиша, то разница по времени будет меньше паузы, так как нажатие клавиши прерывает паузу таким образом, можно вести отчёт, как в твоём примере, и в то же время среагировать на нажатие клавиши Приведи маленький примерчик кода, пожалуйста.



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