Исправления:

1. Игровой процесс
+ сохраняетсяв базу данных
+ после успешного прохождения уровня всплывает окно победы, после нажатия на кнопку "следующий уровень" появляется обратный отсчёт и начинается следующий уровень, карта обновляется.
This commit is contained in:
Xatiko 2024-12-03 19:44:29 +03:00
parent 5d34162267
commit 57f7c09541
6 changed files with 2762 additions and 54 deletions

View file

@ -1,31 +1,44 @@
import logging
from sqlalchemy import func
from database.db_events import get_user_progress
from database.db_session import get_session
from sqlalchemy.exc import SQLAlchemyError
from database.models import GameSession
def save_game_session(user_id, level, score, steps, duration=0, health=100, hunger=0, sleepiness=0):
"""Сохранение игрового прогресса."""
session = get_session()
def save_game_session(user_id, level, score, duration, steps, health, hunger, sleepiness):
"""Сохранение игрового прогресса с обновлением существующей записи."""
session = get_session() # Получаем сессию для работы с базой данных
try:
session.add(GameSession(
user_id=user_id,
level=level,
score=score,
steps=steps,
duration=duration,
health=health,
hunger=hunger,
sleepiness=sleepiness
))
session.commit()
logging.info(f"Сессия сохранена: user_id={user_id}, level={level}, score={score}")
# Проверяем, существует ли уже запись для данного пользователя и уровня
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}")
raise
session.rollback() # Откатываем изменения в случае ошибки
logging.error(f"Ошибка при сохранении прогресса: {e}")
finally:
session.close() # Закрываем сессию
def print_user_progress(user_id):