Сделайте простую игру "Крестики-нолики", в которой есть следующий функционал:
- главное меню
- экран настроек
- экран загрузки
- диалоговые окна (например, запрос подтверждения на выход из игры)
- переход к основному геймплею и выход из него
Суть задания состоит в том, чтобы на примере простой игры реализовать базовые функции приложения так, чтобы ими было удобно пользоваться и легко расширять — добавлять новые меню, новые диалоговые окна, параметры игры и т.д. Постарайтесь заложить широкий фундамент там, где это возможно, продемонстрируйте архитектурные решения. Нам интересно, как Вы делаете игры, как управляете состоянием приложения, как подходите к реализации UI. Используйте Unity версии 2019.4.12 f1.
При запуске приложения пользователь должен увидеть экран загрузки. Экран загрузки должен включать прогресс-бар и текст с сообщением о том, что происходит во время загрузки (например, "Загружается уровень"). Реализуйте небольшой API, позволяющий отображать экран загрузки из любой части приложения, обновлять прогресс и текст сообщения в соответствии с тем, что происходит в ходе загрузки. Например, переход из главного меню в бой, выход из боя и запуск приложения должны единообразно вызывать показ экрана загрузки, но слегка кастомизировать его под каждый конкретный случай. Поскольку для крестиков-ноликов длительных загрузок не ожидается, сделайте эмуляцию загрузки на пару секунд.
Главное меню должно содержать кнопки для перехода к основному геймплею (с показом экрана загрузки) и в меню настроек. Постарайтесь сделать приятное визуальное оформление на ваш вкус. При нажатии кнопки "Назад" на устройстве (или Escape на клавиатуре) должен появляться диалог с подтверждением выхода. Также на главном экране должен отображаться рейтинг игрока (см. Крестики-нолики).
Меню настроек должно быть реализовано как окно, которое можно отобразить из любой части приложения, даже из основного геймплея. Хорошо, если будет продуман некий единый общий способ работы с любыми окнами, которые было бы легко добавлять в приложение и показывать из кода. В качестве настроек реализуйте настройки громкости для музыки, сделайте так, чтобы они сохранялись между запусками приложения.
Сделайте возможность вызывать диалоговые окна — вопросы/уведомления, ожидающие ввода игрока. Разработайте простой API для показа произвольных окон с разной версткой (например, иконка + текст, текст + поле ввода) с разными вариантами ввода (да/нет, отмена, крестик итд), список фич определите самостоятельно.
Организуйте переход из главного меню в core-геймплей крестиков-ноликов, предусмотрите возможность передачи параметров, например, имена игроков, номер уровня, размер поля, длину серии для победы. При завершении игры нужно вернуть в главное меню результат игры (имя победителя/время) и показать его на экране. Добавьте возможность ставить игру на паузу и реализуйте простое меню паузы с кнопками показа настроек и выхода в меню. При нажатии на кнопку выхода должен выскакивать диалог подтверждения.
Реализуйте традиционную игру, игроки ходят по очереди, ставят метки на поле, кто первый сделает непрерывную серию определенной длины, тот побеждает. Кто ходит первым определяется случайным образом (процесс выбора можете визуализировать на свое усмотрение), против игрока играет простейший бот, его поведение придумайте самостоятельно, необязательно делать его сложным, в крайнем случае пусть делает случайный ход. Отобразите на экране имена игроков и время в игре. За победу игрок получает очки рейтинга (например, +100) — по сути счетчик побед. За поражение очки отнимаются. Визуализируйте процесс начисления очков перед выходом из боя в главное меню, например, пусть экран затеняется на пару секунд и отображается надпись "Победа/Поражение" и изменение счетчика. Количество очков должно сохраняться между перезапусками игры. Задание творческое, если вам захочется добавить что-то от себя, мы будем рады :) Например, можете добавить раунды, чтобы победитель определялся после нескольких раундов, сделать простые анимации и т.д. Загрузите выполненное задание в Git-репозиторий, пожалуйста, убедитесь, что оно доступно для скачивания. Удачи!