Форум » » Примеры кода » Ответить

Примеры кода

Nex: В этой теме будут примеры работающего кода для QSP.

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

noname: на сайте урк ваши фаны писали, что в QSP есть аналог xbtn - это правда? а есть ли аналог функции разбиения на токены tokens? можно ли писать QSP-квест в своём любимом блокноте(формат- виднузовский txt)? просто для интереса спросил - я готов к тому, что у вас всё по-другому

Nex: noname пишет: можно ли писать QSP-квест в своём любимом блокноте(формат- виднузовский txt)? Можно. Для этого понадобится txt2gam. Если ещё не читал Уроки QSP, читай. Справку скачай последнюю версию с http://qsp.su, смотри там работу со строками. Со строками в QSP можно сделать что угодно, если что-то конкретно нужно, то говори, что. xbtn и прочие "кнопки" делаются через ACT для URQL xbtn <метка>,{оператор&оператор},<Название кнопки> Для QSP ACT 'Название действия':оператор & оператор & GT 'локация'

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


Byte: можно сделать и по словам, и по символам, и вообще всё, что можно себе представить.

noname: Byte пишет: можно сделать и по словам, и по символам, и вообще всё, что можно себе представить. можно сделать это одно а кратко и просто- это другое. впрочем, я пока только начинаю разбираться.

noname: итак, примеры кода будем обсуждать в этой теме в массив занесено N имён, в другой массив N описаний (пара слов в каждом) задана переменная N и переменная M написана процедура, выводящая на экран описание номер M нужно: предложить игроку N кнопок с именами, по нажатию на любую из них в M заносится соответствующий номер и вызывается процедура которая выводит соответствующее описание ну потом- возврат процедуры, конец программы. решение от Byte: $name - массив из n имён $name[0]='name1' $name[1]='name2' $name[2]='name3' n=3 ind=0 :next act $name[ind]:m=arrpos(0, '$name', $selact) & gs 'вывод' ind=ind+1 if ind<n:jump 'next'

noname: работает! ну, кое-что начинает проясняться. и интерфейс очень даже ничего... да, и помогите лентяю: как из текста проги управлять окнами? хочу оставить только два окна: 1 куда все тексты буду выводить 2 для кнопочек внизу

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

noname: а ведь точно: допустим вызываются хоть 10-ть раз вложенные функции, но если последний переход был по goto то, выведя кнопки прога будет ждать их нажатия... а в действиях по каждой кнопке будет прописано дополнительное действие 'конец локации' (у вас он кажися минусиком делается) и тогда кнопка по нажатию своё дело сделает и вернётся из процедуры P.S. почему нельзя чаще, чем каждые 15сек постить сообщения?

noname: остался открытым вопрос про управление окнами: включать/отключать/изменять расположение и размер из проги - что возможно?

Byte: noname пишет: можно сделать это одно а кратко и просто- это другое. впрочем, я пока только начинаю разбираться. Смотря что нужно.. Для разбиения по символам можно, например, воспользоваться функцией mid. mid('строка',2,1) - получим букву 'т' mid('строка',4,1) - получим букву 'о' Для разбиения по словам можно воспользоваться поиском через instr пробелов и опять же функцией mid: [pre2] tokens=0 lastpos=1 :next pos=instr(lastpos,$stok,' ') $tokens[tokens]=$mid($stok,lastpos,iif(pos,pos-lastpos,len($stok))) lastpos=pos+1 tokens=tokens+1 if pos:jump 'next' [/pre2] Здесь идёт разбиение строки $stok.. в результате количество слов будет находиться в tokens, сами слова в массиве $tokens.

Byte: noname пишет: включать/отключать/изменять расположение и размер размеры и расположение окошек меняет сам играющий, как ему удобнее.. включение / выключение окошек описано в "Уроках" и помощи: SHOWACTS [#выражение] - если значение выражения отлично от 0, то показывает список действий, иначе скрывает его. SHOWINPUT [#выражение] - если значение выражения отлично от 0, то показывает строку ввода, иначе скрывает ее. SHOWOBJS [#выражение] - если значение выражения отлично от 0, то показывает список предметов, иначе скрывает его. SHOWSTAT [#выражение] - если значение выражения отлично от 0, то показывает дополнительное описание, иначе скрывает его. noname пишет: хочу оставить только два окна: 1 куда все тексты буду выводить 2 для кнопочек внизу SHOWINPUT 0 SHOWSTAT 0 SHOWOBJS 0

noname: Byte пишет: Здесь идёт разбиение строки $stok.. в результате количество слов будет находиться в tokens, сами слова в массиве $tokens. так то оно так. и процедурка вроде бы небольшая. а всё равно я буду вредничать, и писать покороче. так, например, для моего простейшего парсера, в QSP можно обойтись функцией удаления пробелов. (просто на случай, если игрок введёт пробел в начале и/или в конце строки). в остальном- команды парсера просты и понятны, и я жду от игрока их точного ввода. P.S. а кнопочки иногда всё равно нужны. P.P.S. и вообще, возможность делать полупарсер-полуменюшный квест очень прикалывает, только вряд ли я додумаюсь, как это получше использовать.

noname: да, 'Великая Пустота' меня малость потрясла. вот это задумка! только предисловие вначале хорошо бы продумать получше. делаю свои первые шаги в QSP: " #Начало gosub 'инициализация' gosub 'отображение ситуации' ------------ Конец Локации --------------- #инициализация set $поле11вид = 'лес' set $поле11выходы = '....юг..' set поле11юг = 22 set $поле22вид = 'море' set $поле22выходы = 'се......' set поле22се = 22 set $актёр1имя = 'Робинзон' set $актёр1вид = 'тощий европеец' set актёр1место = 22 set $актёр2имя = 'Пятница' set $актёр2вид = 'мускулистый дикарь' set актёр2место = 11 set игрок = 1 ------------ Конец Локации --------------- #отображение ситуации *pl $поле<<актёр<<игрок>>место>>вид ------------ Конец Локации --------------- "

noname: вопрос: как правильно написать строчку отображения ситуации? в данном случае она должна просто вывести 'лес' или 'море'- в зависимости от того, где находится игрок.

Nex: Я попробовал разобраться со вложенными подвыражениями, и не смог. O_O Ждём Байта.

noname: на самом-то деле дело не только во вложенных выражениях (ни в каком виде не получается вывести ЭТО одной строкой). ПОЯСНЯЮ: в приведённом мной примере организован массив в QSP это делается по-другому, ну и почему бы не сделать как положено: $полеимя[11]='лес'? А ПОТОМУ ЧТО: в локации может быть несколько персонажей и вещей и чего угодно ещё. и как тогда правильно писать строки: $поле11вещь2=37 (некто положил в локацию ещё одну вещь) $поле11вещей=2 (теперь в локации две бесхозных вещи)? P.S. вполне возможно, что это возможно, только в хелпе про многомерные массивы ничего не сказано. P.P.S. а со второй строчкой как? вот эти две строки связать с одним полем... разве в QSP это возможно?

Byte: noname, "подвыражения" доступны только для строк. в твоём случае можно использовать индексацию массивов через строки. сделать можно так: $вещи['<<индекс>>_<<вещь>>'] = 'камень' как вариант делать просто $вещь_локация['камень']='лес' и т.п. Nex, подвыражения вычисляются по одному и тому же принципу - в строке идёт поиск парных "<<" / ">>". то есть для вычисления вложенного подвыражения необходимо присутствие вложенной строки.. например: $ss='a' $pos2='s' 'pos<<$ss+''_<<$pos2>>''>>q' выведет 'posa_sq'

Byte: Описал подобный случай в новой справке...

noname: Byte пишет: noname, "подвыражения" доступны только для строк. в твоём случае можно использовать индексацию массивов через строки. это как? " #Начало gosub 'инициализация' gosub 'отображение ситуации' ------------ Конец Локации --------------- #инициализация set $полевыходы['лес'] = '....юг..' set $полеюг['лес'] = 'море' set $полевыходы['море'] = 'се......' set $полесе['море'] = 'лес' set $актёрвид['Робинзон'] = 'тощий европеец' set $актёрместо['Робинзон'] = 'море' set $актёрвид['Пятница'] = 'мускулистый дикарь' set $актёрместо['Пятница'] = 'лес' set $игрок = 'Робинзон' ------------ Конец Локации --------------- #отображение ситуации *pl '<<$актёрместо[<<$игрок>>]>>' ------------ Конец Локации --------------- "



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