Изменён пользовательский интерфейс main_menu.py, game_ui.py. Настроен вызов функций для запуска игрового процесса: после нажатия кнопки 'играть' открывается выбор собаки, а затем выбор уровня. Обновлена структура базы данных. Удалены не нужные файлы для проекта.
This commit is contained in:
parent
989a9056e7
commit
c08cf51998
46 changed files with 804 additions and 111 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,12 +1,18 @@
|
|||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import joinedload
|
||||
from database.db_session import get_session
|
||||
from database.models import Auth, Notifications, Users
|
||||
from database.models import Auth, Notifications, Users, GameSession, Dogs, Questions
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
|
||||
def create_user(login, password):
|
||||
def create_user(login, password, username):
|
||||
"""Создание нового пользователя в базе данных."""
|
||||
session = get_session()
|
||||
try:
|
||||
new_user = Auth(login=login, password=password)
|
||||
new_user_auth = Auth(login=login, password=password)
|
||||
session.add(new_user_auth)
|
||||
session.commit()
|
||||
|
||||
new_user = Users(username=username, auth=new_user_auth)
|
||||
session.add(new_user)
|
||||
session.commit()
|
||||
except SQLAlchemyError as e:
|
||||
|
|
@ -20,9 +26,111 @@ def check_user(login, password):
|
|||
session = get_session()
|
||||
try:
|
||||
user = session.query(Auth).filter_by(login=login, password=password).first()
|
||||
return user is not None
|
||||
if user:
|
||||
return user.user_id
|
||||
return None
|
||||
except SQLAlchemyError as e:
|
||||
print(f"Ошибка при проверке пользователя: {e}")
|
||||
return False
|
||||
return None
|
||||
finally:
|
||||
session.close()
|
||||
session.close()
|
||||
|
||||
def save_progress(user_id, level, score, duration, health, hunger, sleepiness):
|
||||
"""Сохраняет прогресс пользователя в базу данных."""
|
||||
session = get_session()
|
||||
try:
|
||||
session_data = GameSession(
|
||||
user_id=user_id,
|
||||
level=level,
|
||||
score=score,
|
||||
duration=duration,
|
||||
health=health,
|
||||
hunger=hunger,
|
||||
sleepiness=sleepiness,
|
||||
end_time=func.now()
|
||||
)
|
||||
session.add(session_data)
|
||||
session.commit()
|
||||
except SQLAlchemyError as e:
|
||||
print(f"Ошибка при сохранении прогресса: {e}")
|
||||
session.rollback()
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
def get_user_progress(user_id):
|
||||
"""Получение прогресса пользователя по его ID."""
|
||||
session = get_session()
|
||||
try:
|
||||
progress = session.query(GameSession).filter_by(user_id=user_id).all()
|
||||
return progress
|
||||
except SQLAlchemyError as e:
|
||||
print(f"Ошибка при получении прогресса: {e}")
|
||||
return []
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
def create_notification(user_id, message):
|
||||
"""Создание уведомления для пользователя."""
|
||||
session = get_session()
|
||||
try:
|
||||
notification = Notifications(user_id=user_id, message=message)
|
||||
session.add(notification)
|
||||
session.commit()
|
||||
except SQLAlchemyError as e:
|
||||
print(f"Ошибка при создании уведомления: {e}")
|
||||
session.rollback()
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
def get_notifications(user_id):
|
||||
"""Получение уведомлений для пользователя."""
|
||||
session = get_session()
|
||||
try:
|
||||
notifications = session.query(Notifications).filter_by(user_id=user_id).all()
|
||||
return notifications
|
||||
except SQLAlchemyError as e:
|
||||
print(f"Ошибка при получении уведомлений: {e}")
|
||||
return []
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
def get_knowledge_base():
|
||||
"""Получение базы знаний (статей о собаках)."""
|
||||
session = get_session()
|
||||
try:
|
||||
dogs = session.query(Dogs).all()
|
||||
return dogs # Список объектов Dogs
|
||||
except SQLAlchemyError as e:
|
||||
print(f"Ошибка при получении базы знаний: {e}")
|
||||
return []
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
def get_dogs():
|
||||
"""Получение списка пород собак."""
|
||||
session = get_session()
|
||||
try:
|
||||
dogs = session.query(Dogs).all()
|
||||
return dogs # Список объектов Dogs
|
||||
except SQLAlchemyError as e:
|
||||
print(f"Ошибка при получении списка собак: {e}")
|
||||
return []
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
def update_user_dog(user_id, dog_id):
|
||||
"""Обновление выбранной пользователем породы собаки."""
|
||||
session = get_session()
|
||||
try:
|
||||
user = session.query(Users).filter_by(user_id=user_id).first()
|
||||
if user:
|
||||
user.dog_id = dog_id
|
||||
session.commit()
|
||||
print(f"Порода пользователя обновлена на {dog_id}")
|
||||
else:
|
||||
print("Пользователь не найден.")
|
||||
except SQLAlchemyError as e:
|
||||
print(f"Ошибка при обновлении породы собаки: {e}")
|
||||
session.rollback()
|
||||
finally:
|
||||
session.close()
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ Session = sessionmaker(bind=engine)
|
|||
# Переменная для хранения текущей сессии
|
||||
current_session = None
|
||||
|
||||
|
||||
def init_db(refresh=False):
|
||||
"""
|
||||
Инициализация базы данных: создание файла и таблиц.
|
||||
|
|
@ -33,18 +32,14 @@ def init_db(refresh=False):
|
|||
# Инициализация сессии при запуске
|
||||
current_session = get_session()
|
||||
|
||||
|
||||
def get_session():
|
||||
"""Возвращает сессию для работы с базой данных."""
|
||||
return Session()
|
||||
|
||||
|
||||
def close_sessions():
|
||||
"""Закрытие всех сессий перед выходом из программы."""
|
||||
global current_session
|
||||
if current_session is not None:
|
||||
if current_session:
|
||||
print("Закрытие сессии...")
|
||||
current_session.close() # Закрываем текущую сессию базы данных
|
||||
current_session = None
|
||||
current_session.close()
|
||||
else:
|
||||
print("Нет активной сессии для закрытия.")
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
from sqlalchemy import Column, Integer, String, ForeignKey, Text, DateTime
|
||||
from sqlalchemy import Column, Integer, String, ForeignKey, Text, DateTime, UniqueConstraint, Boolean
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.sql import func
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
|
||||
class Auth(Base):
|
||||
__tablename__ = 'auth'
|
||||
user_id = Column(Integer, primary_key=True)
|
||||
|
|
@ -50,7 +49,7 @@ class Questions(Base):
|
|||
__tablename__ = 'questions'
|
||||
question_id = Column(Integer, primary_key=True)
|
||||
dog_id = Column(Integer, ForeignKey('dogs.dog_id'))
|
||||
question_text = Column(Text, nullable=False) # Исправлено поле
|
||||
question_text = Column(Text, nullable=False)
|
||||
image_url = Column(String)
|
||||
helpful_info = Column(Text)
|
||||
incorrect_attempts = Column(Integer, default=0)
|
||||
|
|
@ -61,24 +60,31 @@ class Questions(Base):
|
|||
|
||||
class GameSession(Base):
|
||||
__tablename__ = 'game_sessions'
|
||||
__table_args__ = (
|
||||
UniqueConstraint('user_id', 'level', name='uix_user_level'),
|
||||
)
|
||||
session_id = Column(Integer, primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey('users.user_id'))
|
||||
level = Column(Integer, nullable=False)
|
||||
score = Column(Integer, default=0)
|
||||
duration = Column(Integer) # Время игры в секундах
|
||||
start_time = Column(DateTime, default=func.now()) # Исправлено
|
||||
start_time = Column(DateTime, default=func.now())
|
||||
end_time = Column(DateTime, nullable=True)
|
||||
health = Column(Integer, default=100) # Здоровье
|
||||
hunger = Column(Integer, default=0) # Голод
|
||||
sleepiness = Column(Integer, default=0) # Сонливость
|
||||
|
||||
# Связь с таблицей Users
|
||||
user = relationship("Users", back_populates="game_sessions")
|
||||
|
||||
|
||||
class Notifications(Base):
|
||||
__tablename__ = 'notifications'
|
||||
notification_id = Column(Integer, primary_key=True)
|
||||
user_id = Column(Integer, ForeignKey('users.user_id'))
|
||||
message = Column(Text, nullable=False)
|
||||
timestamp = Column(DateTime, default=func.now())
|
||||
is_read = Column(Integer, default=0) # 0 - не прочитано, 1 - прочитано
|
||||
is_read = Column(Boolean, default=False) # Булевый тип для read
|
||||
|
||||
# Связь с таблицей Users
|
||||
user = relationship("Users", back_populates="notifications")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue