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

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

Binary file not shown.

View file

@ -323,5 +323,19 @@ def update_question(question_id, text, helpful_info):
except SQLAlchemyError as e:
session.rollback()
return False, f"Ошибка при обновлении: {e}"
finally:
session.close()
def update_user_level(user_id, new_level):
"""Обновляет уровень пользователя в базе данных."""
session = get_session()
try:
user = session.query(Users).filter_by(user_id=user_id).first()
if user and user.level < new_level:
user.level = new_level
session.commit()
except Exception as e:
session.rollback()
logging.error(f"Ошибка при обновлении уровня пользователя: {e}")
finally:
session.close()

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):

View file

@ -68,6 +68,7 @@ class GameSession(Base):
level = Column(Integer, nullable=False)
score = Column(Integer, default=0)
duration = Column(Integer) # Время игры в секундах
steps = Column(Integer, default=0) # Количество шагов
start_time = Column(DateTime, default=func.now())
end_time = Column(DateTime, nullable=True)
health = Column(Integer, default=100) # Здоровье