Платформа Android/iOS. Unity 2021+
Задача
Кандидату предлагается сделать упрощенный прототип кликера, в котором игрок покупает и улучшает бизнесы, генерирующие доход.
Баланс игрока
Отображается вверху экрана и не может опуститься ниже 0$.
Бизнесы
Каждый бизнес изображается отдельным элементом в списке на экране и имеет:
- Название
- Текущий уровень
Если бизнес не куплен, то там отображается 0. 3. Текущий доход
- Прогрес сдохода Бар заполняется от 0% до 100% за время “Задержка дохода” из конфига ниже. Как только доходит до 100%, значение текущего дохода зачисляется в Баланс, а прогресс начинает копиться заново с 0%. Значение бара должно обновляться каждый кадр (для плавности).
- Кнопка повышения уровня Содержит цену повышения уровня. При нажатии и при Баланс >= цена, увеличивает уровень на 1.
- Кнопка улучшения 1 При нажатии и при Баланс >= цена, улучшение покупается.
- Кнопка улучшения 2 При нажатии и при Баланс >= цена, улучшение покупается.
Улучшения бизнесов
Каждое улучшение уникально для каждого бизнеса. Каждое можно купить только 1 раз. Каждое обладает:
-
Название
-
Цена покупки
После покупки, заменяется на текст “Куплено”.
-
Множитель дохода (в процентах)
Конфиг
Доход = 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% |
Важные моменты
- В списке доступно 5 бизнесов. Первый бизнес изначально куплен, остальные нет. Чтобы купить бизнес, игрок должен купить его первый уровень.
- Все текстовые поля изменяются в момент изменения значений и должны содержать актуальную информацию (например, цена покупки уровня изменяется после покупки и тд).
- Конфиг (или конфиги) должен быть реализован через ScriptableObject для удобства геймдизайнера и чтобы не лазить по сцене в случае изменения.
- Не делать хардкода!
Требования к коду
- Писать код по SOLID.
- Не забывать о подходах: YAGNI, DRY, KISS
- Никаких неиспользуемых классов в проекте оставаться не должно.
- Придерживаться единого код-стайла.
Залить код на git, предоставить ссылку с публичным доступом. В первую очередь оценивается архитектура, соблюдение код-стайла, отсутствие костылей (даже если они быстро исправляются), работоспособность прототипа.
В дополнительных ассетах (спрайты, звуки) нет нужды, они никак не повлияют на оценку. Можно добавлять по желанию.
💡 **Подсказка по архитектуре: один из множества вариантов реалзиции**Одна система представляет из себя несколько классов. Классы делятся на Model, View, Controller. Каждая часть - Model, View, Controller является MonoBehaviour для простоты прокидывания зависимостей.
Model - содержит только состояние: поля, обозначающие текущую прокачку, баланс игрока итд.
Controller - содержит только логику и ссылку на соответствующую ему модель. Может менять данные в модели.
View - отображает данные из модели, имеет ссылку на модель и на контроллер. Может вызывать методы на контроллере (например - нажатие кнопки вызывает метод покупки бизнеса)
Системы:
- Система Дохода: отображение текущего баланса игрока в верхней части экрана и его обновление после зачисления дохода от бизнеса.
- Система Бизнеса: представление каждого бизнеса как отдельного элемента списка на экране и отображение его текущего уровня, дохода и прогресса сбора дохода. Необходимо также реализовать функционал повышения уровня и покупки улучшений. Генерация списка бизнесов по заданному конфигу.
- Система Улучшений: каждое улучшение должно быть уникальным для каждого бизнеса и обладать своей ценой покупки и множителем дохода. Необходимо также учитывать, что каждое улучшение может быть куплено только один раз.
- Система Конфига: определение формул для расчета и цены повышения уровня бизнеса на основе конфига. Загрузка файлов конфига, их хранение и предоставление доступа для других систем.