commit
e6bbe22ce5
7 changed files with 333 additions and 1 deletions
BIN
Docs/certificate-7243346.pdf
Normal file
BIN
Docs/certificate-7243346.pdf
Normal file
Binary file not shown.
BIN
Docs/ЗАДАНИЕ НА КУРСОВОЙ ПРОЕКТ.docx
Normal file
BIN
Docs/ЗАДАНИЕ НА КУРСОВОЙ ПРОЕКТ.docx
Normal file
Binary file not shown.
BIN
Docs/КУРСОВОЙ ПРОЕКТ Шишкина 316ИС.docx
Normal file
BIN
Docs/КУРСОВОЙ ПРОЕКТ Шишкина 316ИС.docx
Normal file
Binary file not shown.
314
Docs/Курсовой проект.txt
Normal file
314
Docs/Курсовой проект.txt
Normal file
|
|
@ -0,0 +1,314 @@
|
|||
Курсовой проект
|
||||
Игра «собачья академия»
|
||||
|
||||
База данных:
|
||||
Структура базы данных содержит шесть таблиц: 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: Утилита для очистки окна перед переходом к новым экранам.
|
||||
BIN
Docs/ТИТУЛЬНИК.docx
Normal file
BIN
Docs/ТИТУЛЬНИК.docx
Normal file
Binary file not shown.
|
|
@ -0,0 +1,18 @@
|
|||
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
|
||||
|
|
@ -30,7 +30,7 @@ class DogAcademyApp:
|
|||
|
||||
title = tk.Label(
|
||||
self.current_frame,
|
||||
text="Dog Academy Game",
|
||||
text="Собачья академия",
|
||||
bg=BACKGROUND_COLOR,
|
||||
fg=PRIMARY_COLOR,
|
||||
font=BIG_FONT,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue