Автор | Сообщение |
|
| moderator
|
|
|
Отправлено: 23.03.08 23:35. Заголовок: Примеры кода
В этой теме будут примеры работающего кода для QSP.
|
|
Профиль
Цитата
Ответить
|
Новых ответов нет
, стр:
1
2
3
4
5
All
[см. все]
|
|
|
Отправлено: 24.03.08 00:04. Заголовок: на сайте урк ваши фа..
на сайте урк ваши фаны писали, что в QSP есть аналог xbtn - это правда? а есть ли аналог функции разбиения на токены tokens? можно ли писать QSP-квест в своём любимом блокноте(формат- виднузовский txt)? просто для интереса спросил - я готов к тому, что у вас всё по-другому
|
|
Профиль
Цитата
Ответить
|
|
| moderator
|
|
|
Отправлено: 24.03.08 00:46. Заголовок: noname в блокноте мо..
noname пишет: цитата: | можно ли писать QSP-квест в своём любимом блокноте(формат- виднузовский txt)? |
| Можно. Для этого понадобится txt2gam. Если ещё не читал Уроки QSP, читай. Справку скачай последнюю версию с http://qsp.su, смотри там работу со строками. Со строками в QSP можно сделать что угодно, если что-то конкретно нужно, то говори, что. xbtn и прочие "кнопки" делаются через ACT для URQL xbtn <метка>,{оператор&оператор},<Название кнопки> Для QSP ACT 'Название действия':оператор & оператор & GT 'локация'
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 24.03.08 08:22. Заголовок: вот это по делу! ур..
вот это по делу! уроки просмотрел ещё давно, но хочется начать побыстрее, а с непривычки в новую вещь врубиться сложно, так что буду рад, если будешь подсказывать даже то, что в уроках описано. лишний пример использования знакомых конструкций никогда не помешает . разбиения по словам или по токенам нет, я так понимаю?
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 24.03.08 08:28. Заголовок: можно сделать и по с..
можно сделать и по словам, и по символам, и вообще всё, что можно себе представить.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 24.03.08 08:30. Заголовок: Byte пишет: можно с..
Byte пишет: цитата: | можно сделать и по словам, и по символам, и вообще всё, что можно себе представить. |
| можно сделать это одно а кратко и просто- это другое. впрочем, я пока только начинаю разбираться.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 24.03.08 08:34. Заголовок: итак, примеры кода б..
итак, примеры кода будем обсуждать в этой теме в массив занесено 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'
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 24.03.08 08:51. Заголовок: работает! ну, кое-чт..
работает! ну, кое-что начинает проясняться. и интерфейс очень даже ничего... да, и помогите лентяю: как из текста проги управлять окнами? хочу оставить только два окна: 1 куда все тексты буду выводить 2 для кнопочек внизу
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 24.03.08 08:56. Заголовок: и ещё вопрос: иног..
и ещё вопрос: иногда необходимо вызвать процедуру, которая предлагает игроку (не во всплывающем сообщении, а в игре) несколько кнопок на выбор. что сделает такая процедура: выведет кнопки и вернёт управление исходной программе или выведет кнопки и подождёт, пока игрок сделает свой выбор по-моему второй вариант полезней, но если возможны оба варианта- было бы совсем хорошо решение от Byte: по поводу п.2 - вариант 1. вариант 2 реализуется через дополнительную локацию. также можно сделать ограничение выбора по времени, etc...
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 24.03.08 08:57. Заголовок: а ведь точно: допус..
а ведь точно: допустим вызываются хоть 10-ть раз вложенные функции, но если последний переход был по goto то, выведя кнопки прога будет ждать их нажатия... а в действиях по каждой кнопке будет прописано дополнительное действие 'конец локации' (у вас он кажися минусиком делается) и тогда кнопка по нажатию своё дело сделает и вернётся из процедуры P.S. почему нельзя чаще, чем каждые 15сек постить сообщения?
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 24.03.08 09:10. Заголовок: остался открытым воп..
остался открытым вопрос про управление окнами: включать/отключать/изменять расположение и размер из проги - что возможно?
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 24.03.08 09:17. Заголовок: Смотря что нужно.. Д..
noname пишет: цитата: | можно сделать это одно а кратко и просто- это другое. впрочем, я пока только начинаю разбираться. |
| Смотря что нужно.. Для разбиения по символам можно, например, воспользоваться функцией mid. mid('строка',2,1) - получим букву 'т' mid('строка',4,1) - получим букву 'о' Для разбиения по словам можно воспользоваться поиском через instr пробелов и опять же функцией mid: 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' Здесь идёт разбиение строки $stok.. в результате количество слов будет находиться в tokens, сами слова в массиве $tokens.
|
|
Профиль
Цитата
Ответить
|
|
|
Отправлено: 24.03.08 09:21. Заголовок: noname пишет: включ..
noname пишет: цитата: | включать/отключать/изменять расположение и размер |
| размеры и расположение окошек меняет сам играющий, как ему удобнее.. включение / выключение окошек описано в "Уроках" и помощи: SHOWACTS [#выражение] - если значение выражения отлично от 0, то показывает список действий, иначе скрывает его. SHOWINPUT [#выражение] - если значение выражения отлично от 0, то показывает строку ввода, иначе скрывает ее. SHOWOBJS [#выражение] - если значение выражения отлично от 0, то показывает список предметов, иначе скрывает его. SHOWSTAT [#выражение] - если значение выражения отлично от 0, то показывает дополнительное описание, иначе скрывает его. noname пишет: цитата: | хочу оставить только два окна: 1 куда все тексты буду выводить 2 для кнопочек внизу |
| SHOWINPUT 0 SHOWSTAT 0 SHOWOBJS 0
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 24.03.08 20:17. Заголовок: Byte пишет: Здесь и..
Byte пишет: цитата: | Здесь идёт разбиение строки $stok.. в результате количество слов будет находиться в tokens, сами слова в массиве $tokens. |
| так то оно так. и процедурка вроде бы небольшая. а всё равно я буду вредничать, и писать покороче. так, например, для моего простейшего парсера, в QSP можно обойтись функцией удаления пробелов. (просто на случай, если игрок введёт пробел в начале и/или в конце строки). в остальном- команды парсера просты и понятны, и я жду от игрока их точного ввода. P.S. а кнопочки иногда всё равно нужны. P.P.S. и вообще, возможность делать полупарсер-полуменюшный квест очень прикалывает, только вряд ли я додумаюсь, как это получше использовать.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 25.03.08 20:57. Заголовок: да, 'Великая Пус..
да, 'Великая Пустота' меня малость потрясла. вот это задумка! только предисловие вначале хорошо бы продумать получше. делаю свои первые шаги в 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 $поле<<актёр<<игрок>>место>>вид ------------ Конец Локации --------------- "
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 25.03.08 20:58. Заголовок: вопрос: как правильн..
вопрос: как правильно написать строчку отображения ситуации? в данном случае она должна просто вывести 'лес' или 'море'- в зависимости от того, где находится игрок.
|
|
Профиль
Цитата
Ответить
|
|
| moderator
|
|
|
Отправлено: 25.03.08 22:31. Заголовок: Я попробовал разобра..
Я попробовал разобраться со вложенными подвыражениями, и не смог. O_O Ждём Байта.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 25.03.08 23:29. Заголовок: на самом-то деле дел..
на самом-то деле дело не только во вложенных выражениях (ни в каком виде не получается вывести ЭТО одной строкой). ПОЯСНЯЮ: в приведённом мной примере организован массив в QSP это делается по-другому, ну и почему бы не сделать как положено: $полеимя[11]='лес'? А ПОТОМУ ЧТО: в локации может быть несколько персонажей и вещей и чего угодно ещё. и как тогда правильно писать строки: $поле11вещь2=37 (некто положил в локацию ещё одну вещь) $поле11вещей=2 (теперь в локации две бесхозных вещи)? P.S. вполне возможно, что это возможно, только в хелпе про многомерные массивы ничего не сказано. P.P.S. а со второй строчкой как? вот эти две строки связать с одним полем... разве в QSP это возможно?
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 26.03.08 01:43. Заголовок: noname, "подвыра..
noname, "подвыражения" доступны только для строк. в твоём случае можно использовать индексацию массивов через строки. сделать можно так: $вещи['<<индекс>>_<<вещь>>'] = 'камень' как вариант делать просто $вещь_локация['камень']='лес' и т.п. Nex, подвыражения вычисляются по одному и тому же принципу - в строке идёт поиск парных "<<" / ">>". то есть для вычисления вложенного подвыражения необходимо присутствие вложенной строки.. например: $ss='a' $pos2='s' 'pos<<$ss+''_<<$pos2>>''>>q' выведет 'posa_sq'
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 26.03.08 02:15. Заголовок: Описал подобный случ..
Описал подобный случай в новой справке...
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 26.03.08 07:50. Заголовок: Byte пишет: noname,..
Byte пишет: цитата: | noname, "подвыражения" доступны только для строк. в твоём случае можно использовать индексацию массивов через строки. |
| это как? " #Начало gosub 'инициализация' gosub 'отображение ситуации' ------------ Конец Локации --------------- #инициализация set $полевыходы['лес'] = '....юг..' set $полеюг['лес'] = 'море' set $полевыходы['море'] = 'се......' set $полесе['море'] = 'лес' set $актёрвид['Робинзон'] = 'тощий европеец' set $актёрместо['Робинзон'] = 'море' set $актёрвид['Пятница'] = 'мускулистый дикарь' set $актёрместо['Пятница'] = 'лес' set $игрок = 'Робинзон' ------------ Конец Локации --------------- #отображение ситуации *pl '<<$актёрместо[<<$игрок>>]>>' ------------ Конец Локации --------------- "
|
|
Профиль
Цитата
Ответить
|
Новых ответов нет
, стр:
1
2
3
4
5
All
[см. все]
|
|