Test task
Тестовое задание следующее: Инструментарий разработки: QT SDK Описание: Приложение представляет собой типичный "игровой инвентарь".
I. Описание GUI и взаимодействия пользователя с ним.
- При запуске приложения первым открывается виджет "Главное меню". В нём две кнопки: "Новая игра" и "Выход".
- Нажатие на кнопку "Выход" приводит к закрытию программы.
- Нажатие на кнопку "Новая игра" инициирует начало новой игры.
- После нажатия на кнопку новая игра открывается доступ к виджету "Игровое поле".
- На игровом поле слева расположен виджет QTableWidget - "Инвентарь", размерностью 3х3, все ячейки таблицы инвентаря квадратной формы.
- На игровом поле справа расположен виджет предмета, содержащий предмет "Яблоко", являющийся источником для Drag'n'Drop'a в ячейки Инвентаря. Яблоки в этом виджете бесконечные, можно брать из источника и перетаскивать в инвентарь неограниченное количество раз.
- При перетаскивании яблока из источника в инвентарь оно появляется в той ячейке инвентаря, в которую осуществлено перетаскивание. Так же возможно перетаскивание предмета внутри ячеек инвентаря. Внутри инвентаря предметы перетаскиваются всей пачкой, т.е. к примеру, если в ячейке было 3 яблока, перетаскиваются все три.
- При повторном перетаскивании яблока из источника в инвентарь в ту ячейку, где уже есть яблоко, количество яблок в этой ячейке увеличивается на 1. Справа снизу от яблока в ячейке инвентаря находится цифра, указывающая на количество яблок в ячейке. К примеру, было одно яблоко, цифра 1, после перетаскивания стало два яблока, стала цифра два.
- При клике правой кнопкой мыши по ячейке инвентаря с яблоком происходит уменьшение количества яблок в ячейке. Если там было одно яблоко, то картинка яблока исчезает. Если яблок больше одного, цифра должна уменьшится на единицу.
- При исчезновении яблока по правому клику мыши воспроизводится звук откусывания яблока (подойдет любой, найти можно в интернет).
- Над виджетами "Инвентарь" и "Яблоко" находится кнопка "Главное меню". При нажатии на кнопку игровое поле блокируется и отображается виджет, описаный в п. 1. II. Описание классов программы и описание её работы.
- Класс "Предмет". Должен описывать предмет инвентаря и содержать в себе поля: Тип предмета, изображение предмета (путь к изображению в ресурсах).
- Класс "Инвентарь". Должен описывать инвентарь и содержать поля размер (количество ячеек), а так же поля, описывающие, в какой ячейке сколько находится предметов и каких предметов.
- Класс "База данных". Необходим для управления базой данных. Подключается к базе данных и выполняет запросы. Использовать QSqlDatabase.
- База данных SQLite. Содержит в себе таблицы "Инвентарь" и "Предмет", которые хранят данные указанных выше классов. Здесь должны отражаться названия предметов, нажождение их в каких либо ячейках инвентаря. Конкретная организация таблиц на ваше усмотрение.
- Другие классы и объекты, нужные вам, на ваше усмотрение. Общие требования: Использовать классы и фичи Qt: containers, signals and slots, widgets, sockets и т.д. STL использовать можно, но желательно только в тех ситуациях, когда по-другому нельзя. Хранить количество предметов в инвентаре и описание предметов в базе данных SQLite. Реализовать класс инвентаря и класс, описывающий предмет (т.е. в нашем примере это было яблоко). Обязательно наличие исходного кода. Обязательно краткое описание методов. Задание призвано проверить уровень понимания ООП, степень владения Qt, знание паттернов проектирования, навыки работы с БД.

