Насколько надёжно и проверенно QSP работает:
- с массивами (в том числе ассоциативными) больших размеров;
- большим количеством локаций;
- функцией "menu";
- html-тегом <A>…</A> с префиксом "exec:";
- вызовом меню по ссылке?
А также:
- Какова область видимости переменных?
Я возлагаю на эти элементы свои основные надежды.
И ещё — подтип "контекстно-менюшная игра" уже успел кто застолбить? Есть образцы?
Неактивен
По всем пунктам работает нормально всё. Проверено временем и играми.
Переменные как правило глобальные, кроме массива аргументов ARGS/$ARGS и переменной результата RESULT/$RESULT.
Аргументы можно передавать при переходе на локацию, при выполнении локации как функции, а также когда выполняется блок кода как анонимная функция (DYNAMIC/DYNEVAL).
"Контекстно-менюшная" - если я правильно понимаю, то подобные эксперименты были. Сходу можно назвать "Укузю" и недавнюю "Цветохимию".
Отредактировано HzD_Byte (15.03.2010 23:46)
Неактивен
Отлично, есть с чем работать!
Неактивен
Я конечно никого не хочу обижать, но... Я пробовал портировать кое-что на QSP, и почти сразу отчаялся, потому что язык и общая концепция мне кажутся примитивными. ООП нет в помине. Хотя может для менюшной платформы это нормально. Однако тут есть кому-то, я точно знаю, важные фичи -- HTML, картинки, звук и прочее.
Если бы я писал менюшную игру, то наверное на INSTEAD. Там всё очень удобно и складно.
Неактивен
В INSTEAD много чего нет
Неактивен
yandexx написал:
Я конечно никого не хочу обижать, но... Я пробовал портировать кое-что на QSP, и почти сразу отчаялся, потому что язык и общая концепция мне кажутся примитивными. ООП нет в помине. Хотя может для менюшной платформы это нормально. Однако тут есть кому-то, я точно знаю, важные фичи -- HTML, картинки, звук и прочее.
Если бы я писал менюшную игру, то наверное на INSTEAD. Там всё очень удобно и складно.
HzD_Byte написал:
В INSTEAD много чего нет
Язык и общая концепция может и примитивны (как, например, и ассемблер), но даже из этих кирпичиков можно кое-что сложить. Хотя для написания объёмной игры в обычном текстовом редакторе (или даже через QGen) мозги должны щёлкать не хуже чем у персонажа Хоффмана из "Человека дождя". Впрочем, техническую часть лучше обсудить здесь.
Неактивен
yandexx написал:
Я конечно никого не хочу обижать, но... Я пробовал портировать кое-что на QSP, и почти сразу отчаялся, потому что язык и общая концепция мне кажутся примитивными. ... Если бы я писал менюшную игру, то наверное на INSTEAD...
Этим ты никого не обидишь
INSTEAD и правда удобнее - для программистов.
Ты ведь программист? Ну вот.
А тем, кто программирования не знает, или обладает только базовыми навыками, INSTEAD не осилить - зато QSP в самый раз.
Неактивен
Olegus t.Gl. написал:
Хотя для написания объёмной игры в обычном текстовом редакторе (или даже через QGen) мозги должны щёлкать не хуже чем у персонажа Хоффмана из "Человека дождя".
Чтобы в локах не путаться, их лучше группировать. А когда эта возможность реализована на уровне языка, то можно вообще не париться. Для переменных лучше использовать дебаггер или создавать дополнительный код для дебага (например для бета-тестирования). Про ООП смысла говорить вообще нету, т.к. у нас это реализовано по большей части в парсерах.
З.Ы.
При таком подходе писать квесты не так проблемно.
Отредактировано Eten (16.03.2010 08:53)
Неактивен
Nex написал:
yandexx написал:
Я конечно никого не хочу обижать, но... Я пробовал портировать кое-что на QSP, и почти сразу отчаялся, потому что язык и общая концепция мне кажутся примитивными. ... Если бы я писал менюшную игру, то наверное на INSTEAD...
Этим ты никого не обидишь
INSTEAD и правда удобнее - для программистов.
Ты ведь программист? Ну вот.
А тем, кто программирования не знает, или обладает только базовыми навыками, INSTEAD не осилить - зато QSP в самый раз.
Согласен
Неактивен
Я не знаю чего все так помешались на этом ООП. Если я пишу менюшку, не парсер, то даже представить не могу где бы мне там могло это ООП понадобиться Хоть я и программист.
Ибо однотипных предметов у меня нет, свойств однотипных у локаций нет, а то, что можно объединить, объединяется прекрасно и без ООП. )
Неактивен
Однотипные свойства очень просто реализуются через массивы - был_на_локации[$curloc]=1, $описание['пальто']='Очень теплое пальто.' и т.п.
Кстати говоря, динамическая генерация кода - намного более мощная штука, чем ООП. А она в QSP поддерживается.
Неактивен
HzD_Byte написал:
Кстати говоря, динамическая генерация кода - намного более мощная штука, чем ООП. А она в QSP поддерживается.
Также стоит заметить, что появилась данная фича не так давно. Т.к. в версии 5.3х и ниже ее точно нету. А жаль.
Отредактировано Eten (16.03.2010 17:57)
Неактивен
HzD_Byte написал:
Однотипные свойства очень просто реализуются через массивы - был_на_локации[$curloc]=1, $описание['пальто']='Очень теплое пальто.' и т.п.
А что ты делаешь, когда этих инструментов тебе не хватает?
Неактивен
Eten написал:
HzD_Byte написал:
Однотипные свойства очень просто реализуются через массивы - был_на_локации[$curloc]=1, $описание['пальто']='Очень теплое пальто.' и т.п.
А что ты делаешь, когда этих инструментов тебе не хватает?
Наверное, то же, что делает человек, когда не знает, как правильно написать определённое слово, — переформулирует фразу, чтобы это слово там не попадалось ("пиши — голова в канаве").
Неактивен
Вопрос: Как корректно передать в функцию №2 параметр функции №1, который может быть как числовым, так и строковым?
В Функцию1 передаётся один параметр, который может быть как числовым, так и строковым. Из Функции1 вызывается Функция2, которая приводит этот параметр к требуемому виду.
Например, во всех массивах данных сведения о предмете хранятся по его числовому ID, однако в некоторых случаях я ссылаюсь на предмет по его строковому идентификатору. Следовательно, есть желание передавать идентификатор (числовой или строковый) предмета одним параметром, а уже внутри функции разбирать — какого типа идентификатор передан и приводить его к унифицированному значению.
#ПолучитьIDПредмета if ARGS[0]=0 and $ARGS[0]='': … elseif ARGS[0]<>0: Result=ARGS[0] elseif $ARGS[0]<>'': Result=IIF(ISNUM($ARGS[0]), VAL($ARGS[0]), МассивIDпоИмени[$ARGS[0]]) end - #ПолучитьОписаниеПредмета {Идентификатор предмета} ID=func('ПолучитьIDПредмета', {Идентификатор предмета}) … -
Неактивен
Я вижу 2 варианта:
1) Передавать через строковый параметр (при вызове преобразовывать в строку GS 'функция', STR num) - тогда в функцию аргумент всегда будет приходить как $args[0]
2) Проверять в начале строковое значение - $args[0], если оно не пустое, то использовать его, иначе числовое. Это будет вполне корректно для описанной ситуации с идентификаторами:
iif($args='',args,$args)
Неактивен
HzD_Byte написал:
Я вижу 2 варианта:
1) Передавать через строковый параметр (при вызове преобразовывать в строку GS 'функция', STR num) - тогда в функцию аргумент всегда будет приходить как $args[0]
2) Проверять в начале строковое значение - $args[0], если оно не пустое, то использовать его, иначе числовое. Это будет вполне корректно для описанной ситуации с идентификаторами:
iif($args='',args,$args)
Ну за неимением других вариантов, это очевидные способы решения проблемы.
Неактивен
Olegus t.Gl. написал:
Вопрос: Как корректно передать в функцию №2 параметр функции №1, который может быть как числовым, так и строковым?
Я, конечно, в куспе ничего не понимаю, но есть такая извращенная идея: передавать три параметра - в одном только строковые величины, в другом - числовые, а третий - "селектор", говорящий вызываемой функции, каким из первых двух аргументов пользоваться.
Отредактировано uux (06.09.2010 22:16)
Неактивен
Да, это тоже вариант
Неактивен
HzD_Byte написал:
Да, это тоже вариант
Народ, все (это гипербола) обходные пути я знаю. Могу подкинуть ещё вариант:
#ПолучитьIDПредмета {Имя глобальной переменной строкой} COPYARR 'ID', $ARGS[0] if ID=0 and $ID='': … elseif ID<>0: Result=ID elseif $ID<>'': Result=IIF(ISNUM($ID), VAL($ID), МассивIDпоИмени[$ID]) end - #ПолучитьОписаниеПредмета {Идентификатор предмета} rID=ARGS[0] $rID=$ARGS[0] ID=func('ПолучитьIDПредмета', 'rID') … -
Кстати, ещё варианты?
Неактивен
А как html-движок QSP относится к незнакомым тегам и незнакомым атрибутам? Он их тщательно игнорирует или где-то там он ругается, у него крыша едет и на определённом моменте это может боком выйти?
Например:
<Ah object="37" href="exec: GS 'ДействияСЛопатой'">лопата</Ah>
Неактивен
Просто игнорирует.
Неактивен