2116
правок
Изменения
Flags
,Новая: Автор: Жучков Антон == Общая информация == Часто бывает необходимым выдать некий текст...
Автор: [[Жучков, Антон|Жучков Антон]]
== Общая информация ==
Часто бывает необходимым выдать некий текст в зависимости от состояния игры (флага). Иногда удобно сосредоточить все флаги в одном месте. Чаще всего, это делается на объекте <tt>global</tt>.
Я написал несколько удобных для меня функций, которыми можно легко управлять флагами, выводить текст и начислять очки в зависимости от значения того или иного флага. Конечно, есть и другие способы "помечать" состояния игры, но мне показалось, что эти функции могут быть полезны.
Итак, в первую очередь необходимо [[Media:Flags.zip|скачать сам модуль]] и вставить его в код игры директивой <tt>#include</tt>.
Флаги будут храниться в объекте <tt>global</tt> в виде списка строк <tt>flags</tt>. Если перед началом игры требуется, чтобы какие-то флаги были установлены по умолчанию, то в описание объекта
<tt>global</tt> нужно вставить их определение:
global: object
...
flags = ['isDrunk' 'isHeadache']
;
Далее, приведу описание функций модуля.
== isFlag ==
Формат: <tt>isFlag(flag)</tt>
Возвращает значение флага <tt>flag</tt>.
== setFlag ==
Формат: <tt>setFlag(flag)</tt>
Устанавливает флаг <tt>flag</tt>.
== unsetFlag ==
Формат: <tt>unsetFlag(flag)</tt>
Сбрасывает флаг <tt>flag</tt>.
== ifFlagSay ==
Формат: <tt>ifFlagSay(flag, message [doUnset, score])</tt>
Выводит сообщение <tt>message</tt>, если флаг <tt>flag</tt> установлен. При этом, если <tt>doUnset = true</tt> (по умолчанию <tt>nil</tt>), то сбрасывает флаг <tt>flag</tt>. Если параметр <tt>score</tt> определен, то начисляет количество очков, равное его значению.
== ifNotFlagSay ==
Формат: <tt>ifNotFlagSay(flag, message [doSet, score])</tt>
Выводит сообщение <tt>message</tt>, если флаг <tt>flag</tt> НЕ установлен. При этом, если <tt>doSet = true</tt> (по умолчанию <tt>nil</tt>), то устанавливает флаг <tt>flag</tt>. Если параметр <tt>score</tt> определен, то начисляет количество очков, равное его значению.
== sayOnce ==
Формат: <tt>sayOnce(flag, message [, score])</tt>
Полностью аналогична функции <tt>ifNotFlagSay</tt> с параметром <tt>doSet = true</tt>. Определена для удобства "единичного" вывода текста. Для той же цели определен символ:
#define _FL __FILE__+cvtstr(__LINE__)
Т.е., если требуется вывести текст один раз за всю игру, то достаточно написать:
sayOnce(_FL, 'Глядя на все это, ты чувствуешь себя как-то неуютно...');
В этом случае, флагом будет служить название файла исходника и номер строки, из которой производился вызов <tt>sayOnce</tt>. Как видно, символ <tt>_FL</tt> очень удобен для таких "одноразовых" флагов.
[[Категория:Для разработчиков игр]]
== Общая информация ==
Часто бывает необходимым выдать некий текст в зависимости от состояния игры (флага). Иногда удобно сосредоточить все флаги в одном месте. Чаще всего, это делается на объекте <tt>global</tt>.
Я написал несколько удобных для меня функций, которыми можно легко управлять флагами, выводить текст и начислять очки в зависимости от значения того или иного флага. Конечно, есть и другие способы "помечать" состояния игры, но мне показалось, что эти функции могут быть полезны.
Итак, в первую очередь необходимо [[Media:Flags.zip|скачать сам модуль]] и вставить его в код игры директивой <tt>#include</tt>.
Флаги будут храниться в объекте <tt>global</tt> в виде списка строк <tt>flags</tt>. Если перед началом игры требуется, чтобы какие-то флаги были установлены по умолчанию, то в описание объекта
<tt>global</tt> нужно вставить их определение:
global: object
...
flags = ['isDrunk' 'isHeadache']
;
Далее, приведу описание функций модуля.
== isFlag ==
Формат: <tt>isFlag(flag)</tt>
Возвращает значение флага <tt>flag</tt>.
== setFlag ==
Формат: <tt>setFlag(flag)</tt>
Устанавливает флаг <tt>flag</tt>.
== unsetFlag ==
Формат: <tt>unsetFlag(flag)</tt>
Сбрасывает флаг <tt>flag</tt>.
== ifFlagSay ==
Формат: <tt>ifFlagSay(flag, message [doUnset, score])</tt>
Выводит сообщение <tt>message</tt>, если флаг <tt>flag</tt> установлен. При этом, если <tt>doUnset = true</tt> (по умолчанию <tt>nil</tt>), то сбрасывает флаг <tt>flag</tt>. Если параметр <tt>score</tt> определен, то начисляет количество очков, равное его значению.
== ifNotFlagSay ==
Формат: <tt>ifNotFlagSay(flag, message [doSet, score])</tt>
Выводит сообщение <tt>message</tt>, если флаг <tt>flag</tt> НЕ установлен. При этом, если <tt>doSet = true</tt> (по умолчанию <tt>nil</tt>), то устанавливает флаг <tt>flag</tt>. Если параметр <tt>score</tt> определен, то начисляет количество очков, равное его значению.
== sayOnce ==
Формат: <tt>sayOnce(flag, message [, score])</tt>
Полностью аналогична функции <tt>ifNotFlagSay</tt> с параметром <tt>doSet = true</tt>. Определена для удобства "единичного" вывода текста. Для той же цели определен символ:
#define _FL __FILE__+cvtstr(__LINE__)
Т.е., если требуется вывести текст один раз за всю игру, то достаточно написать:
sayOnce(_FL, 'Глядя на все это, ты чувствуешь себя как-то неуютно...');
В этом случае, флагом будет служить название файла исходника и номер строки, из которой производился вызов <tt>sayOnce</tt>. Как видно, символ <tt>_FL</tt> очень удобен для таких "одноразовых" флагов.
[[Категория:Для разработчиков игр]]