MovieQuiz — интерактивное iOS-приложение, которое проверяет знания фильмов из списка IMDb Top-250.
Пользователю предлагается пройти викторину из 10 вопросов, получить мгновенную обратную связь по каждому ответу и отслеживать свою статистику, чтобы улучшать результаты.
- Макет в Figma: https://www.figma.com/design/wjLUZUID3eizsbYd616EUD/YP-Quiz
- IMDb API: https://tv-api.com/api#Top250Movies-header
- Экран регистрации — перед началом игры пользователь вводит имя, которое проходит валидацию и сохраняется локально в UserDefaults.
- Викторина — каждый раунд состоит из 10 вопросов по фильмам из списка IMDb Top-250.
- Вопросы формата "Да / Нет" — например: «Рейтинг этого фильма выше 6?».
- Мгновенная обратная связь — после ответа рамка постера окрашивается в зеленый или красный цвет в зависимости от правильности ответа.
- Автоматический переход — следующий вопрос отображается через одну секунду после ответа.
- Статистика — после завершения раунда отображаются:
- результат текущей игры;
- общее количество сыгранных викторин;
- лучший результат с датой и временем;
- средний процент правильных ответов.
- Новая игра — возможность сразу начать следующий раунд.
- Обработка ошибок — при проблемах с загрузкой данных отображается сообщение с возможностью повторить запрос.
- Swift
- UIKit
- MVP (Model–View–Presenter)
- URLSession — сетевые запросы
- REST API (IMDb API)
- UserDefaults — хранение пользовательских данных и статистики
- Unit Tests — тестирование бизнес-логики
- Splash Screen — экран запуска приложения
Проект реализован по архитектуре MVP (Model–View–Presenter).
- Model — модели вопросов, профиля пользователя и статистики.
- View — экраны на UIKit, отображающие данные и передающие действия пользователя презентеру.
- Presenter — содержит бизнес-логику приложения: управление вопросами, проверку ответов, расчет статистики и подготовку данных для отображения.
Такое разделение позволяет сделать бизнес-логику независимой от UIKit и значительно упрощает тестирование.
Проект включает Unit Tests, покрывающие основную бизнес-логику приложения:
- загрузку и подготовку вопросов;
- обработку ответов пользователя;
- подсчет очков;
- обновление статистики (лучший результат, средняя точность);
- управление состоянием викторины;
- обработку сетевых ошибок.
Для изоляции бизнес-логики используются Mock-сервисы, благодаря чему тесты остаются независимыми и воспроизводимыми.
- Splash Screen отображается при запуске приложения.
- Валидация регистрации предотвращает переход к игре при некорректном вводе имени.
- UserDefaults используется для хранения имени пользователя и статистики между запусками приложения.
- Автоматический переход между вопросами реализован с помощью таймера с задержкой в одну секунду. Во время ожидания интерфейс блокируется, исключая повторные нажатия.
- Визуальная обратная связь позволяет мгновенно понять, был ли ответ правильным.
- Хранение статистики включает:
- количество сыгранных викторин;
- лучший результат с датой;
- средний процент правильных ответов.
- Обработка ошибок обеспечивает корректное отображение сообщений и возможность повторной загрузки данных при отсутствии сети или ошибке API.
git clone https://github.com/rfhfv/MovieQuiz.git
cd MovieQuiz
open MovieQuiz.xcodeproj