DogAcademyGame/database/info/GameSessions_table.py
Xatiko 57f7c09541 Исправления:
1. Игровой процесс
+ сохраняетсяв базу данных
+ после успешного прохождения уровня всплывает окно победы, после нажатия на кнопку "следующий уровень" появляется обратный отсчёт и начинается следующий уровень, карта обновляется.
2024-12-03 19:44:29 +03:00

61 lines
2.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import logging
from database.db_events import get_user_progress
from database.db_session import get_session
from database.models import GameSession
def save_game_session(user_id, level, score, duration, steps, health, hunger, sleepiness):
"""Сохранение игрового прогресса с обновлением существующей записи."""
session = get_session() # Получаем сессию для работы с базой данных
try:
# Проверяем, существует ли уже запись для данного пользователя и уровня
existing_session = session.query(GameSession).filter_by(user_id=user_id, level=level).first()
if existing_session:
logging.info(f"Обновление прогресса для user_id={user_id}, level={level}.")
existing_session.score = score
existing_session.duration = duration
existing_session.steps = steps
existing_session.health = health
existing_session.hunger = hunger
existing_session.sleepiness = sleepiness
else:
# Если записи нет, создаем новую
new_session = GameSession(
user_id=user_id,
level=level,
score=score,
duration=duration,
steps=steps,
health=health,
hunger=hunger,
sleepiness=sleepiness
)
session.add(new_session) # Добавляем в сессию
session.commit() # Сохраняем изменения в базе данных
logging.info(f"Прогресс успешно сохранён: user_id={user_id}, level={level}, score={score}")
except Exception as e:
session.rollback() # Откатываем изменения в случае ошибки
logging.error(f"Ошибка при сохранении прогресса: {e}")
finally:
session.close() # Закрываем сессию
def print_user_progress(user_id):
"""
Печать прогресса пользователя из таблицы GameSessions.
:param user_id: ID пользователя
"""
if not user_id:
logging.error("user_id отсутствует. Невозможно получить прогресс.")
return
progress = get_user_progress(user_id)
if not progress:
print(f"У пользователя с ID {user_id} нет сохраненного прогресса.")
return
print(f"Прогресс пользователя (user_id={user_id}):")
for session in progress:
print(f"- Уровень: {session.level}, Очки: {session.score}, Время: {session.duration} сек")