ТЗ - central-university-dev/TinkoffEduEvents GitHub Wiki

? - на подумать ??? - сильно на подумать (требуется ли такой функционал вообще)

Стек

  • Макет Figma: WIP link
  • Вёрстка с UIKit / SwiftUI
  • Swift 5

Фичи

Платформа для игр

! Необходимо подумать как выполнять первый пункт !

  1. Платформа должна позволять добавлять новые мини-игры и функционал
  2. Сами мини-игры
  3. Система очков
  4. Рейтинговая таблица для текущего мероприятия
  5. На бэке хранится вся статистика, очки пользователей, настройки игр

Мини-игры

(будут в макете)

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

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

  1. Квиз:
    1. Содержит вопрос на любую тематику (настраиваемо)
    2. Содержит 4 варианта ответ на вопрос (настраиваемо)
    3. Только один вариант ответа правильный
    4. За правильный ответ пользователь получает какое-то количество очков (настраиваемо)
    5. Настройки организатора - вопросы, варианты ответов, количество очков за ответ
  2. (математический) квиз на скорость:
    1. Содержит всю предыдущую логику квиза (п. 1)
    2. (опционально) множитель очков в зависимости от скорости ответа (1й игрок получит больше 2го и т.д.) (настраиваемо)
    3. (опционально) Возможный режим игры - математический квиз - где числа и ответы генерируются сами (настраиваемо)
      1. (к бэку (?)) Генерация должна быть одинаковой для всех пользователей
    4. Настройки организатора - режим игры, вопросы, ответы, очки, множитель, сложность генерации мат. примеров
  3. Match two:
    1. Генерируется поле с парами картинок одним из следующих способов:
      1. Генерация на устройстве по заданным настройкам
      2. Загруженные картинки с серверной части
    2. Вид картинок может быть следующим:
      1. Либо генерируются простые геометрические фигуры
      2. Либо загружаются картинки организатором
    3. Количество пар настраивается организатором
    4. Картинки показываются на какое-то время, а затем скрываются (настраиваемо)
    5. Пользователь должен отгадать пары
    6. Настройки организатора - количество пар, время до скрытия картинок, количество очков за правильную пару
  4. Рисовашки:
    1. Генерируется / выставляется организатором тема для рисунка
    2. Пользователи выполняют рисунок за отведённое время (настраиваемо)
    3. Победитель определяется либо голосованием (нельзя голосовать за себя), либо организатором (настраиваемо)
    4. Голосование:
      1. Лист из рисунков участников
      2. Свой рисунок не отображается
      3. Нужно проголосовать за рисунок
      4. Очки начисляются игроку с наибольшим количеством голосов (при нескольких победителях, делятся на всех)
    5. Настройки организатора - тема для рисунка, время для рисунка, выбор победителя
  5. Игра на удачу (pegs game):
    1. Игрок может поставить определенное количество из своих очков
    2. Игрок бросает фишку в любую из заданных позиций
    3. Фишка падает вниз отскакивая от препятствий с шансом 50/50 отлететь либо влево, либо вправо
    4. Внизу поля есть несколько зон множителей, по умолчанию от 0.25x до 3x (настраиваемо)
    5. Игрок получает количество очков с множителем, в зависимости от того, в какую зону упадет фишка
    6. (к бэку (?)) Поле должно быть у всех одинаковое
  6. Пинг понг
    1. Игра заканчивается при выполнении каких-либо из этих условий:
      1. Вышло отведённое для игры время (настраиваемо)
      2. Забито требуемое количество голов (настраиваемо)
    2. Разбивается по парам, как турнир, если кому-то не нашлось пары он ждёт следующего раунда
    3. На бэке - жеребьевка игроков, статы
  7. (?) Трейдинг на новостях (подумать, не сильно тяжело ли реализовывать):
    1. ремарка: я не мегаинвестор, поэтому могу неправильные слова использовать
    2. У участника есть какой-то начальный баланс (настраиваемо)
    3. Есть несколько компаний у которых можно покупать акции:
      1. Можно купить/продать 1, 10, 100 акций
      2. Имеют разные стоимости акций (могут различаться на порядки)
      3. Имеют разный множитель от новости (волатильность ?), т.е. некоторые компании не сильно значительно теряют/прибавляют стоимость, а какие-то очень значительно
      4. Пассивно каждые 10 секунд что-то (рандомное) происходит с их стоимостью, чуть-чуть влияя на стоимость
    4. Есть лента новостей, периодически прилетают новые новости, которые влияют на стоимость акций каких-то определенных компаний:
      1. У компаний и новостей могут быть теги, чтобы понимать кому прибавляем, а кому убавляем стоимость
      2. У новости есть краткий заголовок, и небольшое описание 1-2 предложения
      3. Новости выходят раз в какой-то промежуток времени
    5. Выигрывает тот кто накопил наибольший баланс
    6. Соответственно на бэке - пул новостей, компаний с тэгами, стоимостью, волатильностью, которое обновляется каждые 10 секунд (?), либо по выпуску новости

Аккаунт

Аккаунт пользователя

  1. Накопленные баллы с мероприятия
  2. Магазин мерча и всяких плюшек для конкретного мероприятия (?)
  3. При участии в мероприятии без регистрации, информация о баллах хранится у организатора (?)
  4. Статистика пользователя (например всякие поощрения для очень активных посетителей мероприятий)

Аккаунт организатора

  1. Возможность управлять настройками мини-игр
  2. Просмотр информации об участниках мероприятия
  3. Возможность управлять участниками мероприятия (в т.ч. выгонять)
  4. Статистика по мероприятию (напр. leaderboard)

Авторизация / Регистрация / Быстрый вход в игру

  1. Вход в мероприятие:
    1. Возможность входить по QR коду мероприятия
    2. Возможность входить по ID мероприятия
  2. При первом входе регистрация по номеру телефона
  3. Участие в мероприятии без регистрации (?)

Требования к дизайну

Наверное просто по макету можно будет расписать Корпоративные цвета...?