Курсовой проект
Игра «собачья академия»

База данных:
Структура базы данных содержит шесть таблиц: Auth, Users, Dogs, Questions, GameSession, и Notifications.
1. Таблица Auth
Назначение: Хранит данные для аутентификации пользователей.
Поля:
user_id (PK) – первичный ключ, связывает пользователя с таблицей Users.
login (String, уникальный) – логин пользователя.
password (String) – хэш пароля пользователя.
Связи:
Один к одному с таблицей Users (через user_id).
2. Таблица Users
Назначение: Основная таблица с профилями пользователей.
Поля:
user_id (PK, FK) – первичный ключ, внешний ключ из Auth.
dog_id (FK) – внешний ключ, связывает с таблицей Dogs.
username (String) – имя пользователя.
level (Integer, по умолчанию 1) – текущий уровень пользователя.
achievement (Text) – достижения пользователя.
Связи:
Один к одному с Auth.
Один к одному с Dogs (через dog_id).
Один ко многим с GameSession.
Один ко многим с Notifications.
3. Таблица Dogs
Назначение: Хранит данные о собаках.
Поля:
dog_id (PK) – первичный ключ.
breed (String) – порода собаки.
characteristics (Text) – характеристики.
behavior (Text) – описание поведения.
care_info (Text) – информация об уходе.
admin_comments (Text) – комментарии администратора.
Связи:
Один ко многим с Users.
Один ко многим с Questions.
4. Таблица Questions
Назначение: Хранит вопросы, связанные с уходом за собаками.
Поля:
question_id (PK) – первичный ключ.
dog_id (FK) – внешний ключ, связывает с таблицей Dogs.
question_text (Text, обязательное) – текст вопроса.
image_url (String) – ссылка на изображение.
helpful_info (Text) – полезная информация для ответа.
incorrect_attempts (Integer, по умолчанию 0) – количество неверных попыток.
Связи:
Один ко многим с Dogs.
5. Таблица GameSession
Назначение: Хранит данные о сессиях пользователей в игре.
Поля:
session_id (PK) – первичный ключ.
user_id (FK) – внешний ключ из Users.
level (Integer, обязательное) – уровень игры.
score (Integer, по умолчанию 0) – очки, набранные за сессию.
duration (Integer) – продолжительность сессии (в секундах).
steps (Integer, по умолчанию 0) – количество шагов.
start_time (DateTime) – время начала сессии.
end_time (DateTime) – время окончания сессии.
health (Integer, по умолчанию 100) – здоровье в игре.
hunger (Integer, по умолчанию 0) – показатель голода.
sleepiness (Integer, по умолчанию 0) – показатель сонливости.
Уникальные ограничения:
user_id и level – уникальная комбинация.
Связи:
Один ко многим с Users. 
6. Таблица Notifications
Назначение: Хранит уведомления для пользователей.
Поля:
notification_id (PK) – первичный ключ.
user_id (FK) – внешний ключ из Users.
message (Text, обязательное) – текст уведомления.
timestamp (DateTime) – время отправки уведомления (по умолчанию текущее время).
is_read (Boolean, по умолчанию False) – прочитано или нет.
Связи:
Один ко многим с Users.

Главное окно. 
Главное окно представляет собой развилку, где пользователь выбирает, нажимая на нужную кнопку, авторизироваться или зарегистрироваться для дальнейшего взаимодействия с программным модулем.
кнопки «Войти», «Зарегистрироваться»
Название игры «Dog Academy Game»

Окно Регистрация/Авторизация
Регистрация
Окно регистрации состоит из текстовых блоков для ввода данных, текста и кнопок.
Все объекты располагаются по центру. Интерфейс простой и понятный. 
Текст и текстовые блоки для ввода данных:
Логин [   ]
Пароль [   ]
Никнейм [   ]
Кнопки:
Зарегистрироваться 
Вернуться на главную

Ограничения: нельзя зарегистрировать одинаковые логины
Авторизация 
Окно авторизации состоит из текстовых блоков для ввода данных, текста и кнопок.  Все объекты располагаются по центру. Интерфейс простой и понятный. 
Текст и текстовые блоки для ввода данных:
Логин [   ]
Пароль [   ]
Кнопки:
Показать пароль
Войти
Вернуться на главную
Авторизация для администратора имеет тот же интерфейс. Прописан триггер-условие для авторизации администратора. В файле 'config.py' указаны логин и пароль.
Ограничения: ошибка при создании профиля с уже существующим логином.
При создании пользователя создаётся запись в базе данных в таблице Auth [user_id: “ “; login: “ “; password: ” “], данные из которой дублируются в таблицу Users [user_id: “ “; …]. В таблицу Users также фиксируется [… ; username: “ “; …].
При создании пользователя и авторизации заполняется лог-файл game.log для фиксации пользовательских действий.

Окно Админ-панель
Доступ: администратор
Гибкий интерфейс: поддержка кнопок, таблиц и модальных окон для управления данными.
1. Навигация по основным модулям
В верхней панели присутствуют кнопки для перехода между основными функциями:
окно Логирование: отображение логов.

окно Статистика: просмотр статистических данных.

окно Уведомления: создание и управление пользовательскими оповещениями (в разработке).

окно Безопасность: управление доступом, настройка паролей (в разработке).

окно Открытие сессии пользователя: запуск интерфейса для работы от имени пользователя.
Если пользователь найден:
    Окно авторизации закрывается.
Если логин не найден, выводится сообщение об ошибке

2. Бургер-меню
Скрытое боковое меню предоставляет доступ к более детализированным функциям. Меню содержит несколько секций:
Работа с базой данных
окно Редактирование пользователей: просмотр, редактирование и добавление пользователей.
окно Управление вопросами: управление вопросами (добавление, просмотр, редактирование).
окно Управление собаками: управление информацией о собаках.
окно Просмотр таблиц: одновременный вывод всех данных (пользователи, вопросы, собаки).
Управление игровым контентом
Создание уровней и настройка параметров игровых объектов (пока в разработке).
Управление интерфейсом
Добавление подсказок и помощь в интерфейсе (в разработке).
Работа с базой знаний
Добавление, редактирование, удаление и просмотр записей базы знаний.
Генерация вопросов на основе базы знаний (в разработке).
3. Управление данными
Пользователи
Просмотр списка пользователей в таблице с колонками: ID, логин, имя.
Возможность добавления нового пользователя через всплывающее окно с полями для логина, пароля и имени.
Вопросы
Просмотр списка вопросов с колонками: ID, текст вопроса, полезная информация.
Добавление новых вопросов с указанием связанных данных (например, ID собаки и изображения).
Собаки
Просмотр списка собак с колонками: ID, порода, характеристики.
Добавление новой собаки с подробной информацией: порода, характеристики, поведение, уход, комментарии администратора.

Выход из панели через меню.
Эта панель предоставляет базовые функции для администрирования и легко расширяется новыми модулями.

окно Главное меню.
Главное меню приложения "Собачья академия" организовано следующим образом:
Верхняя панель
окно Профиль: Кнопка для перехода к экрану профиля пользователя.
Магазин: Кнопка, которая пока неактивна.
окно База знаний: Кнопка для перехода к экрану базы знаний.
Центральный экран
Изображения собак:
Изображения размещены по кругу вокруг центра экрана, создавая визуально приятную композицию.
Каждая собака представлена отдельным изображением, адаптированным под размер 100x100 пикселей.
Центр круга находится в середине окна приложения (960x540 пикселей), радиус круга — 300 пикселей.
Кнопка "Играть":
Это крупная круглая кнопка в центре экрана.
Радиус кнопки составляет 100 пикселей.
Зеленый цвет кнопки и белый текст "Играть" привлекают внимание пользователя.
Клик по кнопке запускает игровой интерфейс.
Нижняя панель
Кнопка "Выйти":
Размещена в правом нижнем углу.
Позволяет выйти из приложения с подтверждением.
Дизайн и взаимодействие
Цветовая схема:
Фон экрана — светло-серый (#E5E5E5).
Кнопки на верхней панели — темно-серые (#555555) с белым текстом.
Кнопка "Играть" имеет зеленый цвет (#4CAF50).
Шрифты: Используются шрифты Arial для текста (основной — 12 пунктов, крупный текст — 24 пункта).
Особенности реализации
Неактивные кнопки (Магазин, База знаний) отображаются, но пока недоступны для взаимодействия.
Все элементы размещены с учетом адаптации к экрану 1920x1080 пикселей.
Клик по изображению собаки в меню не активирует никаких событий, служит исключительно декоративным элементом.

окно База знаний
Дизайн интерфейса
Цветовая схема:
Фон базы знаний — светло-серый (#f0f0f0), создающий нейтральную и спокойную атмосферу.
Шрифты:
Заголовки и текстовые блоки используют шрифт Arial.
Размер шрифта:
Заголовок породы — 20 пунктов.
Описание характеристик, поведения, ухода и комментариев — 14 пунктов.
Оформление:
Простая структура с акцентом на изображение собаки и информацию о породе.
Чёткое разделение текста на логические блоки: характеристики, поведение, уход, комментарии.
Содержимое базы знаний
Заголовок:
Название текущей породы собак.
Формат: [Название породы].
Изображение породы:
Показывает фотографию текущей породы.
Размер изображения: 200×200 пикселей.
Информация о породе:
Характеристики:
Скорость, выносливость и уникальное умение собаки.
Поведение:
Краткое описание характера и привычек породы.
Уход:
Советы по уходу за шерстью, когтями, зубами и другие важные рекомендации.
Комментарии администратора:
Специальные заметки, например, кому подходит эта порода или на что обратить внимание.
Навигация
Кнопки "Предыдущая" и "Следующая":
Размещены в нижней части интерфейса.
Позволяют переключаться между породами.
Обновляют заголовок, изображение и информацию для текущей породы.
Кнопка "Назад":
Размещена рядом с кнопками навигации.
Возвращает пользователя в главное меню.
Очищает текущий экран и вызывает метод show_user_dashboard основного интерфейса.

окно Профиль пользователя.
Дизайн интерфейса:
Цветовая схема:
Фон профиля — светлый розовый (#f8e1e1), создающий теплую и дружелюбную атмосферу.
Шрифты:
Название профиля и статистика выполнены с использованием шрифта Comic Sans MS.
Размер шрифта: крупный заголовок — 30 пунктов, текст статистики — 20 пунктов.
Оформление:
Простая структура, основное внимание уделяется отображению имени пользователя и его достижений.
Содержимое профиля:
Заголовок:
Отображается имя пользователя (или "Неизвестный пользователь", если данные не найдены в базе).
Формат: "Профиль: [имя пользователя]".
Статистика:
Количество пройденных уровней:
Считается на основе уникальных уровней, в которых пользователь набрал положительные очки.
Собранные косточки:
Суммарный счет за все пройденные уровни.
Пример текста:
Пройдено уровней: 5  
Собрано косточек: 120  
Навигация:
Кнопка "Назад":
Размещена в нижней части экрана.
Клик возвращает пользователя в главное меню.
Выполняет очищение текущего экрана и вызывает метод show_user_dashboard основного интерфейса.
Особенности реализации:
Обновление данных:
При открытии профиля происходит запрос в базу данных для получения актуальной информации о пользователе.
Если данные отсутствуют, используются значения по умолчанию:
Имя пользователя: "Неизвестный пользователь"
Пройденные уровни: 0
Собранные косточки: 0
Простота структуры:
Экран сосредоточен только на основных данных, без лишних элементов, что делает интерфейс легким и понятным.

окно  Игровой процесс.
Цель игры:
Игрок управляет собакой, которая должна собирать кости на сеточной карте.
Уровни завершаются, когда игрок собирает заданное количество косточек.
Действия игрока:
окно Выбор породы собаки.
окно Выбор уровня из доступных.
окно игрового процесса - карта-сетка
Управление движением собаки с помощью клавиш W, A, S, D.
Сложность:
На каждом уровне количество косточек и их сложность растут, основанные на геометрической прогрессии.
Повторное прохождение:
Игрок может заново пройти уже завершённые уровни.
Пауза:
Кнопка Escape открывает меню паузы, где можно продолжить игру или вернуться в главное меню.
Интерфейс:
Главное меню:
Возможность вернуться в главное меню из игры или экранов выбора.
Экран выбора:
Выбор собаки: Игрок видит список пород с изображениями и выбирает свою.
Выбор уровня: Доступные уровни подсвечены, заблокированные - затемнены.
Игровое поле:
Сеточная карта (60px на клетку).
Собаки и косточки отображаются в виде изображений.
Панель прогресса показывает количество собранных косточек.
окно победы:
Поздравительное сообщение, количество собранных косточек и кнопки для перехода на следующий уровень, повторного прохождения или выхода в меню. 
Функционал
Уровни:
Генерация косточек происходит случайным образом, избегая дублирования и начальной позиции собаки.
Возможность перемещаться между уровнями, сохраняя прогресс.
Сохранение данных:
Прогресс сохраняется в базу данных через функцию save_game_session, включая собранные косточки, шаги и время.
Повторное прохождение:
Игрок может перепройти завершённый уровень для улучшения результата.
окно Пауза и возобновление:
Сохранение прогресса перед выходом или продолжением игры после паузы.
Отображение прогресса:
Количество собранных косточек отображается в реальном времени.
Используемые инструменты
Библиотеки:
tkinter: Для создания графического интерфейса.
Pillow (PIL): Для работы с изображениями.
logging: Для логирования ошибок и событий.
random: Для случайного размещения косточек.
Взаимодействие с базой данных:
Модули get_user_by_id и get_user_progress предоставляют данные о пользователе и прогрессе.
Функция save_game_session сохраняет результаты в таблицу GameSessions.
Конфигурации:
Используются внешние настройки для изображений (DOG_CHARACTERS, DONE, BONE) и фона (BACKGROUND_GAME).
Архитектура:
GameUI: Основной класс, управляющий всеми элементами интерфейса и игровым процессом.
clear_frame: Утилита для очистки окна перед переходом к новым экранам.
