Исправления:
1. Игровой процесс + сохраняетсяв базу данных + после успешного прохождения уровня всплывает окно победы, после нажатия на кнопку "следующий уровень" появляется обратный отсчёт и начинается следующий уровень, карта обновляется.
This commit is contained in:
parent
5d34162267
commit
57f7c09541
6 changed files with 2762 additions and 54 deletions
Binary file not shown.
|
|
@ -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()
|
||||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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) # Здоровье
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue