- Нужно создать игру с игровым полем 3х3, состоящим из карточек.
- В игре должно быть 3 сцены: Menu (содержит кнопку “старт” и последний рекорд), Game (основная сцена с игровыми взаимодействиями) и GameOver (содержит достигнутый уровень сложности и количество очков, набранных за игровую сессию, и кнопку “рестарт”, перезапускающий сессию).
- Есть 3 типа карточек. Одна из них - карта игрока (обведена желтым), может быть на поле только в единственном экземпляре. Два других типа - зеленая карточка и красная. На каждой карточке посередине размещено число. На карточке игрока это число выражает его “здоровье”, на зеленой карточке - то, сколько здоровья прибавится, на красной - сколько убавится.
- Карта игрока может перемещаться вверх-вниз-влево-вправо в рамках игрового поля с помощью клика левой кнопки мыши по соседним картам. Каждый клик по соседней карте прибавляет/убавляет ее значение к здоровью игрока, уничтожает эту карту и перемещает карту игрока на ее место. На предыдущем месте, где была карта игрока, возникает случайная новая карта.
- Когда здоровье игрока становится меньше или равно нулю, игра заканчивается.
- На игровой сцене размещен счетчик очков и уровень сложности. Каждое перемещение карты игрока прибавляет 1 к счетчику очков. Каждые 10 очков на 1 поднимается уровень сложности.
- Уровень сложности влияет на рандомизацию выпадающих карт. Вероятность выпадения красной карты = (Текущий уровень сложности) * 0.1. При этом максимальная вероятность выпадения красной карты не может быть больше 50%, вне зависимости от уровня сложности. Значения выпадающих карт - всегда целые числа (от 1). Уровень сложности влияет на допустимый диапазон значений рандомизации (Диапазон = [0..Текущий уровень сложности]). Конечное значение карты: 1 + Случайное число из Диапазона.
- Любые перемещения на игровом поле совершаются с помощью базовых команд DOTween (DOMove для перемещения и DOScale при уничтожении/создании карты), и реализуются через IEnumerator. Анимации должны работать корректно, карты не должны “слетать” со своих координат. Рекорд игрока должен сохраняться после выхода из приложения. Можно использовать JSON, либо другой работающий способ. Главное правило - не использовать для этого сторонних ассетов.
Задание реализовано в полном объёме.
- Машина состояний игры: загрузка игрового прогресса -> загрузка сцены с меню -> загрузка игрового уровня -> состояние игровго цикла -> состояние конца игры.
- Присутствует возможность для геймдизайнера настройки игрового поля: на каких местах и какие карточки должны появляться. Также можно настроить количество очков, которое будет прибавляться за одно передвижение карточки игрока (по умолчанию 1, как в задании выше) и количество очков, необходимое для перехода на следующий уровень сложности (по умолчанию 10, как в задании выше).
- Есть возможность гибкой настройки изначальных значений всех карточек, дабы дать возможность сделать игровой уровень сложнее или проще.
- Реализована игровая логика рандомизации выпадающих карт и генерирующихся значений этих карт, а также логика работы с уровнем сложности.
- Для всех игровых анимаций использовался плагин DOTween, а также применялись корутины.
Zenject, DOTween, Fantasy Wooden GUI Free