Изменения:

1. Ошибка "WHERE game_sessions.user_id IS NULL"
+ игра получает user_id из бд после создания пользователя, авторизации
2. Провиль пользователя
+ отображается никнейм
3. Уровни
+ добавлена рамка с 100 уровнями
+ добавлена система смены цвета кнопки уровня в зависимости от состояния (пройден/не пройден)
4. Окно победы
+ добавлено отображение никнейма
This commit is contained in:
Xatiko 2024-12-03 02:23:50 +03:00
parent 9f5d36d1a1
commit 5d34162267
13 changed files with 5512 additions and 234 deletions

View file

@ -1,13 +1,17 @@
import logging
import tkinter as tk
from tkinter import messagebox
from config import BACKGROUND_COLOR, PRIMARY_COLOR, BUTTON_COLOR, BUTTON_TEXT_COLOR, FONT, BIG_FONT, ADMIN_LOGIN, ADMIN_PASSWORD
from src.auth import login_user
from src.ui.admin_ui import AdminApp # Импорт интерфейса администратора
from database.db_events import create_user, check_user
from src.ui.user_ui.main_menu import UserApp
class DogAcademyApp:
def __init__(self, root):
def __init__(self, root, user_id=None):
"""Инициализация приложения."""
self.root = root
self.user_id = user_id
self.root.title("Dog Academy Game")
self.root.geometry("1920x1080")
self.root.configure(bg=BACKGROUND_COLOR)
@ -20,12 +24,11 @@ class DogAcademyApp:
self.current_frame.destroy()
def show_main_menu(self):
"""Показать главное меню с названием игры и кнопками."""
"""Показать главное меню."""
self.clear_frame()
self.current_frame = tk.Frame(self.root, bg=BACKGROUND_COLOR)
self.current_frame.pack(expand=True)
# Название игры
title = tk.Label(
self.current_frame,
text="Dog Academy Game",
@ -35,7 +38,6 @@ class DogAcademyApp:
)
title.pack(pady=50)
# Кнопка "Войти"
login_button = tk.Button(
self.current_frame,
text="Войти",
@ -46,7 +48,6 @@ class DogAcademyApp:
)
login_button.pack(pady=20)
# Кнопка "Зарегистрироваться"
register_button = tk.Button(
self.current_frame,
text="Зарегистрироваться",
@ -63,7 +64,6 @@ class DogAcademyApp:
self.current_frame = tk.Frame(self.root, bg=BACKGROUND_COLOR)
self.current_frame.pack(expand=True)
# Заголовок
title = tk.Label(
self.current_frame,
text="Авторизация",
@ -73,19 +73,16 @@ class DogAcademyApp:
)
title.pack(pady=50)
# Логин
login_label = tk.Label(self.current_frame, text="Логин:", bg=BACKGROUND_COLOR, fg=PRIMARY_COLOR, font=FONT)
login_label.pack()
self.login_entry = tk.Entry(self.current_frame, font=FONT)
self.login_entry.pack(pady=10)
# Пароль
password_label = tk.Label(self.current_frame, text="Пароль:", bg=BACKGROUND_COLOR, fg=PRIMARY_COLOR, font=FONT)
password_label.pack()
self.password_entry = tk.Entry(self.current_frame, show="*", font=FONT)
self.password_entry.pack(pady=10)
# Кнопка "Показать пароль"
show_password_button = tk.Button(
self.current_frame,
text="Показать пароль",
@ -96,7 +93,6 @@ class DogAcademyApp:
)
show_password_button.pack(pady=10)
# Кнопка "Войти"
login_button = tk.Button(
self.current_frame,
text="Войти",
@ -107,7 +103,6 @@ class DogAcademyApp:
)
login_button.pack(pady=20)
# Кнопка "Вернуться на главную"
back_button = tk.Button(
self.current_frame,
text="Вернуться на главную",
@ -132,17 +127,21 @@ class DogAcademyApp:
if login == ADMIN_LOGIN and password == ADMIN_PASSWORD:
messagebox.showinfo("Успех", "Вы успешно авторизованы как администратор!")
self.show_admin_panel() # Переходим к админ-панели
elif check_user(login, password):
messagebox.showinfo("Успех", "Вы успешно авторизованы!")
self.show_user_dashboard() # Переходим к панели пользователя
self.user_id = None # Администратору не нужен user_id
self.show_admin_panel()
else:
messagebox.showerror("Ошибка", "Неверные данные. Попробуйте снова.")
success, user_id = login_user(login, password)
if success:
messagebox.showinfo("Успех", "Вы успешно авторизованы!")
self.user_id = user_id # Сохраняем user_id
self.show_user_dashboard()
else:
messagebox.showerror("Ошибка", "Неверный логин или пароль.")
def show_admin_panel(self):
"""Отображение интерфейса администратора."""
self.clear_frame()
AdminApp(self.root) # Создаем экземпляр админ-панели
AdminApp(self.root)
def show_registration_screen(self):
"""Показать экран регистрации."""
@ -150,7 +149,6 @@ class DogAcademyApp:
self.current_frame = tk.Frame(self.root, bg=BACKGROUND_COLOR)
self.current_frame.pack(expand=True)
# Заголовок
title = tk.Label(
self.current_frame,
text="Регистрация",
@ -160,36 +158,21 @@ class DogAcademyApp:
)
title.pack(pady=50)
# Логин
login_label = tk.Label(self.current_frame, text="Логин:", bg=BACKGROUND_COLOR, fg=PRIMARY_COLOR, font=FONT)
login_label.pack()
self.reg_login_entry = tk.Entry(self.current_frame, font=FONT)
self.reg_login_entry.pack(pady=10)
# Пароль
password_label = tk.Label(self.current_frame, text="Пароль:", bg=BACKGROUND_COLOR, fg=PRIMARY_COLOR, font=FONT)
password_label.pack()
self.reg_password_entry = tk.Entry(self.current_frame, show="*", font=FONT)
self.reg_password_entry.pack(pady=10)
# Кнопка "Показать пароль"
show_password_button = tk.Button(
self.current_frame,
text="Показать пароль",
bg=BUTTON_COLOR,
fg=BUTTON_TEXT_COLOR,
font=FONT,
command=self.toggle_registration_password,
)
show_password_button.pack(pady=10)
# Никнейм
username_label = tk.Label(self.current_frame, text="Никнейм:", bg=BACKGROUND_COLOR, fg=PRIMARY_COLOR, font=FONT)
username_label.pack()
self.username_entry = tk.Entry(self.current_frame, font=FONT)
self.username_entry.pack(pady=10)
# Кнопка "Зарегистрироваться"
register_button = tk.Button(
self.current_frame,
text="Зарегистрироваться",
@ -200,7 +183,6 @@ class DogAcademyApp:
)
register_button.pack(pady=20)
# Кнопка "Вернуться на главную"
back_button = tk.Button(
self.current_frame,
text="Вернуться на главную",
@ -222,19 +204,19 @@ class DogAcademyApp:
"""Регистрация нового пользователя."""
login = self.reg_login_entry.get()
password = self.reg_password_entry.get()
username = self.username_entry.get() # Получаем имя пользователя
username = self.username_entry.get()
if login and password and username:
success, message = create_user(login, password, username) # Передаем имя пользователя
success, message = create_user(login, password, username)
if success:
messagebox.showinfo("Успех", message)
self.show_login_screen()
else:
messagebox.showerror("Ошибка", message)
else:
messagebox.showerror("Ошибка", "Пожалуйста, заполните все поля.")
messagebox.showerror("Ошибка", "Заполните все поля.")
def show_user_dashboard(self):
"""Переход к пользовательскому интерфейсу."""
self.clear_frame()
"""Перейти к главному меню пользователя после авторизации."""
UserApp(self.root)
UserApp(self.root, self.user_id)