1. Игровой процесс + сохраняетсяв базу данных + после успешного прохождения уровня всплывает окно победы, после нажатия на кнопку "следующий уровень" появляется обратный отсчёт и начинается следующий уровень, карта обновляется.
61 lines
2.8 KiB
Python
61 lines
2.8 KiB
Python
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} сек")
|