Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
09.08.2008 14:39

fireton
некто с бородой (+354, -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
12.08.2008 10:36

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

Тон

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

Честно говоря, не понял назначение этого кода. Пользую флаги на соответствующих объектах.

Иногда возникает необходимость в глобальных флагах, например, если нужно выдать некий текст при первом осмотре какого-нибудь объекта. Конечно, кому как удобно. Но я и написал, что это функции - для моего личного пользования, я не претендую на канон. smile

Вот, кстати, еще добавление - если определить символ:

Код:

#define FL __FILE__+cvtstr(__LINE__)

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

Код:

ifNotFlagSay(FL, '\bУ тебя появилось ясное чувство, что ты был здесь ранее...', true);

2Андрей: да, я знаю про isseen, но иногда подобный текст требуется выдать не только на команду "осмотреть".

Неактивен

0    0    #3
12.08.2008 14:08

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

Тон

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

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

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru