Курсовой проект Игра «собачья академия» База данных: Структура базы данных содержит шесть таблиц: 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: Утилита для очистки окна перед переходом к новым экранам.