Compare commits

..

No commits in common. "master" and "game" have entirely different histories.
master ... game

7 changed files with 1 additions and 333 deletions

Binary file not shown.

View file

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

Binary file not shown.

View file

@ -1,18 +0,0 @@
2024-12-11 20:11:54,023 - INFO - Ëîãèðîâàíèå èãðû íà÷àòî.
2024-12-11 20:11:54,040 - INFO - BEGIN (implicit)
2024-12-11 20:11:54,045 - INFO - SELECT anon_1.users_user_id AS anon_1_users_user_id, anon_1.users_dog_id AS anon_1_users_dog_id, anon_1.users_username AS anon_1_users_username, anon_1.users_level AS anon_1_users_level, anon_1.users_achievement AS anon_1_users_achievement, game_sessions_1.session_id AS game_sessions_1_session_id, game_sessions_1.user_id AS game_sessions_1_user_id, game_sessions_1.level AS game_sessions_1_level, game_sessions_1.score AS game_sessions_1_score, game_sessions_1.duration AS game_sessions_1_duration, game_sessions_1.steps AS game_sessions_1_steps, game_sessions_1.start_time AS game_sessions_1_start_time, game_sessions_1.end_time AS game_sessions_1_end_time, game_sessions_1.health AS game_sessions_1_health, game_sessions_1.hunger AS game_sessions_1_hunger, game_sessions_1.sleepiness AS game_sessions_1_sleepiness
FROM (SELECT users.user_id AS users_user_id, users.dog_id AS users_dog_id, users.username AS users_username, users.level AS users_level, users.achievement AS users_achievement
FROM users
WHERE users.user_id = ?
LIMIT ? OFFSET ?) AS anon_1 LEFT OUTER JOIN game_sessions AS game_sessions_1 ON anon_1.users_user_id = game_sessions_1.user_id
2024-12-11 20:11:54,045 - INFO - [generated in 0.00030s] (1, 1, 0)
2024-12-11 20:11:54,048 - INFO - ROLLBACK
2024-12-11 20:12:10,273 - INFO - Ëîãèðîâàíèå èãðû íà÷àòî.
2024-12-11 20:12:10,287 - INFO - BEGIN (implicit)
2024-12-11 20:12:10,294 - INFO - SELECT anon_1.users_user_id AS anon_1_users_user_id, anon_1.users_dog_id AS anon_1_users_dog_id, anon_1.users_username AS anon_1_users_username, anon_1.users_level AS anon_1_users_level, anon_1.users_achievement AS anon_1_users_achievement, game_sessions_1.session_id AS game_sessions_1_session_id, game_sessions_1.user_id AS game_sessions_1_user_id, game_sessions_1.level AS game_sessions_1_level, game_sessions_1.score AS game_sessions_1_score, game_sessions_1.duration AS game_sessions_1_duration, game_sessions_1.steps AS game_sessions_1_steps, game_sessions_1.start_time AS game_sessions_1_start_time, game_sessions_1.end_time AS game_sessions_1_end_time, game_sessions_1.health AS game_sessions_1_health, game_sessions_1.hunger AS game_sessions_1_hunger, game_sessions_1.sleepiness AS game_sessions_1_sleepiness
FROM (SELECT users.user_id AS users_user_id, users.dog_id AS users_dog_id, users.username AS users_username, users.level AS users_level, users.achievement AS users_achievement
FROM users
WHERE users.user_id = ?
LIMIT ? OFFSET ?) AS anon_1 LEFT OUTER JOIN game_sessions AS game_sessions_1 ON anon_1.users_user_id = game_sessions_1.user_id
2024-12-11 20:12:10,294 - INFO - [generated in 0.00040s] (1, 1, 0)
2024-12-11 20:12:10,296 - INFO - ROLLBACK

View file

@ -30,7 +30,7 @@ class DogAcademyApp:
title = tk.Label(
self.current_frame,
text="Собачья академия",
text="Dog Academy Game",
bg=BACKGROUND_COLOR,
fg=PRIMARY_COLOR,
font=BIG_FONT,