ДЗ 20-21-22-23. Командный проект Игра-кликер для студентов на две недели

Платформа Android/iOS. Unity 2021+

Untitled

Задача

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

Баланс игрока

Отображается вверху экрана и не может опуститься ниже 0$.

Бизнесы

Каждый бизнес изображается отдельным элементом в списке на экране и имеет:

  1. Название
  2. Текущий уровень

Если бизнес не куплен, то там отображается 0. 3. Текущий доход

  1. Прогрес сдохода Бар заполняется от 0% до 100% за время “Задержка дохода” из конфига ниже. Как только доходит до 100%, значение текущего дохода зачисляется в Баланс, а прогресс начинает копиться заново с 0%. Значение бара должно обновляться каждый кадр (для плавности).
  2. Кнопка повышения уровня Содержит цену повышения уровня. При нажатии и при Баланс >= цена, увеличивает уровень на 1.
  3. Кнопка улучшения 1 При нажатии и при Баланс >= цена, улучшение покупается.
  4. Кнопка улучшения 2 При нажатии и при Баланс >= цена, улучшение покупается.

Улучшения бизнесов

Каждое улучшение уникально для каждого бизнеса. Каждое можно купить только 1 раз. Каждое обладает:

  1. Название

  2. Цена покупки

    После покупки, заменяется на текст “Куплено”.

  3. Множитель дохода (в процентах)

Конфиг

Доход = lvl * базовый_доход * (1 + множитель_от_улучшения_1 + множитель_от_улучшения_2)

Цена уровня = cost = (lvl+1) * базовая_стоимость

Бизнес Задержка дохода Базовая стоимость Базовый доход Улучшение 1 Улучшение 2
1 3 3 3 50 +50%
2 6 40 40 1200 +100%
3 10 200 200 6000 +100%
4 17 1000 1000 15000 +100%
5 30 5000 5000 100000 +200%

Важные моменты

  1. В списке доступно 5 бизнесов. Первый бизнес изначально куплен, остальные нет. Чтобы купить бизнес, игрок должен купить его первый уровень.
  2. Все текстовые поля изменяются в момент изменения значений и должны содержать актуальную информацию (например, цена покупки уровня изменяется после покупки и тд).
  3. Конфиг (или конфиги) должен быть реализован через ScriptableObject для удобства геймдизайнера и чтобы не лазить по сцене в случае изменения.
  4. Не делать хардкода!

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

  1. Писать код по SOLID.
  2. Не забывать о подходах: YAGNI, DRY, KISS
  3. Никаких неиспользуемых классов в проекте оставаться не должно.
  4. Придерживаться единого код-стайла.

Залить код на git, предоставить ссылку с публичным доступом. В первую очередь оценивается архитектура, соблюдение код-стайла, отсутствие костылей (даже если они быстро исправляются), работоспособность прототипа.

В дополнительных ассетах (спрайты, звуки) нет нужды, они никак не повлияют на оценку. Можно добавлять по желанию.

💡 **Подсказка по архитектуре: один из множества вариантов реалзиции**

Одна система представляет из себя несколько классов. Классы делятся на Model, View, Controller. Каждая часть - Model, View, Controller является MonoBehaviour для простоты прокидывания зависимостей.

Model - содержит только состояние: поля, обозначающие текущую прокачку, баланс игрока итд.

Controller - содержит только логику и ссылку на соответствующую ему модель. Может менять данные в модели.

View - отображает данные из модели, имеет ссылку на модель и на контроллер. Может вызывать методы на контроллере (например - нажатие кнопки вызывает метод покупки бизнеса)

Системы:

  1. Система Дохода: отображение текущего баланса игрока в верхней части экрана и его обновление после зачисления дохода от бизнеса.
  2. Система Бизнеса: представление каждого бизнеса как отдельного элемента списка на экране и отображение его текущего уровня, дохода и прогресса сбора дохода. Необходимо также реализовать функционал повышения уровня и покупки улучшений. Генерация списка бизнесов по заданному конфигу.
  3. Система Улучшений: каждое улучшение должно быть уникальным для каждого бизнеса и обладать своей ценой покупки и множителем дохода. Необходимо также учитывать, что каждое улучшение может быть куплено только один раз.
  4. Система Конфига: определение формул для расчета и цены повышения уровня бизнеса на основе конфига. Загрузка файлов конфига, их хранение и предоставление доступа для других систем.
💡 **Подсказки по командной работе**: Обязательно используйте тасктрекер - Trello или любой другой. Работайте в гите. Использовать ветки или нет - как вам удобнее. Будьте готовы, что мерж конфликты будут в любом случае. Созвонитесь на первичный часовой созвон, нарисуйте арихтектуру в простом виде “название класса, что делает, на кого ссылается”. Составьте задачи из накиданной архитектуры. Распределите задачи по людям. Назначьте несколько созвонов на ближайшие дни просто для синхронизации. Можно созваниваться по 30 минут и обсуждать кто что успел сделать. Постарайтесь найти такой график, чтобы все успели внести вклад.