Форум переехал на новый адрес: http://qsp.su



АвторСообщение
moderator


ссылка на сообщение  Отправлено: 23.03.08 23:35. Заголовок: Примеры кода


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

Спасибо: 0 
Профиль Цитата Ответить
Ответов - 84 , стр: 1 2 3 4 5 All [только новые]







ссылка на сообщение  Отправлено: 24.03.08 00:04. Заголовок: на сайте урк ваши фа..


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

просто для интереса спросил - я готов к тому, что у вас всё по-другому

Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 24.03.08 00:46. Заголовок: noname в блокноте мо..


noname пишет:

 цитата:
можно ли писать QSP-квест в своём любимом блокноте(формат- виднузовский txt)?


Можно. Для этого понадобится txt2gam.
Если ещё не читал Уроки QSP, читай.

Справку скачай последнюю версию с http://qsp.su, смотри там работу со строками. Со строками в QSP можно сделать что угодно, если что-то конкретно нужно, то говори, что.

xbtn и прочие "кнопки" делаются через ACT
для URQL
xbtn <метка>,{оператор&оператор},<Название кнопки>
Для QSP
ACT 'Название действия':оператор & оператор & GT 'локация'

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 24.03.08 08:22. Заголовок: вот это по делу! ур..


вот это по делу!

уроки просмотрел ещё давно, но
хочется начать побыстрее, а с непривычки
в новую вещь врубиться сложно, так что буду
рад, если будешь подсказывать даже то, что в
уроках описано.

лишний пример использования знакомых конструкций никогда не помешает
.
разбиения по словам или по токенам нет, я так понимаю?

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 24.03.08 08:28. Заголовок: можно сделать и по с..


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

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 24.03.08 08:30. Заголовок: Byte пишет: можно с..


Byte пишет:

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


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

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 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'


Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 24.03.08 08:51. Заголовок: работает! ну, кое-чт..


работает!
ну, кое-что начинает проясняться.
и интерфейс очень даже ничего...

да, и помогите лентяю:

как из текста проги управлять окнами?
хочу оставить только два окна:
1 куда все тексты буду выводить
2 для кнопочек внизу

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 24.03.08 08:56. Заголовок: и ещё вопрос: иног..


и ещё вопрос:

иногда необходимо вызвать процедуру,

которая предлагает игроку (не во всплывающем сообщении,
а в игре) несколько кнопок на выбор.

что сделает такая процедура:
выведет кнопки и вернёт управление исходной программе
или
выведет кнопки и подождёт, пока игрок сделает свой выбор

по-моему второй вариант полезней, но если возможны оба варианта-
было бы совсем хорошо

решение от Byte:

по поводу п.2 - вариант 1. вариант 2 реализуется через дополнительную локацию. также можно сделать ограничение выбора по времени, etc...

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 24.03.08 08:57. Заголовок: а ведь точно: допус..


а ведь точно:

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

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 24.03.08 09:10. Заголовок: остался открытым воп..


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

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 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.

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 24.03.08 09:21. Заголовок: noname пишет: включ..


noname пишет:

 цитата:
включать/отключать/изменять расположение и размер


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

SHOWACTS [#выражение] - если значение выражения отлично от 0, то показывает список действий, иначе скрывает его.
SHOWINPUT [#выражение] - если значение выражения отлично от 0, то показывает строку ввода, иначе скрывает ее.
SHOWOBJS [#выражение] - если значение выражения отлично от 0, то показывает список предметов, иначе скрывает его.
SHOWSTAT [#выражение] - если значение выражения отлично от 0, то показывает дополнительное описание, иначе скрывает его.

noname пишет:

 цитата:
хочу оставить только два окна:
1 куда все тексты буду выводить
2 для кнопочек внизу


SHOWINPUT 0
SHOWSTAT 0
SHOWOBJS 0

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 24.03.08 20:17. Заголовок: Byte пишет: Здесь и..


Byte пишет:

 цитата:
Здесь идёт разбиение строки $stok.. в результате количество слов будет находиться в tokens, сами слова в массиве $tokens.


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

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 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 $поле<<актёр<<игрок>>место>>вид
------------ Конец Локации ---------------
"

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 25.03.08 20:58. Заголовок: вопрос: как правильн..


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


Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 25.03.08 22:31. Заголовок: Я попробовал разобра..


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

Ждём Байта.

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 25.03.08 23:29. Заголовок: на самом-то деле дел..


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

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 26.03.08 01:43. Заголовок: noname, "подвыра..


noname, "подвыражения" доступны только для строк. в твоём случае можно использовать индексацию массивов через строки.
сделать можно так: $вещи['<<индекс>>_<<вещь>>'] = 'камень'
как вариант делать просто $вещь_локация['камень']='лес' и т.п.

Nex, подвыражения вычисляются по одному и тому же принципу - в строке идёт поиск парных "<<" / ">>".
то есть для вычисления вложенного подвыражения необходимо присутствие вложенной строки..

например:
$ss='a'
$pos2='s'
'pos<<$ss+''_<<$pos2>>''>>q'

выведет 'posa_sq'

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 26.03.08 02:15. Заголовок: Описал подобный случ..


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

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 26.03.08 07:50. Заголовок: Byte пишет: noname,..


Byte пишет:

 цитата:
noname, "подвыражения" доступны только для строк. в твоём случае можно использовать индексацию массивов через строки.


это как?
"
#Начало

gosub 'инициализация'
gosub 'отображение ситуации'
------------ Конец Локации ---------------

#инициализация

set $полевыходы['лес'] = '....юг..'
set $полеюг['лес'] = 'море'
set $полевыходы['море'] = 'се......'
set $полесе['море'] = 'лес'
set $актёрвид['Робинзон'] = 'тощий европеец'
set $актёрместо['Робинзон'] = 'море'
set $актёрвид['Пятница'] = 'мускулистый дикарь'
set $актёрместо['Пятница'] = 'лес'
set $игрок = 'Робинзон'
------------ Конец Локации ---------------

#отображение ситуации

*pl '<<$актёрместо[<<$игрок>>]>>'
------------ Конец Локации ---------------
"

Спасибо: 0 
Профиль Цитата Ответить
Ответов - 84 , стр: 1 2 3 4 5 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 19
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация вкл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия