Форум переехал на новый адрес: 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 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 26.03.08 08:00. Заголовок: не то что бы код ста..


не то что бы код стал выглядеть понятней, зато работает.
со стороны человек если глянет- не поймёт, что я написал.

остался вопрос насчёт многомерных(например двумерных)массивов:
Byte пишет:

 цитата:
сделать можно так: $вещи['<<индекс>>_<<вещь>>'] = 'камень'


в моём случае это как?
на поле, например лес ложат вторую вещь, камень.
т е поле#место$вещь2=37
на QSP:
$место='лес'
$вещь='2'
$поле['<<$место>>_<<$вещь>>']='камень'

м-да, возможности-то есть, но к конструкциям надо привыкнуть

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





ссылка на сообщение  Отправлено: 26.03.08 08:06. Заголовок: #Начало gosub '..


#Начало

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

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

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

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

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

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





ссылка на сообщение  Отправлено: 26.03.08 08:09. Заголовок: приведённый выше при..


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

например в $актёрместо['1'] = '22'
1-номер актёра, а 22-занимаемое им место
логичнее выглядело актёр1место=22

ну да ладно, это дело десятое.
вернусь с работы- проверю двумерные массивы

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




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


noname, даже если оставить так как ты написал - то зачем там подвыражение?
можно так:

#отображение ситуации
$полевид[$актёрместо[$игрок]]
------------ Конец Локации ---------------

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





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


Byte пишет:

 цитата:
noname, даже если оставить так как ты написал


а можно лучше?
Byte пишет:

 цитата:
то зачем там подвыражение?


с непривычки. к тому же всё равно это выражение будет подвыражением
в строчке типа: "вы видите <<..>>"
спасибо за помощь!



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




ссылка на сообщение  Отправлено: 26.03.08 08:23. Заголовок: noname, что-то ты пе..


noname, что-то ты перешёл на строки там где не нужно..

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

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

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

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

*pl $полевид[актёрместо[игрок]]
------------ Конец Локации ---------------


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





ссылка на сообщение  Отправлено: 26.03.08 19:17. Заголовок: хмм... QSP мне начин..


хмм...
QSP мне начинает нравиться...

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

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





ссылка на сообщение  Отправлено: 26.03.08 22:34. Заголовок: сделать можно так: $..


сделать можно так: $вещи['<<индекс>>_<<вещь>>'] = 'камень'

что-то не очень понятно...

массив типа a[x,y] как сделать? a,x,y- числа.
как туды присвоить значение и как оттуда его получить?

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


ссылка на сообщение  Отправлено: 26.03.08 23:09. Заголовок: Двумерный массив раз..


Двумерный массив размерностью M на N :
mass[x,y]
отображается в виде одномерного так:
mass[y*M+x]

в QSP массивы - одномерные.

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




ссылка на сообщение  Отправлено: 27.03.08 01:39. Заголовок: Из нового хелпа: Ка..


Из нового хелпа:

Как организовать многомерный массив?

1) Самый удобный способ - использование массивов, индексируемых через строки. Например:

 
$карта_вещь['<<x>>_<<y>>'] = 'палка'
карта_нпс['<<x>>,<<y>>,<<z>>'] = 12


2) Отображение многомерного массива на одномерный. Например:

 
$карта_вещь[x+y*ширина] = 'палка'
карта_нпс[x+y*ширина+z*ширина*высота] = 12


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




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


noname пишет:

 цитата:
сделать можно так: $вещи['<<индекс>>_<<вещь>>'] = 'камень'

что-то не очень понятно...

массив типа a[x,y] как сделать? a,x,y- числа.
как туды присвоить значение и как оттуда его получить?



если a,x,y - числа, то:

 
$имя_массива['<<a>>_<<x>>_<<y>>'] = 'строковое значение'
$имя_массива['<<a>>_<<x>>_<<y>>'] & ! вывод значения


если a - имя массива, то

 
a['<<x>>_<<y>>'] = 3
a['<<x>>_<<y>>'] & ! вывод значения


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





ссылка на сообщение  Отправлено: 27.03.08 07:35. Заголовок: Nex пишет: Двумерны..


Nex пишет:

 цитата:
Двумерный массив размерностью M на N :
mass[x,y]
отображается в виде одномерного так:
mass[y*M+x]


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

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

хотя... если в M и N засунуть при инициализации максимальные координаты...
всё равно не пойдёт: кол-во чего-нибудь(то же хранится по массивам) может
увеличиваться по ходу игры.

а ещё в большом проекте код должен быть легко читаем.
mass[y*M+x] не очень наглядно будет выглядеть при использовании
хотя, это-дело десятое

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





ссылка на сообщение  Отправлено: 27.03.08 07:43. Заголовок: м-да... в урке с мас..


м-да...
в урке с массивами было гораааздо проще
нравилась мне простота урки.

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

в *.chm и *.doc и *.html всё в порядке.

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




ссылка на сообщение  Отправлено: 27.03.08 09:11. Заголовок: noname, новый хелп у..


noname, новый хелп уже в chm. возможно, будет сразу pdf - вариант.

а с простотой массивов - здесь просто немного построже.. в урке код и данные смешаны, это имхо как раз минус.. это "удобство" скрывает за собой кучу ограничений / ошибок.

например, если в урке "a#x$_#y$", то аналогично в куспе "a['<<x>>_<<y>>']"..

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





ссылка на сообщение  Отправлено: 27.03.08 19:02. Заголовок: а если в урке пол..


а если в урке
поле11вещь7свойство2 ='несъедобно'
поле11вещь7форма ='куб'
поле11вещей_здесь = 9
и т д

ну да ладно, всё равно это никто не использует.

что мне нужно от платформы?

простота работа с данными (урка устраивает, qsp то же, но не так)
нормальное оформление (досурка не устраивает сложностями с русификацией)

что мне нравится в qsp, так это:

"(круглое | зелёное) яблоко" - где-то в хелпе вычитал
надо это опробовать. для парсера- то, что нужно!

хотя тогда уж лучше:
"[круглое][зелёное]яблоко"
поймёт и яблоко
и круглое яблоко
и зелёное яблоко
и круглое зелёное яблоко
(но не поймёт зелёное круглое яблоко)

буду изучать всякие эти закорючки.
хорошо бы их снабдить краткими примерами
(хотя бы в одну строку)
так как не ясно, как использовать /n перевод строки

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





ссылка на сообщение  Отправлено: 27.03.08 21:14. Заголовок: что-то я не понял. с..


что-то я не понял.
символы * и + применимы только к отдельным символам?
а если
"(круглое)*(зелёное)*яблоко" - не прокатит?
к словам применим только |
?

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

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

сразу скажу: возможности привлекательнее, чем на урке, но...
но удобства- во дворе. причём во дворе у соседей.

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





ссылка на сообщение  Отправлено: 27.03.08 21:28. Заголовок: *pl STRCOMP($text,&#..


*pl STRCOMP($text,'.осм.+')
выдаёт или '0' - если строка не соответствует шаблону
или '-1' - если соответствует.

почему '-1'?
какие ещё значения можно ожидать от STRCOMP?
в хелпе вообще не сказано, что возвращает эта функция.

и вообще: в хелпе о каждой функции, как правило сказано, что она делает.
в данном случае сравнивает то с этим, НО
от ФУНКЦИИ требуется в первую очередь- возвращаемое значение.
важно- что она возвращает.
что она при этом делает- неважно, лишь бы не слишком долго.


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





ссылка на сообщение  Отправлено: 27.03.08 23:22. Заголовок: не подумайте, что я ..


не подумайте, что я противник QSP-
наоборот, я на него уже фактически перешёл.

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

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




ссылка на сообщение  Отправлено: 28.03.08 01:19. Заголовок: noname, фактически, ..


noname, фактически, тебе должно быть важно возвратила она 0 или нет. "-1" (не 0) для QSP это "истина", "0" - ложь. в хелп добавил описание возвращаемого значения..

noname пишет:

 цитата:
а если в урке
поле11вещь7свойство2 ='несъедобно'
поле11вещь7форма ='куб'
поле11вещей_здесь = 9
и т д


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

 
$свойство['11_7_2'] = 'несъедобно'
$форма['11_7'] = 'куб'
вещей[11] = 9

можно и "более читаемо":

 
$свойство['поле11_вещь7_2'] = 'несъедобно'
$форма['поле11_вещь7'] = 'куб'
вещей['поле11'] = 9


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




ссылка на сообщение  Отправлено: 28.03.08 01:44. Заголовок: "(круглое)*(зелё..


"(круглое)*(зелёное)*яблоко" - такое тоже допустимо.. будет работать для "круглоеяблоко", "круглоекруглоеяблоко", "зелёноеяблоко", "круглоезеленоеяблоко", "круглоекруглоезелёноезелёноеяблоко" и т.п.

я так понял, ты хотел написать:
"(круглое\s)?(зелёное\s)?яблоко"

тогда

 
$pattern = '(круглое\s)?(зелёное\s)?яблоко'
strcomp('круглое зелёное яблоко', $pattern)
strcomp('круглое яблоко', $pattern)
strcomp('зелёное яблоко', $pattern)
strcomp('яблоко', $pattern)

все строчки вернут -1.

PS: это уже стандарт регулярных выражений.. то есть такой формат использует далеко не только QSP.. справку и учебники можно найти в интернете ("Perl Compatible Regular Expressions" / PCRE).

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





ссылка на сообщение  Отправлено: 28.03.08 07:40. Заголовок: ладно-ладно. НО хоро..


ладно-ладно. НО хорошо бы, что бы в новом хелпе было упомянуто, какие значения может возвращать та или иная функция. в-принципе, информации о том, что ложь=0 , истина= не 0 вполне достаточно, НО в хелпе не было сказано и этого и я думал так: ложь=0, истина=1. не ожидал других значений.

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



ссылка на сообщение  Отправлено: 28.03.08 09:50. Заголовок: noname пишет: QSP м..


noname пишет:

 цитата:
QSP мне начинает нравиться...


Ну мы же тебе говорили! :)

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




ссылка на сообщение  Отправлено: 28.03.08 12:01. Заголовок: noname, значение ..


noname, значение "-1" было выбрано не спроста :) в том же basic'е "истина" тоже -1. сделано для того, чтобы сократить число булевых / логических операций (т.к. отрицание 0 это не 1, а именно -1. отрицание -1 как раз 0). если бы 1 означала "истину", то пришлось бы вводить дополнительные операции, схожие с "and","or","no".. а это сильно запутывает новичков.

для примера - в c/c++ есть "||","&&","!" и есть "|", "&", "~".

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




ссылка на сообщение  Отправлено: 28.03.08 12:03. Заголовок: noname пишет: хорош..


noname пишет:

 цитата:
хорошо бы, что бы в новом хелпе было упомянуто, какие значения может возвращать та или иная функция.


похоже, что только для strcomp забыл это указать :) уже добавил в новую версию...

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





ссылка на сообщение  Отправлено: 28.03.08 18:59. Заголовок: следующий код получи..


следующий код получился в процессе разборок с массивами и вставками:

A['актёр1место']=22
$A['игрок']='1'
$x='1'
*pl $A['игрок']
*pl $x
if $A['игрок']=$x: *pl 'O.K!'
*pl A['актёр<<$x>>место']
*pl '--------------'
*pl A['актёр<<$A['игрок']>>место']
*pl '--------------'

как вы думаете, что выведет этот кусок кода?
по результатам я понял, что с массивами и вставками я разобрался,
а вот как теперь относиться к QSP?

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

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





ссылка на сообщение  Отправлено: 28.03.08 19:03. Заголовок: Byte пишет: $свойс..


Byte пишет:

 цитата:
$свойство['11_7_2'] = 'несъедобно'


свойство чего? вещи, непися, контейнера или ещё чего?
в большом проекте я хочу видеть:
$A['поле11вещь7свойство2']
где $A-все переменные создаваемого мира
'поле11вещь7свойство2'- второе свойство 7-й вещи из тех, что находятся на поле с координатами 1,1
(в моём случае мир пока небольшой)

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




ссылка на сообщение  Отправлено: 28.03.08 19:07. Заголовок: в строке *pl A>&..


в строке *pl A['актёр<<$A['игрок']>>место'] ошибка. у тебя строка содержит внутри строку, которая задана неверно. нужно через дублирование кавычек (кавычки, включенные в строку):

 
*pl A['актёр<<$A[''игрок'']>>место']


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




ссылка на сообщение  Отправлено: 28.03.08 19:10. Заголовок: Плюс код можно немно..


Плюс код можно немного сократить до: ("*pl" можно убрать, также как лишние строки)

 
A['актёр1место']=22
A['игрок']=1
x=1
A['игрок']
x
if A['игрок']=x: 'O.K!'
A['актёр<<x>>место']
'--------------'
A['актёр<<A[''игрок'']>>место']
'--------------'


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





ссылка на сообщение  Отправлено: 28.03.08 19:30. Заголовок: Byte пишет: в строк..


Byte пишет:

 цитата:
в строке *pl A['актёр<<$A['игрок']>>место'] ошибка. у тебя строка содержит внутри строку, которая задана неверно. нужно через дублирование кавычек (кавычки, включенные в строку


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

собственно мне нужна такая строка:
*pl ' Вы находитесь '+$A['поле<<A[''актёр<<$A[''игрок'']>>место'']>>вид']
надеюсь, сработает...
без операторов *pl ИМХО текст проги труднее читать

и вообще, зря вы так URQL изуродовали. добавили бы всяких функций- и ладно. ну и интерфейс тоже неплох. управление инвентарём и кнопками(ACT) реализовано- суперкласс! моя первая прога на qsp будет обязательно кнопочной. хочу с вашими кнопочками побаловаться.

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





ссылка на сообщение  Отправлено: 28.03.08 19:34. Заголовок: *pl ' Вы находит..


*pl ' Вы находитесь '+$A['поле<<A[''актёр<<$A[''игрок'']>>место'']>>вид']
не фурычит.
не соответствие открывающих и закрывающих...
причём не помогает делание $A[''актёр<<$A[''игрок'']>>место''] строковой переменной
та же ошибка

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




ссылка на сообщение  Отправлено: 28.03.08 19:56. Заголовок: noname, это ни разу ..


noname, это ни разу не ошибка, всё логично..
в строках ты используешь ещё строки.. интерпретатор изначально должен получить исходную строку (пропустив "вложенные"). вложенность кавычек задается их дублированием.. то есть 2 подряд идущих апострофа "превращаются" в один апостроф. затем полученная строка проверяется на "подвыражения".. если нашли, то в подвыражении получаем ещё строку, которая, опять же, должна быть верно задана.. снова вложенность кавычек..

noname пишет:

 цитата:
собственно мне нужна такая строка:
*pl ' Вы находитесь '+$A['поле<<A[''актёр<<$A[''игрок'']>>место'']>>вид']


не сработает. опять же у тебя с вложенными кавычками проблемы..

 
A['игрок']=1
a['актёр1место']=2
$a['поле2вид']='лес'

*pl ' Вы находитесь ' + $A['поле<<A[''актёр<<A[''''игрок'''']>>место'']>>вид']

как это разбирается:
сначала получаем строку 'поле<<A[''актёр<<A[''''игрок'''']>>место'']>>вид', и определяем кавычки, включенные в строку. получаем:
поле<<A['актёр<<A[''игрок'']>>место']>>вид
далее здесь есть подвыражения. при вычислении A['актёр<<A[''игрок'']>>место'] находим строку 'актёр<<A[''игрок'']>>место', и определяем кавычки, включенные в строку. получаем:
актёр<<A['игрок']>>место
далее здесь есть подвыражения. при вычислении A['игрок'] находим строку 'игрок'. в ней нет кавычек, включенных в строку.
то есть при обратных подстановках получаем:
$a['поле<<A[''актёр1место'']>>вид']
затем
$a['поле2вид']
и далее
'лес'

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




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


noname пишет:

 цитата:
причём не помогает делание $A[''актёр<<$A[''игрок'']>>место''] строковой переменной
та же ошибка



представь что ты ничего не знаешь об этой строке и начинаешь её разбирать.. находишь первую кавычку. считается, что началась строка..
в QSP строка завершается кавычкой, после которой нет ещё одной кавычки (если там 2 подряд кавычки, то это кавычка, включенная в строку).. то есть в твоём примере движок определяет сначала пустую строку '', что сразу же "ломает" дальнейший разбор.. в итоге получаем странные ошибки.

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




ссылка на сообщение  Отправлено: 28.03.08 20:30. Заголовок: noname пишет: '..


noname пишет:

 цитата:
'поле11вещь7свойство2'- второе свойство 7-й вещи из тех, что находятся на поле с координатами 1,1


если здесь "поле11" это 2 координаты, то нужно разделить их каким-нибудь символом "_","," ...
иначе, к примеру, для строки "поле112" - не ясно, толи это координаты "1,12", толи "11,2".

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




ссылка на сообщение  Отправлено: 28.03.08 20:47. Заголовок: noname пишет: и вооб..


noname пишет:

 цитата:
и вообще, зря вы так URQL изуродовали. добавили бы всяких функций- и ладно.


у QSP и URQ крайне отдалённое сходство.

URQL уродлив изначально. повторю, что за поверхностной "простотой" скрывается куча ограничений (я говорю о непосредственно самом языке).

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





ссылка на сообщение  Отправлено: 28.03.08 21:14. Заголовок: Byte пишет: повторю..


Byte пишет:

 цитата:
повторю, что за поверхностной "простотой" скрывается куча ограничений


например?

я так увидел, что qsp отличается только неудобством языка (чего стоят хотя бы те же кавычки!), добавленными полезными функциями и интерфейсом. очень схожая организация данных, но различный доступ к ним.

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




ссылка на сообщение  Отправлено: 29.03.08 11:32. Заголовок: noname, например в т..


noname, например, в текущем синтаксисе URQL (можно ли формально описать грамматику языка?) невозможно реализовать нормальную работу со строками. могу заверить, что кавычки - это наоборот положительная сторона. кстати, в 5.4 с ними более удобно работать..
"схожая организация" - в отличии от URQ, QSP похож на Basic.

в URQ не понятно, где идёт код, а где данные.. всё вперемешку подстановками..

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





ссылка на сообщение  Отправлено: 29.03.08 12:20. Заголовок: Byte пишет: невозмо..


Byte пишет:

 цитата:
невозможно реализовать нормальную работу со строками


пример?

Byte пишет:

 цитата:
в URQ не понятно, где идёт код, а где данные.. всё вперемешку подстановками..


в qsp не понятная фигня с этими кавычками, к тому же ты сам убираешь *pl и тебе всё равно понятно, где данные, где код, хотя "x" - она переменная, но в то же время это её вывод на экран.

в URQ гораздо удобнее и понятнее. и это не ИМХО. смотри сам:
в строчке "поле11вещь7свойство2" я разделяю числа понятными и удобными мне "пояснениями"
а ты предлагал: "$свойство['11_7_2']" - где тут понятность?
для больших проэктов наглядность и простота критичны- иначе можно запутаться и никогда его не закончить

что привлекает как в QSP, так и в URQ- так это "вольности" обращения с данными и подстановки <<>> #$
так же привлекает неструктурность и необъектность языка- на URQ я отдыхаю после дельфей, в которых обязательно всё заранее описывать и заморачиваться с организацией процедур.

и ещё по поводу QSP:
Byte пишет:

 цитата:
представь что ты ничего не знаешь об этой строке и начинаешь её разбирать..


я бы понял, что в выражении 'fhg<<$fhg<<$a>>>>' кавычки соблюдены. начинаем разбор с самого глубокого вхождения (насколько я понял, в ОПЗ ты не переводишь). делаем подстановку переменной $a (тут сложностей не больше, чем если бы вместо <<>> были обычные круглые скобки), допустим, она равна 'qqq'-> подставляем переменную $fhgqqq-> подучаем искомую строку. конечно, одинаковые кавычки открытия и закрытия уменьшают читабельность кода и добавляет головной боли автору языка, конечно двойной знак <<>> не так краток, как #$. НО своими 2*n кавычками во вложениях ты ещё раз показал мне, что QSP- хотя и лучшее, что есть на сегодняшний день, но томится это лучшее в уродливом синтаксисе.
Byte пишет:

 цитата:
в отличии от URQ, QSP похож на Basic.


проги на URQ пожалуй, больше похожи на Basic.

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




ссылка на сообщение  Отправлено: 29.03.08 14:06. Заголовок: noname пишет: приме..


noname пишет:

 цитата:
пример?


пример - код:
if #aaa$ = sdsdsds sdfsdf then oooo=7

если строка aaa это "sdfsdf<4 then end & " или "sdasd = asdasd"
то при подстановке будет:
if sdfsdf<4 then end & = sdsdsds sdfsdf then oooo=7
if sdasd = asdasd = sdsdsds sdfsdf then oooo=7
и т.п.
аналогично - подстановки среди другого кода.. данные смешались с кодом.
как задать строку "asdfasd asdasd & asdasd & if sdsd else" без кавычек? как определить где начало, а где конец строки?

noname пишет:

 цитата:
а ты предлагал: "$свойство['11_7_2']" - где тут понятность?


был предложен и "более понятный" вариант.
а если при подстановке в "поле11вещь7свойство2" вместо 11 / 7 / 2 будет строка с пробелом или недопустимым в имени переменной символом - будет ошибка при выполнении. см. 1ый "пример".

noname пишет:

 цитата:
я бы понял, что в выражении 'fhg<<$fhg<<$a>>>>' кавычки соблюдены.


это не логично. идея такова, что внутри << и >> находится выражение.
в данном случае $fhg<<$a>>. здесь уже нет строки, поэтому <<$a>> воспринимается как часть выражения. для того, чтобы воспринималось как подвыражение, необходима строковая константа.
чтобы сделать то, что ты предлагаешь, необходимо присутствие подвыражений не только для строк, но и для кода. а это уже отрицательно скажется на языке.

noname пишет:

 цитата:
проги на URQ пожалуй, больше похожи на Basic.


смешно :)

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





ссылка на сообщение  Отправлено: 29.03.08 14:56. Заголовок: Byte пишет: как зад..


Byte пишет:

 цитата:
как задать строку "asdfasd asdasd & asdasd & if sdsd else" без кавычек?


кавычки в URQ использовать можно. я использовал.
строки, подобные твоей пробовал- всегда можно реализовать понятным для интерпретатора способом
и вывести что угодно (хотя не знаю, зачем выводить такое)
и строка будет простой для понимания
и вообще, я не знаю такого случая, когда бы синтаксис URQL помешал сделать что-либо

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

да, на урке может быть и можно придумать трудновыводимую строку, но это можно обойти (с трудом)
на куспели можно (с трудом) работать со структурами данных, аналогичным вышеупомянутым

Byte пишет:

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


вот, этого-то QSP и нехватает.

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

ну, бэйсик я почти не знаю- спорить не буду

и ещё:
при отладке "в строке 43 ошибка" - как её найти?
пишу потихонечку небольшую прогу на куспели. дело продвигается со скрипом, но хочу разобраться.
по-моему rand(1,2) в 75% случаях даёт '1' - буду сделать спец-прогу для проверки рандома.

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





ссылка на сообщение  Отправлено: 29.03.08 15:17. Заголовок: извиняюсь, с random ..


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

а зачем jump-у кавычки?
при отладке "в строке 43 ошибка" - как её найти?

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




ссылка на сообщение  Отправлено: 29.03.08 15:19. Заголовок: noname пишет: вот, ..


noname пишет:

 цитата:
вот, этого-то QSP и нехватает.


этого не было и не будет, так как приводит к проблемам.


 цитата:
при отладке "в строке 43 ошибка" - как её найти?


там указано имя локации, на ней в "выполнить при посещении" ищешь 43ю строку..
QGen 3 - старый, один из минусов - не показывает номера строк :( сейчас (пока нет более нового QGen'а) вариант - писать в текстовом редакторе, там проще с номерами строк.


 цитата:
по-моему rand(1,2) в 75% случаях даёт '1' - буду сделать спец-прогу для проверки рандома.


используется генератор псевдослучайных чисел из стандартной библиотеки.

PS: у меня, честно говоря, нет никакого желания что-то писать про урку и её подстановках. повторю, что это фактически 2 разных языка, с разными принципами исполнения кода. насчёт строк - тоже не хочу объяснять то, что кажется мне очевидным.

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





ссылка на сообщение  Отправлено: 29.03.08 16:05. Заголовок: есть ли возможность ..


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

это нужно для реализации ожидания нажатия игроком баттонов, если
баттоны вызываются из локации 'ход_игрока', на которую переходили
по gosub. после обработки ACT-а нужно вернуться в конец локации
'ход_игрока', которая передаст управление вызвавшей её локации.

пользуюсь gosub так как ход_игрока вызывается в цикле, который перебирает
всех персонажей (один из которых- игрок), и после обработки ход_игрока
нужно продолжитьь обработку цикла.


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




ссылка на сообщение  Отправлено: 29.03.08 16:32. Заголовок: именно в том виде, ч..


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

 
if $ret!'':jump $ret
...код...

:lab1
..код.. (продолжение от какого-то действия)
exit
:lab2
..код..
exit

при вызове из act - $ret='lab1' & gt $prevloc
ну или $ret='lab2' & gt $prevloc

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


ссылка на сообщение  Отправлено: 29.03.08 16:37. Заголовок: noname очень странн..


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

перед вызовом gosub 'ход_игрока' запоминай имя текущей локации в переменную, вместо gosub пиши goto:
$вернуться=$CURLOC & goto 'ход_игрока'
При добавлении действия делай так:
ACT 'Действие такое-то': оператор & оператор & choice_taken=1 & goto 'ход_игрока'

В локации 'ход_игрока', в самом начале пишем
if choice_taken:choice_taken=0 & jump 'after_choice'

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




ссылка на сообщение  Отправлено: 29.03.08 16:45. Заголовок: Одно и то же написал..


Одно и то же написали :)

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





ссылка на сообщение  Отправлено: 29.03.08 17:01. Заголовок: Nex пишет: noname ..


Nex пишет:

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



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

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

ещё скажите, что я пример придумал специально под урку.

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




ссылка на сообщение  Отправлено: 29.03.08 17:20. Заголовок: "странно" то..


"странно" то, что ты хочешь весь цикл на одной локации уместить (все итерации). вообще что приходило в голову - на одной локации делать выбор, после него переходить на ещё одну, в которой реализовано "тело цикла"..

тогда никаких jump'ов не нужно.

noname пишет:

 цитата:
начинает проявляться неуниверсальность языка и всякие неувязки.


о какой "универсальности" идёт речь? на мой взгляд кусп более универсален (возможности языка), чем урка.
взять хотя бы то, что ты в урк-стиле пишешь на куспе. возможно ли обратное? :)

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





ссылка на сообщение  Отправлено: 29.03.08 17:39. Заголовок: Byte пишет: взять х..


Byte пишет:

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


на урк возможно делать мои задумки (они там выложены в отдельной теме).

я в урке года полтора назад написал два квеста не пользуясь почти ничем, кроме btn и pln
т е языка практически не знал (чтоб разобраться с массивами запросил qwerty-bench-vic)
потом забросил эту тему по личным причинам

сейчас, имея такую задумку я за пару часов освоился с языком и создал пример№1 на тему живого игрового мира, ну и далее- в той же теме. остановился только из-за того, что хочу сделать то же самое на qsp (ну ещё из-за пассивности ихнего форума)

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

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




ссылка на сообщение  Отправлено: 29.03.08 17:51. Заголовок: имхо просто у тебя з..


имхо просто у тебя за спиной багаж "установок" от урки. потому тебе и кажется всё неудобным.

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





ссылка на сообщение  Отправлено: 29.03.08 18:10. Заголовок: ну, буду осваиваться..


ну, буду осваиваться.
некоторые фичи на qsp просто подкупают:

у меня готов пример, где всё доступное игроку заносится в OBJ,
выбираешь объект (пока только направления: сзюв), к примеру, север:

видишь сразу в доп окне краткое описание северной локации и что там есть
в панели действий видишь: "идти на север"
(позже планирую вставить возможность "бросить кинжал в минотавра" - если он там
и действия с дверями/окнами северной стены локации).

выбираешь меч и видишь его описание в доп окне,
а в панели действий- что с ним можно сделать.

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

P.S.
для Зоны было бы полезно реализовать такое "подглядывание" в соседнюю локацию

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




ссылка на сообщение  Отправлено: 30.03.08 07:25. Заголовок: Королева и конь (пор..


Королева и конь (порнофильм?)

noname, конь и ферзь ходят по-разному же :) и ещё - не понимаю, зачем тут массивы..

 
#Начало
showobjs 0 & showinput 0 & showstat 0
конь_x=2 & конь_y=1
ферзь_x=4 & ферзь_y=8
ход_коня=0
'Начало системы координат доски находится в её левом нижнем углу.'
act 'Начать':gt 'ход'
-

#ход
'Ваша позиция: <<конь_x>>,<<конь_y>>'
'Позиция ферзя: <<ферзь_x>>,<<ферзь_y>>'
'----------'
ход_коня=no ход_коня & xgt $iif(ход_коня, 'ход коня', 'ход ферзя')
-

#ход коня
x = конь_x & y = конь_y
if x>2 and y<8:act 'Идти на (<<x-2>>,<<y+1>>)':конь_x=x-2 & конь_y=y+1 & xgt 'ход'
if x>1 and y<7:act 'Идти на (<<x-1>>,<<y+2>>)':конь_x=x-1 & конь_y=y+2 & xgt 'ход'
if x<8 and y<7:act 'Идти на (<<x+1>>,<<y+2>>)':конь_x=x+1 & конь_y=y+2 & xgt 'ход'
if x<7 and y<8:act 'Идти на (<<x+2>>,<<y+1>>)':конь_x=x+2 & конь_y=y+1 & xgt 'ход'
if x<7 and y>1:act 'Идти на (<<x+2>>,<<y-1>>)':конь_x=x+2 & конь_y=y-1 & xgt 'ход'
if x<8 and y>2:act 'Идти на (<<x+1>>,<<y-2>>)':конь_x=x+1 & конь_y=y-2 & xgt 'ход'
if x>1 and y>2:act 'Идти на (<<x-1>>,<<y-2>>)':конь_x=x-1 & конь_y=y-2 & xgt 'ход'
if x>2 and y>1:act 'Идти на (<<x-2>>,<<y-1>>)':конь_x=x-2 & конь_y=y-1 & xgt 'ход'
-

#ход ферзя
gs 'проверка для коня' & gs 'проверка для ферзя'
:выбор
x=ферзь_x & y=ферзь_y
d=rand(1,8) & l=rand(1,7)
if d=1:y=y-l
if d=2:x=x+l & y=y-l
if d=3:x=x+l
if d=4:x=x+l & y=y+l
if d=5:y=y+l
if d=6:x=x-l & y=y+l
if d=7:x=x-l
if d=8:x=x-l & y=y-l
if y>8 or x>8 or x<1 or y<1:jump 'выбор'
ферзь_x=x & ферзь_y=y
xgt 'ход'
-

#проверка для ферзя
if ферзь_x=конь_x or ферзь_y=конь_y:xgt 'победа ферзя'
разница_x=конь_x-ферзь_x
if ферзь_y+разница_x=конь_y or ферзь_y-разница_x=конь_y:xgt 'победа ферзя'
-

#проверка для коня
if конь_x=ферзь_x and конь_y=ферзь_y:xgt 'победа коня'
-

#победа ферзя
'Вы проиграли!'
-

#победа коня
'Вы победили!'
-


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





ссылка на сообщение  Отправлено: 30.03.08 10:23. Заголовок: Byte, когда я выклад..


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

сделал без массивов- тем лучше,
хотя конструкция вида длинаXширинаY - уже массив

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





ссылка на сообщение  Отправлено: 30.03.08 10:36. Заголовок: м-да, пошли по упрощ..


м-да, пошли по упрощениям:
1. без наглядного представления тяжело тестировать
(и получать удовольствие от реализации)
- но мне, в принципе, этого и не надо- мне для дела
хотя, когда на досурке был выложен qwerty-bench-vic
им многие заинтересовались
2. выбора за кого играть- нет?
ну и ладно. я в принципе, понял, как разобраться с
проблемой, возникавшей при отрисовке кнопок в процедуре,
вызываемой из цикла. пожалуй, разобью цикл по локациям.
не то, чтоб это было удобно, но всё же не так уродливо, как
искуственно монтировать jump в другую локацию.
p.s.
в-общем, спасибо и на этом.

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




ссылка на сообщение  Отправлено: 31.03.08 01:33. Заголовок: Небольшая доработка:..


Небольшая доработка (рисуется поле и ход ферзя выбирается немного по-другому):

 
#Начало
usehtml=1 & fsize=14
showobjs 0 & showinput 0 & showstat 0
конь_x=2 & конь_y=1
ферзь_x=4 & ферзь_y=8
ход_коня=0
'Вы играете белым конём.'
act 'Начать':gt 'ход'
-

#ход
белая=-1
'<table border="1">'
i=8
:строки
*p '<tr height="30">'
j=0
:колонки
$поле=' '
белая=no белая
if i>0 and j>0:$цвет=$iif(белая, 'FFFFFF', 'DDDDDD') else $цвет='00FF00'
if j=0:$поле=$str(i)
if i=0:$поле=$str(j)
if ферзь_x=j and ферзь_y=i:$поле='Ф'
if конь_x=j and конь_y=i:$поле='К'
*p '<td width="30" bgcolor="#<<$цвет>>"><<$поле>></td>'
j=j+1
if j<=8:jump 'колонки'
*p '</tr>'
i=i-1
if i>=0:jump 'строки'
'</table>'
'Ваша позиция: <<конь_x>>,<<конь_y>>'
'Позиция ферзя: <<ферзь_x>>,<<ферзь_y>>'
ход_коня=no ход_коня & xgt $iif(ход_коня, 'ход коня', 'ход ферзя')
-

#ход коня
x = конь_x & y = конь_y
if x>2 and y<8:act 'Идти на (<<x-2>>,<<y+1>>)':конь_x=x-2 & конь_y=y+1 & gt 'ход'
if x>1 and y<7:act 'Идти на (<<x-1>>,<<y+2>>)':конь_x=x-1 & конь_y=y+2 & gt 'ход'
if x<8 and y<7:act 'Идти на (<<x+1>>,<<y+2>>)':конь_x=x+1 & конь_y=y+2 & gt 'ход'
if x<7 and y<8:act 'Идти на (<<x+2>>,<<y+1>>)':конь_x=x+2 & конь_y=y+1 & gt 'ход'
if x<7 and y>1:act 'Идти на (<<x+2>>,<<y-1>>)':конь_x=x+2 & конь_y=y-1 & gt 'ход'
if x<8 and y>2:act 'Идти на (<<x+1>>,<<y-2>>)':конь_x=x+1 & конь_y=y-2 & gt 'ход'
if x>1 and y>2:act 'Идти на (<<x-1>>,<<y-2>>)':конь_x=x-1 & конь_y=y-2 & gt 'ход'
if x>2 and y>1:act 'Идти на (<<x-2>>,<<y-1>>)':конь_x=x-2 & конь_y=y-1 & gt 'ход'
-

#ход ферзя
gs 'проверка для коня' & gs 'проверка для ферзя'
x=ферзь_x & y=ферзь_y
влево=x-1 & вправо=8-x & вверх=8-y & вниз=y-1
k=0
if вниз>0:ход[k]=1 & длина[k] = вниз & k=k+1
if вниз>0 and вправо>0:ход[k]=2 & длина[k] = min(вниз, вправо) & k=k+1
if вправо>0:ход[k]=3 & длина[k] = вправо & k=k+1
if вправо>0 and вверх>0:ход[k]=4 & длина[k] = min(вправо, вверх) & k=k+1
if вверх>0:ход[k]=5 & длина[k] = вверх & k=k+1
if вверх>0 and влево>0:ход[k]=6 & длина[k] = min(вверх, влево) & k=k+1
if влево>0:ход[k]=7 & длина[k] = влево & k=k+1
if влево>0 and вниз>0:ход[k]=8 & длина[k] = min(влево, вниз) & k=k+1
выбор=rand(0,k-1)
d=ход[выбор]
l=rand(1, длина[выбор])
if d=1:y=y-l
if d=2:x=x+l & y=y-l
if d=3:x=x+l
if d=4:x=x+l & y=y+l
if d=5:y=y+l
if d=6:x=x-l & y=y+l
if d=7:x=x-l
if d=8:x=x-l & y=y-l
ферзь_x=x & ферзь_y=y
gt 'ход'
-

#проверка для ферзя
if ферзь_x=конь_x or ферзь_y=конь_y:xgt 'победа ферзя'
разница_x=конь_x-ферзь_x
if ферзь_y+разница_x=конь_y or ферзь_y-разница_x=конь_y:xgt 'победа ферзя'
-

#проверка для коня
if конь_x=ферзь_x and конь_y=ферзь_y:xgt 'победа коня'
-

#победа ферзя
'Вы проиграли!'
-

#победа коня
'Вы победили!'
-


UPD: Выложил пример в каталоге, раздел "В помощь разработчикам игр / Примеры, заготовки игр".

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





ссылка на сообщение  Отправлено: 01.04.08 19:33. Заголовок: спасибо! графика вдо..


спасибо!
графика вдохновляет.
даже не знаю за что больше
хочется взяться:
приделать буковки a..h
и картинки фигур к твоему примеру,
или свою прогу ковырять дальше.

наверное, буду ковырять свою...

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




ссылка на сообщение  Отправлено: 13.05.09 19:18. Заголовок: Касательно РПГ. Для ..


Касательно РПГ. Для вычисления повреждений по системе AD&D бросаются кубики, сначала пробовал в коде локации "бой" указывать вычисление урона как damage=rand(weapon_min_dam,weapon_max_dam) первая и вторая переменные это соответственно минимальный и максимальный урон. Потом вспомнил одну особенность работы с костями.. При уроне 1d8 вполне подходит вычисление через rand(1,8) а вот при уроне 2d4 нет. Дело в том, что хотя диапазон примерно тот же, но вероятность выпадания значений другая. Грубо говоря, при 1d8 есть 1/8 вероятность любой цифры. А при 2d4 есть 1/16 вероятность выпадения 2 или 8, 2/16 выпадения 3 или 7, 3/16 выпадения 4 или 6, и 4/16 выпадения 5. Непринципиально, но мысль запала. Увеличивать и без того громоздкий код боёвки не стал, но набросал функцию)

 цитата:
result=0
:1
result=result+rand(1,args[1])
args[0]=args[0]-1
if args[0]>0: jump '1'


В функцию передаются два аргумента: первый это количество костей, второй - грани кости. То есть для броска 2d4 передаём 2 и 4. На мой взгляд, получилось довольно изящно) Первую строчку наверное можно убрать, это так, перестраховка

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




ссылка на сообщение  Отправлено: 14.05.09 10:57. Заголовок: WladySpb Прикольно, ..


WladySpb Прикольно, надо будет посмотреть как оно в коде получится.

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




ссылка на сообщение  Отправлено: 14.05.09 16:56. Заголовок: Ajenta В коде так и ..


Ajenta В коде так и получаеться, кидаю два значения, возвращает рандомное число с учётом вероятностей) Правда, это всё исходит из предпосылок что генератор псевдослучайных чисел работает именно так как надо.

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




ссылка на сообщение  Отправлено: 01.06.09 23:16. Заголовок: Ещё, не сказал бы чт..


Ещё, не сказал бы что оригинальный ход, но мне он пришёл в голову случайно,и не факт что до него все додумались)
Часто нужно просто проверить посещалась ли локация, или - сколько раз посещалась. Для этого в локации-обработчике onnewloc прописываем либо:
vizited['<<$curloc>>']=1
либо:
vizited['<<$curloc>>']=vizited['<<$curloc>>']+1

и после этого там где надо просто проверяем:
if vizited['название_локации']=1:


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




ссылка на сообщение  Отправлено: 01.06.09 23:50. Заголовок: '<<$curl..


'<<$curloc>>' это то же самое, что просто $curloc:

vizited[$curloc]=1

Вроде такой пример есть в стандартном хелпе.

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




ссылка на сообщение  Отправлено: 01.06.09 23:58. Заголовок: Byte А да) Есть в fa..


Byte А да) Есть в faq - я туда не заглядывал давно..

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




ссылка на сообщение  Отправлено: 12.09.09 14:10. Заголовок: Кстати, при разработ..


Кстати, при разработке парсера могут пригодиться такие конструкции:
 
$осмотреть['банка']=" 'Обычная банка' "
$использовать['банка']="
if $curloc='asdasd':
'что-то'
else
'пример'
end
"

Выполняем это через DYNAMIC $осмотреть[$obj] / DYNAMIC $использовать[$obj]

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



ссылка на сообщение  Отправлено: 12.09.09 17:59. Заголовок: А аргументы у dynami..


А аргументы у dynamic поддерживаются?

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




ссылка на сообщение  Отправлено: 12.09.09 18:01. Заголовок: В версии 5.6.2 будут..


В версии 5.6.2 будут.

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

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



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