воскресенье, 11 сентября 2016 г.

Универсальный Страйкбольный Таймер: начало

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


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



Предыстория

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

Итак, что имеется сейчас в виде работающего макета:
  • экран (4 строки по 20 символов),
  • считыватель RFID,
  • клавиатура с цифрами 0-9, знаками * и #, буквами A-D,
  • светодиод (многоцветный),
  • выход для пиротехники (внутри разъем типа тюльпан),
  • питание от 2-3 элементов АА,
  • как вариант - будет отдельное питание для инициации пиротехники, чтобы процессор в случае несрабатывания не оставался без питания.

Аппаратная платформа достаточно мощная, чтобы в дальнейшем прицепить:
  • энергонезависимые часы (можно применить, к примеру, для включения подсветок только в ночное время, что продлит время работы от батарей)
  • память для запоминания времени событий (и кодов RFID), что позволит даже учитывать когда именно точка переходила из рук в руки, кто герой и всё такое
  • карту памяти (SD) для сохранения расширенного лога игры и, возможно, настроек
  • подключение по usb, для считывания списка событий и клонирования настроек
  • модуль беспроводной связи точек со штабом, но это явно не дешевая опция (так как придётся дополнительно разворачивать сеть ретрансляторов).

Кстати, те же RFID ключи используются в системе учёта мертвяка, что весьма удобно. Итак, возвращаясь к теме таймера, пока что первое, что пришлось сделать - проанализировать сценарии.

Виды сценариев

  1. Классическая контрольная точка 
    • стороны нажимают свои кнопки, им идёт счет времени
    • прямой счет времени каждой стороны
    • счет без ограничения
  2. Классическая удерживаемая точка
    • прямой счет времени
    • счет без ограничений
    • при отсутствии нажатий счет останавливается через указанное время (например, надо минимум 1 раз в 20 минут подтверждать владение точкой)
  3. Контрольная точка, короткая игра
    • прямой счет времени
    • общее время ограничено (обратный счет суммарного времени)
  4. Контрольная точка, задача удержать заданное время
    • обратный счет времени
    • время сбрасывается в начальное значение при запуске другой стороной- счет замораживается по достижении нуля
  5. Бесконечный источник ресурса
    • прямой счет времени
    • счет без ограничения
    • для активации необходим идентификатор
  6. Конечный источник ресурса
    • прямой счет времени
    • счет времени ограничен суммарно (обратный счет суммарного времени)
    • для активации необходим идентификатор
  7. Источник необходимого ресурса
    • обратный счет времени
    • счет времени завершается при достижении нуля (набрали сколько сказано)
    • для активации необходим идентификатор
  8. Источник необходимого ресурса, добыча фиксированными порциями
    • обратный счет времени
    • счет времени завершается при достижении нуля
    • при отбитии точки чужой стороной время добывающей стороны округляется вниз до ближайшего кратного указанному значения (то есть учитывается, например, каждый полный час удержания ресурса)
    • (как вариант) время сверх кратного указанному переходит захватившей стороне
    • для активации необходим идентификатор
  9. Пусковая установка - надо дойти до установки, ввести код или иным способом активировать, при этом начнется отсчёт времени до пуска, в течение которого надо удерживать точку (т.е. аналог сценария 4)
    • обратный счет времени
    • для активации необходим идентификатор
    • при захвате точки изначальной стороной счет времени сбрасывается в исходное состояние (предотвратили пуск, надо заново всё осуществлять)
  10. Тупо таймер
    • приносится стороной на точку, устанавливается, подключается к пиротехнике и далее см. сценарий  9, но теперь отключающая сторона должна ввести код
    • обратный счет времени
    • для останова счета необходим идентификатор

Список настроек


Все сценарии имеют сходные черты - счёт времени, при захвате точки что-то произойдёт, счёт как-то заканчивается и всё такое. Так что пришлось обобщать и составлять список настроек, которые позволят реализовать описанные сценарии.

Настройки:
  1. Стороны:
    • количество сторон (от 1 до 4, больше на экран не лезет)
    • Цвета сторон (красный/синий/желтый/зеленый и может другие, чтобы можно было сделать визуальную индикацию текущей принадлежности точки многоцветным светодиодом)
  2. Счет времени сторон (общий для всех сторон конфликта)
    • прямой счет времени (от 0 вверх, часы)
    • обратный счет времени (от указанного времени, таймер)
  3. Общий счет времени
    • прямой (часы)
    • обратный (таймер)
    • отключен (для игр без ограничения времени)
  4. Сброс счета стороны - для останавливаемых таймеров, счета ресурсов и прочих извращений
    • по нажатию другой стороны
    • по особому RFID- по особому коду
    • сброс до целого количества интервалов (для сбора ресурсов фиксированными объемами)
    • отключен (для обычных таймеров)
  5. Конец игры - условие, по которому счетчик блокируется, запоминая текущий счет
    • достижение счета стороны заданного N
    • достижение счета стороны 0
    • достижение общего счета заданному N
    • достижение общего счета 0
    • отключен (бесконечный счет)
  6. Останов счета текущей стороны
    • при нажатии кнопки другой стороны (классический счетчик)
    • автоматически при отсутствии нажатий в течение N минут (для точек, где обязательно надо подтверждать присутствие)
    • при вводе кода-при предъявлении RFID
  7. Акивация счета другой стороны
    • кнопкой стороны (захватили точку, нажали и пошел учёт
    • RFID стороны (не просто захватили, а привели техника стороны и он запустил)
    • RFID + кнопка стороны (см. выше, но ключ-карта запуска может переходить от стороны к стороне)
    • код стороны (можно сообщать стороне коды активации при выполнении какого-то квеста)
    • общий код + кнопка стороны (код активации спрятан на полигоне в нескольких экземплярах)
  8. Запуск общего счета времени (начало игры)
    • по любой кнопке
    • по любому RFID
    • по определенному RFID (организатором)
    • по коду (организатором)
    • через указанное время (минут)
    • в указанное время (при наличии часов в устройстве)
  9. Действия по достижении условия окончания игры
    • выход под электроинициацию (можно прицепить пиротехнику)
    • звуковой сигнал (скажем, за минуту начинает пищать, нервируя окружающих)
    • звуковой сигнал + по окончании инициация
    • ничего
  10. Подсветка дисплея
    • постоянно
    • по событиям (экономим электричество включая каждую минуту + по нажатию кнопок на несколько секунд)
    • отключена (пусть фонарики носят)
  11. Маяк - светодиод, показывающий точку в ночное время или если точка стоит где-то в подвале
    • вкл постоянно (цвет стороны)
    • вкл постоянно (белый)
    • мерцание (цвет стороны, включается каждую минуту на несколько секунд)
    • мерцание (белый, см. выше)
    • выключен