Разработка программного модуля информационной системы «Игра «Собачья академия» #3
5 changed files with 2087 additions and 25 deletions
58
config.py
58
config.py
|
|
@ -1,3 +1,12 @@
|
|||
import os
|
||||
|
||||
# Базовая директория проекта
|
||||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
# Директория с ресурсами
|
||||
ASSETS_DIR = os.path.join(BASE_DIR, "assets")
|
||||
DOGS_DIR = os.path.join(ASSETS_DIR, "dogs")
|
||||
|
||||
# Админ-интерфейс (тёмные цвета)
|
||||
ADMIN_BACKGROUND_COLOR = "#403d49"
|
||||
ADMIN_PRIMARY_COLOR = "#ff6347"
|
||||
|
|
@ -39,68 +48,69 @@ ADMIN_LOGIN = "admin"
|
|||
ADMIN_PASSWORD = "admin123"
|
||||
|
||||
# База данных
|
||||
DATABASE_URL = "sqlite:///F:/Projects/Dog_Academy/database/DogAcademy.db" # Абсолютный путь
|
||||
DATABASE_URL = f"sqlite:///{os.path.join(BASE_DIR, 'database', 'DogAcademy.db')}"
|
||||
|
||||
# Иконки
|
||||
SETTINGS_IMG = "assets/settings.png"
|
||||
LOGO = "F:/Projects/Dog_Academy/assets/logo.png"
|
||||
BACKGROUND_GAME = "F:/Projects/Dog_Academy/assets/background.png"
|
||||
BONE = "F:/Projects/Dog_Academy/assets/bone.png"
|
||||
LOCK = "F:/Projects/Dog_Academy/assets/lock.png"
|
||||
UNLOCK = "F:/Projects/Dog_Academy/assets/unlock.png"
|
||||
DONE = "F:/Projects/Dog_Academy/assets/done.png"
|
||||
# Пути к ресурсам
|
||||
SETTINGS_IMG = os.path.join(ASSETS_DIR, "settings.png")
|
||||
LOGO = os.path.join(ASSETS_DIR, "logo.png")
|
||||
BACKGROUND_GAME = os.path.join(ASSETS_DIR, "background.png")
|
||||
BONE = os.path.join(ASSETS_DIR, "bone.png")
|
||||
LOCK = os.path.join(ASSETS_DIR, "lock.png")
|
||||
UNLOCK = os.path.join(ASSETS_DIR, "unlock.png")
|
||||
DONE = os.path.join(ASSETS_DIR, "done.png")
|
||||
|
||||
# Собаки
|
||||
CHIHUAHUA = "F:/Projects/Dog_Academy/assets/dogs/Chihuahua.png"
|
||||
CORGI = "F:/Projects/Dog_Academy/assets/dogs/Corgi.png"
|
||||
RETRIEVER = "F:/Projects/Dog_Academy/assets/dogs/Golden_Retriever.png"
|
||||
HUSKY = "F:/Projects/Dog_Academy/assets/dogs/Husky.png"
|
||||
POMERANIAN = "F:/Projects/Dog_Academy/assets/dogs/Pomeranian.png"
|
||||
PUG = "F:/Projects/Dog_Academy/assets/dogs/Pug.png"
|
||||
YORKSHIRE = "F:/Projects/Dog_Academy/assets/dogs/Yorkshire_Terrier.png"
|
||||
# Пути к изображениям собак
|
||||
CHIHUAHUA = os.path.join(DOGS_DIR, "Chihuahua.png")
|
||||
CORGI = os.path.join(DOGS_DIR, "Corgi.png")
|
||||
RETRIEVER = os.path.join(DOGS_DIR, "Golden_Retriever.png")
|
||||
HUSKY = os.path.join(DOGS_DIR, "Husky.png")
|
||||
POMERANIAN = os.path.join(DOGS_DIR, "Pomeranian.png")
|
||||
PUG = os.path.join(DOGS_DIR, "Pug.png")
|
||||
YORKSHIRE = os.path.join(DOGS_DIR, "Yorkshire_Terrier.png")
|
||||
|
||||
# Данные о характерах собак
|
||||
DOG_CHARACTERS = {
|
||||
"Chihuahua": {
|
||||
"image": CHIHUAHUA,
|
||||
"speed": 8,
|
||||
"endurance": 5,
|
||||
"special_ability": "Fast Dodge", # Уклонение от препятствий
|
||||
"special_ability": "Fast Dodge",
|
||||
},
|
||||
"Corgi": {
|
||||
"image": CORGI,
|
||||
"speed": 6,
|
||||
"endurance": 7,
|
||||
"special_ability": "Extra Jump", # Дополнительный прыжок
|
||||
"special_ability": "Extra Jump",
|
||||
},
|
||||
"Golden Retriever": {
|
||||
"image": RETRIEVER,
|
||||
"speed": 7,
|
||||
"endurance": 8,
|
||||
"special_ability": "Bonus Points", # Увеличенные очки за правильные ответы
|
||||
"special_ability": "Bonus Points",
|
||||
},
|
||||
"Husky": {
|
||||
"image": HUSKY,
|
||||
"speed": 9,
|
||||
"endurance": 6,
|
||||
"special_ability": "Speed Boost", # Ускорение
|
||||
"special_ability": "Speed Boost",
|
||||
},
|
||||
"Pomeranian": {
|
||||
"image": POMERANIAN,
|
||||
"speed": 7,
|
||||
"endurance": 4,
|
||||
"special_ability": "Charm", # Уменьшает штраф за ошибки
|
||||
"special_ability": "Charm",
|
||||
},
|
||||
"Pug": {
|
||||
"image": PUG,
|
||||
"speed": 5,
|
||||
"endurance": 9,
|
||||
"special_ability": "Resilience", # Сохраняет здоровье при столкновениях
|
||||
"special_ability": "Resilience",
|
||||
},
|
||||
"Yorkshire Terrier": {
|
||||
"image": YORKSHIRE,
|
||||
"speed": 6,
|
||||
"endurance": 5,
|
||||
"special_ability": "Quick Recovery", # Быстрое восстановление характеристик
|
||||
"special_ability": "Quick Recovery",
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
|||
Binary file not shown.
1943
logs/logfile.log
1943
logs/logfile.log
File diff suppressed because it is too large
Load diff
107
src/ui/user_ui/knowledge_ui.py
Normal file
107
src/ui/user_ui/knowledge_ui.py
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
import os
|
||||
import tkinter as tk
|
||||
from PIL import Image, ImageTk
|
||||
from config import DOG_CHARACTERS, BASE_DIR
|
||||
from src.utils import clear_frame
|
||||
from database.info.Dogs_table import get_all_dogs
|
||||
|
||||
|
||||
def knowledge_ui(root, user_app):
|
||||
"""Интерфейс базы знаний о породах собак."""
|
||||
clear_frame(root)
|
||||
|
||||
# Загружаем данные о породах собак из базы данных
|
||||
dog_data = get_all_dogs()
|
||||
if not dog_data:
|
||||
tk.Label(root, text="Не удалось загрузить данные о породах.", font=("Arial", 20)).pack()
|
||||
return
|
||||
|
||||
index = {"current": 0} # Индекс текущей породы
|
||||
|
||||
def update_content():
|
||||
"""Обновляет содержимое для текущей породы."""
|
||||
current_dog = dog_data[index["current"]]
|
||||
breed = current_dog.breed
|
||||
|
||||
# Загружаем информацию из DOG_CHARACTERS
|
||||
dog_info = DOG_CHARACTERS.get(breed)
|
||||
if not dog_info:
|
||||
title_label.config(text="Нет данных о породе.")
|
||||
image_label.config(image=None)
|
||||
image_label.image = None
|
||||
characteristics_label.config(text="")
|
||||
behavior_label.config(text="")
|
||||
care_label.config(text="")
|
||||
admin_comments_label.config(text="")
|
||||
return
|
||||
|
||||
# Загружаем изображение
|
||||
image_path = dog_info["image"]
|
||||
if os.path.exists(image_path):
|
||||
image = Image.open(image_path)
|
||||
image = image.resize((200, 200), Image.Resampling.LANCZOS)
|
||||
photo = ImageTk.PhotoImage(image)
|
||||
image_label.config(image=photo)
|
||||
image_label.image = photo
|
||||
else:
|
||||
image_label.config(image=None)
|
||||
image_label.image = None
|
||||
|
||||
# Обновляем текст
|
||||
title_label.config(text=breed)
|
||||
characteristics_label.config(text=f"Характеристики: {current_dog.characteristics}")
|
||||
behavior_label.config(text=f"Поведение: {current_dog.behavior}")
|
||||
care_label.config(text=f"Уход: {current_dog.care_info}")
|
||||
admin_comments_label.config(text=f"Комментарии: {current_dog.admin_comments}")
|
||||
|
||||
def next_breed():
|
||||
"""Переход к следующей породе."""
|
||||
index["current"] = (index["current"] + 1) % len(dog_data)
|
||||
update_content()
|
||||
|
||||
def previous_breed():
|
||||
"""Переход к предыдущей породе."""
|
||||
index["current"] = (index["current"] - 1) % len(dog_data)
|
||||
update_content()
|
||||
|
||||
# Основной интерфейс
|
||||
frame = tk.Frame(root, bg="#f0f0f0")
|
||||
frame.pack(fill=tk.BOTH, expand=True)
|
||||
|
||||
title_label = tk.Label(frame, text="", font=("Arial", 20), bg="#f0f0f0")
|
||||
title_label.pack(pady=10)
|
||||
|
||||
image_label = tk.Label(frame, bg="#f0f0f0")
|
||||
image_label.pack(pady=10)
|
||||
|
||||
characteristics_label = tk.Label(frame, text="", font=("Arial", 14), bg="#f0f0f0", wraplength=600)
|
||||
characteristics_label.pack(pady=5)
|
||||
|
||||
behavior_label = tk.Label(frame, text="", font=("Arial", 14), bg="#f0f0f0", wraplength=600)
|
||||
behavior_label.pack(pady=5)
|
||||
|
||||
care_label = tk.Label(frame, text="", font=("Arial", 14), bg="#f0f0f0", wraplength=600)
|
||||
care_label.pack(pady=5)
|
||||
|
||||
admin_comments_label = tk.Label(frame, text="", font=("Arial", 14), bg="#f0f0f0", wraplength=600)
|
||||
admin_comments_label.pack(pady=5)
|
||||
|
||||
# Кнопки навигации
|
||||
btn_frame = tk.Frame(frame, bg="#f0f0f0")
|
||||
btn_frame.pack(pady=20)
|
||||
|
||||
back_button = tk.Button(
|
||||
btn_frame,
|
||||
text="Назад",
|
||||
font=("Arial", 14),
|
||||
command=lambda: [clear_frame(root), user_app.show_user_dashboard()]
|
||||
)
|
||||
back_button.pack(side=tk.LEFT, padx=5)
|
||||
|
||||
prev_button = tk.Button(btn_frame, text="Предыдущая", font=("Arial", 14), command=previous_breed)
|
||||
prev_button.pack(side=tk.LEFT, padx=5)
|
||||
|
||||
next_button = tk.Button(btn_frame, text="Следующая", font=("Arial", 14), command=next_breed)
|
||||
next_button.pack(side=tk.LEFT, padx=5)
|
||||
|
||||
update_content() # Инициализация первого отображения
|
||||
|
|
@ -8,6 +8,7 @@ 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.knowledge_ui import knowledge_ui
|
||||
from src.ui.user_ui.profile_ui import profile_ui
|
||||
from src.utils import clear_frame
|
||||
|
||||
|
|
@ -87,7 +88,8 @@ class UserApp:
|
|||
relief=tk.FLAT,
|
||||
padx=20,
|
||||
pady=10,
|
||||
state=tk.DISABLED # Делаем кнопку некликабельной
|
||||
state=tk.NORMAL, # Делаем кнопку активной
|
||||
command=lambda: knowledge_ui(self.root, self) # Подключаем knowledge_ui
|
||||
)
|
||||
knowledge_button.pack(side=tk.LEFT, padx=20)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue