Изменён пользовательский интерфейс main_menu.py, game_ui.py. Настроен вызов функций для запуска игрового процесса: после нажатия кнопки 'играть' открывается выбор собаки, а затем выбор уровня. Обновлена структура базы данных. Удалены не нужные файлы для проекта.
This commit is contained in:
parent
989a9056e7
commit
c08cf51998
46 changed files with 804 additions and 111 deletions
|
|
@ -1,78 +1,167 @@
|
|||
import tkinter as tk
|
||||
from config import (
|
||||
BACKGROUND_COLOR_USER,
|
||||
TOP_PANEL_COLOR_USER,
|
||||
BUTTON_COLOR_PROFILE_USER,
|
||||
BUTTON_COLOR_PLAY_USER,
|
||||
BUTTON_COLOR_EXIT_USER,
|
||||
BUTTON_TEXT_COLOR_USER,
|
||||
FONT_USER,
|
||||
BIG_FONT_USER,
|
||||
BUTTON_RADIUS_USER,
|
||||
EXIT_BUTTON_SIZE_USER,
|
||||
)
|
||||
from tkinter import Canvas
|
||||
from PIL import Image, ImageTk
|
||||
import math
|
||||
|
||||
from config import EXIT_BUTTON_WIDTH, EXIT_BUTTON_HEIGHT, BUTTON_COLOR_EXIT
|
||||
from src.ui.user_ui.game_ui import GameUI
|
||||
from src.ui.user_ui.profile_ui import profile_ui
|
||||
from src.ui.user_ui.shop_ui import shop_ui
|
||||
from src.ui.user_ui.knowledge_ui import knowledge_ui
|
||||
from src.utils import clear_frame
|
||||
|
||||
# Пути к изображениям собак
|
||||
DOG_IMAGES = [
|
||||
"F:/Projects/Dog_Academy/assets/dogs/Chihuahua.png",
|
||||
"F:/Projects/Dog_Academy/assets/dogs/Corgi.png",
|
||||
"F:/Projects/Dog_Academy/assets/dogs/Golden_Retriever.png",
|
||||
"F:/Projects/Dog_Academy/assets/dogs/Husky.png",
|
||||
"F:/Projects/Dog_Academy/assets/dogs/Pomeranian.png",
|
||||
"F:/Projects/Dog_Academy/assets/dogs/Pug.png",
|
||||
"F:/Projects/Dog_Academy/assets/dogs/Yorkshire_Terrier.png"
|
||||
]
|
||||
|
||||
# Настройки
|
||||
BACKGROUND_COLOR = "#E5E5E5" # Цвет фона
|
||||
BUTTON_COLOR_PLAY = "#4CAF50" # Цвет кнопки играть
|
||||
BUTTON_TEXT_COLOR = "white" # Цвет текста на кнопке
|
||||
FONT = ("Arial", 12)
|
||||
BIG_FONT = ("Arial", 24)
|
||||
PLAY_BUTTON_RADIUS = 100 # Радиус кнопки "Играть"
|
||||
|
||||
|
||||
class UserApp:
|
||||
def __init__(self, root, auth_ui):
|
||||
def __init__(self, root, user_id=None):
|
||||
self.root = root
|
||||
self.auth_ui = auth_ui
|
||||
self.root.configure(bg=BACKGROUND_COLOR_USER)
|
||||
self.root.geometry("1920x1080") # Разрешение окна
|
||||
self.user_id = user_id
|
||||
self.root.configure(bg=BACKGROUND_COLOR)
|
||||
self.root.geometry("1920x1080")
|
||||
self.root.title("Собачья академия")
|
||||
print("Главное меню активно") # Лог при открытии меню
|
||||
self.show_user_dashboard()
|
||||
|
||||
def show_user_dashboard(self):
|
||||
"""Показать интерфейс пользователя."""
|
||||
center_x, center_y = 960, 540 # Центр экрана
|
||||
radius = 300 # Радиус круга для размещения собак
|
||||
num_dogs = len(DOG_IMAGES)
|
||||
|
||||
# Верхняя панель
|
||||
top_panel = tk.Frame(self.root, bg=TOP_PANEL_COLOR_USER, height=100)
|
||||
top_panel = tk.Frame(self.root, bg="#333333", height=100)
|
||||
top_panel.pack(fill=tk.X, side=tk.TOP)
|
||||
|
||||
# Кнопки на верхней панели
|
||||
for text, command in [("Профиль", self.show_profile), ("Магазин", self.show_shop), ("База знаний", self.show_knowledge)]:
|
||||
button = tk.Button(
|
||||
top_panel,
|
||||
text=text,
|
||||
bg=BUTTON_COLOR_PROFILE_USER,
|
||||
fg=BUTTON_TEXT_COLOR_USER,
|
||||
font=FONT_USER,
|
||||
relief=tk.FLAT,
|
||||
padx=20,
|
||||
pady=10,
|
||||
command=command,
|
||||
)
|
||||
button.pack(side=tk.LEFT, padx=20)
|
||||
|
||||
# Кнопка "Играть" в центре
|
||||
play_button = tk.Button(
|
||||
self.root,
|
||||
text="Играть",
|
||||
bg=BUTTON_COLOR_PLAY_USER,
|
||||
fg=BUTTON_TEXT_COLOR_USER,
|
||||
font=BIG_FONT_USER,
|
||||
profile_button = tk.Button(
|
||||
top_panel,
|
||||
text="Профиль",
|
||||
bg="#555555",
|
||||
fg="white",
|
||||
font=FONT,
|
||||
relief=tk.FLAT,
|
||||
height=2,
|
||||
width=10,
|
||||
command=self.play_game,
|
||||
padx=20,
|
||||
pady=10,
|
||||
command=self.show_profile
|
||||
)
|
||||
play_button.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
|
||||
profile_button.pack(side=tk.LEFT, padx=20)
|
||||
|
||||
# Кнопка "Выход" в правом нижнем углу
|
||||
exit_button = tk.Button(
|
||||
self.root,
|
||||
text="Выход",
|
||||
bg=BUTTON_COLOR_EXIT_USER,
|
||||
fg=BUTTON_TEXT_COLOR_USER,
|
||||
font=FONT_USER,
|
||||
width=EXIT_BUTTON_SIZE_USER[0] // 10,
|
||||
height=EXIT_BUTTON_SIZE_USER[1] // 10,
|
||||
command=self.exit_app,
|
||||
shop_button = tk.Button(
|
||||
top_panel,
|
||||
text="Магазин",
|
||||
bg="#555555",
|
||||
fg="white",
|
||||
font=FONT,
|
||||
relief=tk.FLAT,
|
||||
padx=20,
|
||||
pady=10,
|
||||
command=self.show_shop
|
||||
)
|
||||
exit_button.place(relx=1.0, rely=1.0, x=-20, y=-20, anchor=tk.SE)
|
||||
shop_button.pack(side=tk.LEFT, padx=20)
|
||||
|
||||
knowledge_button = tk.Button(
|
||||
top_panel,
|
||||
text="База знаний",
|
||||
bg="#555555",
|
||||
fg="white",
|
||||
font=FONT,
|
||||
relief=tk.FLAT,
|
||||
padx=20,
|
||||
pady=10,
|
||||
command=self.show_knowledge
|
||||
)
|
||||
knowledge_button.pack(side=tk.LEFT, padx=20)
|
||||
|
||||
# Размещение собак по кругу
|
||||
self.place_dog_images(center_x, center_y, radius, num_dogs)
|
||||
|
||||
# Кнопка "Играть" (увеличенная)
|
||||
play_button_canvas = tk.Canvas(
|
||||
self.root,
|
||||
width=PLAY_BUTTON_RADIUS * 2,
|
||||
height=PLAY_BUTTON_RADIUS * 2,
|
||||
bg=BACKGROUND_COLOR,
|
||||
highlightthickness=0,
|
||||
)
|
||||
play_button_canvas.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
|
||||
|
||||
play_button_canvas.create_oval(
|
||||
0, 0, PLAY_BUTTON_RADIUS * 2, PLAY_BUTTON_RADIUS * 2,
|
||||
fill=BUTTON_COLOR_PLAY,
|
||||
outline=BUTTON_COLOR_PLAY,
|
||||
)
|
||||
play_button_canvas.create_text(
|
||||
PLAY_BUTTON_RADIUS,
|
||||
PLAY_BUTTON_RADIUS,
|
||||
text="Играть",
|
||||
fill=BUTTON_TEXT_COLOR,
|
||||
font=BIG_FONT,
|
||||
)
|
||||
play_button_canvas.tag_bind("all", "<Button-1>", lambda e: self.play_game())
|
||||
|
||||
def place_dog_images(self, center_x, center_y, radius, num_dogs):
|
||||
"""Размещает изображения собак по кругу."""
|
||||
angle_step = 2 * math.pi / num_dogs # Шаг угла для размещения собак
|
||||
for i in range(num_dogs):
|
||||
angle = i * angle_step
|
||||
x = center_x + radius * math.cos(angle)
|
||||
y = center_y + radius * math.sin(angle)
|
||||
|
||||
# Загрузка изображения собаки
|
||||
image_path = DOG_IMAGES[i]
|
||||
try:
|
||||
dog_image = Image.open(image_path)
|
||||
dog_image = dog_image.resize((100, 100), Image.Resampling.LANCZOS)
|
||||
dog_photo = ImageTk.PhotoImage(dog_image)
|
||||
|
||||
# Создание метки с изображением
|
||||
dog_label = tk.Label(self.root, image=dog_photo, bg=BACKGROUND_COLOR)
|
||||
dog_label.image = dog_photo # Сохраняем ссылку на изображение
|
||||
dog_label.place(x=x - 50, y=y - 50) # Центрируем метку относительно позиции
|
||||
except Exception as e:
|
||||
print(f"Ошибка загрузки изображения {image_path}: {e}")
|
||||
|
||||
def show_profile(self):
|
||||
"""Показать экран профиля пользователя."""
|
||||
self.clear_frame()
|
||||
profile_ui(self.root, self.user_id) # Передаем user_id в profile_ui
|
||||
|
||||
def show_shop(self):
|
||||
"""Показать экран магазина."""
|
||||
self.clear_frame()
|
||||
shop_ui(self.root)
|
||||
|
||||
def show_knowledge(self):
|
||||
"""Показать базу знаний."""
|
||||
self.clear_frame()
|
||||
knowledge_ui(self.root)
|
||||
|
||||
def clear_frame(self):
|
||||
"""Очистить текущий экран."""
|
||||
for widget in self.root.winfo_children():
|
||||
widget.destroy()
|
||||
|
||||
def play_game(self):
|
||||
"""Заглушка для игры."""
|
||||
"""Переход к игровому интерфейсу."""
|
||||
clear_frame(self.root) # Очищаем главное меню
|
||||
GameUI(self.root, self.user_id) # Открываем игровой интерфейс
|
||||
print("Запуск игры...")
|
||||
|
||||
def exit_app(self):
|
||||
|
|
@ -80,14 +169,9 @@ class UserApp:
|
|||
print("Приложение закрыто")
|
||||
self.root.quit()
|
||||
|
||||
def show_profile(self):
|
||||
"""Заглушка для профиля."""
|
||||
print("Переход в профиль...")
|
||||
# Запуск главного окна
|
||||
if __name__ == "__main__":
|
||||
root = tk.Tk()
|
||||
app = UserApp(root, user_id=123) # Передаем user_id (это может быть получено после авторизации)
|
||||
root.mainloop()
|
||||
|
||||
def show_shop(self):
|
||||
"""Заглушка для магазина."""
|
||||
print("Переход в магазин...")
|
||||
|
||||
def show_knowledge(self):
|
||||
"""Заглушка для базы знаний."""
|
||||
print("Переход в базу знаний...")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue