| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- import tkinter as tk
- from tkinter import messagebox
- from PIL import Image, ImageTk
- class AdminGameGUI:
- def __init__(self, root):
- self.root = root
- self.root.title("Административный персонал - Игра")
- self.root.geometry("700x600")
- # Ресурсы
- self.reputation = 100
- self.budget = 100
- self.stress = 0
- # Верхняя панель (ресурсы)
- self.top_frame = tk.Frame(root)
- self.top_frame.pack(pady=10)
- self.reputation_label = tk.Label(self.top_frame, font=('Arial', 12))
- self.reputation_label.pack()
- self.budget_label = tk.Label(self.top_frame, font=('Arial', 12))
- self.budget_label.pack()
- self.stress_label = tk.Label(self.top_frame, font=('Arial', 12))
- self.stress_label.pack()
- # Картинка сцены
- self.image_label = tk.Label(root)
- self.image_label.pack(pady=10)
- # Текст сцены
- self.text_label = tk.Label(root, font=('Arial', 12), wraplength=600, justify="center")
- self.text_label.pack(pady=10)
- # Кнопки
- self.button_frame = tk.Frame(root)
- self.button_frame.pack(pady=20)
- self.update_labels()
- self.scene_1()
- # ================= UI =================
- def update_labels(self):
- self.reputation_label.config(text=f"Репутация: {self.reputation}")
- self.budget_label.config(text=f"Бюджет: {self.budget}")
- self.stress_label.config(text=f"Стресс: {self.stress}")
- def show_text(self, text):
- self.text_label.config(text=text)
- def create_buttons(self, choices):
- self.clear_buttons()
- for text, command in choices:
- btn = tk.Button(self.button_frame, text=text, width=50, command=command)
- btn.pack(pady=5)
- def clear_buttons(self):
- for widget in self.button_frame.winfo_children():
- widget.destroy()
- def load_image(self, path):
- """
- 🔴 ВАЖНО: ВСТАВКА КАРТИНОК ЗДЕСЬ
- Просто замени путь:
- "images/scene1.jpg"
- на свой файл
- """
- try:
- img = Image.open(path)
- img = img.resize((400, 250))
- self.tk_img = ImageTk.PhotoImage(img)
- self.image_label.config(image=self.tk_img)
- except:
- self.image_label.config(image="", text="(Нет изображения)")
- def check_game_over(self):
- if self.reputation <= 0:
- self.end_game("Репутация упала до нуля. Компания закрылась.")
- return True
- if self.budget <= 0:
- self.end_game("Бюджет исчерпан. Компания обанкротилась.")
- return True
- if self.stress >= 100:
- self.end_game("Вы перегорели и уволились.")
- return True
- return False
- # ================= СЦЕНЫ =================
- def scene_1(self):
- self.update_labels()
- self.load_image("D:/grouppe2025-26 - 36/goev/xxxxx/images/scene1.jpg") # 👉 КАРТИНКА СЦЕНЫ 1
- self.show_text("Утро администратора. Что сделать первым?")
- self.create_buttons([
- ("Планировать встречи", self.s1_plan),
- ("Финансовая отчетность", self.s1_finance),
- ("Ответить на звонки", self.s1_calls),
- ])
- def s1_plan(self):
- self.reputation += 10
- self.stress += 5
- if not self.check_game_over():
- self.scene_2()
- def s1_finance(self):
- self.budget += 5
- self.stress += 10
- if not self.check_game_over():
- self.scene_2()
- def s1_calls(self):
- self.reputation += 5
- self.stress += 15
- if not self.check_game_over():
- self.scene_2()
- # ---------
- def scene_2(self):
- self.update_labels()
- self.load_image("D:/grouppe2025-26 - 36/goev/xxxxx/images/scene2.jpg") # 👉 КАРТИНКА СЦЕНЫ 2
- self.show_text("Отдел просит дорогое оборудование. Что делать?")
- self.create_buttons([
- ("Договориться о дешевом варианте", self.s2_soft),
- ("Одобрить и перераспределить бюджет", self.s2_spend),
- ("Жестко отказать", self.s2_refuse),
- ])
- def s2_soft(self):
- self.budget -= 10
- self.reputation += 10
- if not self.check_game_over():
- self.scene_3()
- def s2_spend(self):
- self.budget -= 25
- self.stress += 10
- if not self.check_game_over():
- self.scene_3()
- def s2_refuse(self):
- self.reputation -= 10
- self.stress += 5
- if not self.check_game_over():
- self.scene_3()
- # ---------
- def scene_3(self):
- self.update_labels()
- self.load_image("D:/grouppe2025-26 - 36/goev/xxxxx/images/scene3.png") # 👉 КАРТИНКА СЦЕНЫ 3
- self.show_text("Клиент жалуется. Как реагировать?")
- self.create_buttons([
- ("Проявить эмпатию", self.s3_empathy),
- ("Дать четкий ответ", self.s3_clear),
- ("Формальный отказ", self.s3_refuse),
- ])
- def s3_empathy(self):
- self.reputation += 15
- self.stress += 5
- if not self.check_game_over():
- self.scene_4()
- def s3_clear(self):
- self.reputation += 5
- self.stress += 10
- if not self.check_game_over():
- self.scene_4()
- def s3_refuse(self):
- self.reputation -= 15
- self.stress += 5
- if not self.check_game_over():
- self.scene_4()
- # ---------
- def scene_4(self):
- self.update_labels()
- self.load_image("D:/grouppe2025-26 - 36/goev/xxxxx/images/scene4.jpg") # 👉 КАРТИНКА СЦЕНЫ 4
- self.show_text("Как улучшить процессы?")
- self.create_buttons([
- ("Внедрить CRM", self.s4_crm),
- ("Нанять сотрудника", self.s4_hire),
- ("Ничего не делать", self.s4_skip),
- ])
- def s4_crm(self):
- self.budget -= 30
- self.stress -= 15
- if not self.check_game_over():
- self.scene_5()
- def s4_hire(self):
- self.budget -= 50
- self.stress += 20
- if not self.check_game_over():
- self.scene_5()
- def s4_skip(self):
- self.stress += 15
- if not self.check_game_over():
- self.scene_5()
- # ---------
- def scene_5(self):
- self.update_labels()
- self.load_image("D:/grouppe2025-26 - 36/goev/xxxxx/images/scene5.jpg") # 👉 КАРТИНКА СЦЕНЫ 5
- result = "Итог:\n"
- if self.reputation > 70:
- result += "Отличная работа с клиентами\n"
- else:
- result += "Нужно улучшить коммуникацию\n"
- if self.budget > 50:
- result += "Хорошее управление бюджетом\n"
- else:
- result += "Слабый финансовый контроль\n"
- if self.stress < 50:
- result += "Вы стрессоустойчивы\n"
- else:
- result += "Высокий уровень стресса\n"
- self.show_text(result)
- self.clear_buttons()
- tk.Button(self.button_frame, text="Выход", command=self.root.quit).pack(pady=10)
- # ---------
- def end_game(self, text):
- self.show_text(text)
- self.clear_buttons()
- tk.Button(self.button_frame, text="Выход", command=self.root.quit).pack()
- # Запуск
- root = tk.Tk()
- game = AdminGameGUI(root)
- root.mainloop()
|