Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
09.08.2008 14:39

fireton
некто с бородой (+353, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Несколько удобных функций (флаги)

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

Код:

isFlag : function(value) {
 return (find(global.flags, value) <> nil);
}

setFlag : function(value) {
 if (not isFlag(value)) {
 global.flags += [value];
 }    
}        

unsetFlag : function(value) {
 if (isFlag(value)) {
 global.flags -= [value];
 }    
}

ifFlagSay : function (flag, message, ...) {
 if (isFlag(flag)) {
  say(message);
 if ((argcount > 2) and getarg(3))
  unsetFlag(flag);
 if (argcount > 3)
  incscore(getarg(4));
 }
}

ifNotFlagSay : function (flag, message, ...) {
 if (not isFlag(flag)) {
 say(message);
 if ((argcount > 2) and getarg(3)) 
  setFlag(flag);
 if (argcount > 3)
  incscore(getarg(4));    
 }
}

Как этим добром пользоваться. В объекте global необходимо объявить список flags:

Код:

global: object
 ...
 flags = []
;

Если какие-то флаги должны быть предустановлены, то

Код:

global: object
 ...
 flags=['someFlag' 'someAnotherFlag']
;

После этого в коде пишем что-то вроде:

Код:

if (isFlag('myFlag')) {
 ...
}

Установить флаг:

Код:

 setFlag('myFlag')

Сбросить флаг:

Код:

 unsetFlag('myFlag')

Если надо вывести текст в зависимости от значения флага:

Код:

ifFlagSay('myFlag', 'Некий текст')

Если надо вывести текст и сбросить флаг:

Код:

ifFlagSay('myFlag', 'Некий текст', true)

Если надо вывести текст, сбросить флаг и выдать очки:

Код:

ifFlagSay('myFlag', 'Некий текст', true, 50)

То же самое, но для неустановленных флагов используется функция ifNotFlagSay.

Enjoy. smile

Неактивен

0    0    #2
11.08.2008 13:42

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Re: Несколько удобных функций (флаги)

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

Наверное, будет полезно, если функции смогут прожевывать списки: flags.add(['lightsOff', 'diskotekaBegan']);

ifFlagSay('myFlag', 'Некий текст', true, 50)
Это, конечно, мегашорткат, но по его виду вообще непонятно, что он делает.
Я бы лично не использовал его, а писал "развернутые" функции для улучшения читабельности. Нам и так жалуются, что в ТАДС ничего не понятно :-)
Если уж так хочется, то может ввести константу?
ifFlagSay('myFlag', 'Некий текст', DROP_FLAG, 50)

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

В общем, лично для себя я не вижу смысла использовать эти функции.

Отредактировано Flint (11.08.2008 13:50)

Неактивен

Powered by PunBB
© copyright 2001–2023 iFiction.Ru