game.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. import tkinter as tk
  2. from tkinter import messagebox
  3. from PIL import Image, ImageTk
  4. class AdminGameGUI:
  5. def __init__(self, root):
  6. self.root = root
  7. self.root.title("Административный персонал - Игра")
  8. self.root.geometry("700x600")
  9. # Ресурсы
  10. self.reputation = 100
  11. self.budget = 100
  12. self.stress = 0
  13. # Верхняя панель (ресурсы)
  14. self.top_frame = tk.Frame(root)
  15. self.top_frame.pack(pady=10)
  16. self.reputation_label = tk.Label(self.top_frame, font=('Arial', 12))
  17. self.reputation_label.pack()
  18. self.budget_label = tk.Label(self.top_frame, font=('Arial', 12))
  19. self.budget_label.pack()
  20. self.stress_label = tk.Label(self.top_frame, font=('Arial', 12))
  21. self.stress_label.pack()
  22. # Картинка сцены
  23. self.image_label = tk.Label(root)
  24. self.image_label.pack(pady=10)
  25. # Текст сцены
  26. self.text_label = tk.Label(root, font=('Arial', 12), wraplength=600, justify="center")
  27. self.text_label.pack(pady=10)
  28. # Кнопки
  29. self.button_frame = tk.Frame(root)
  30. self.button_frame.pack(pady=20)
  31. self.update_labels()
  32. self.scene_1()
  33. # ================= UI =================
  34. def update_labels(self):
  35. self.reputation_label.config(text=f"Репутация: {self.reputation}")
  36. self.budget_label.config(text=f"Бюджет: {self.budget}")
  37. self.stress_label.config(text=f"Стресс: {self.stress}")
  38. def show_text(self, text):
  39. self.text_label.config(text=text)
  40. def create_buttons(self, choices):
  41. self.clear_buttons()
  42. for text, command in choices:
  43. btn = tk.Button(self.button_frame, text=text, width=50, command=command)
  44. btn.pack(pady=5)
  45. def clear_buttons(self):
  46. for widget in self.button_frame.winfo_children():
  47. widget.destroy()
  48. def load_image(self, path):
  49. """
  50. 🔴 ВАЖНО: ВСТАВКА КАРТИНОК ЗДЕСЬ
  51. Просто замени путь:
  52. "images/scene1.jpg"
  53. на свой файл
  54. """
  55. try:
  56. img = Image.open(path)
  57. img = img.resize((400, 250))
  58. self.tk_img = ImageTk.PhotoImage(img)
  59. self.image_label.config(image=self.tk_img)
  60. except:
  61. self.image_label.config(image="", text="(Нет изображения)")
  62. def check_game_over(self):
  63. if self.reputation <= 0:
  64. self.end_game("Репутация упала до нуля. Компания закрылась.")
  65. return True
  66. if self.budget <= 0:
  67. self.end_game("Бюджет исчерпан. Компания обанкротилась.")
  68. return True
  69. if self.stress >= 100:
  70. self.end_game("Вы перегорели и уволились.")
  71. return True
  72. return False
  73. # ================= СЦЕНЫ =================
  74. def scene_1(self):
  75. self.update_labels()
  76. self.load_image("D:/grouppe2025-26 - 36/goev/xxxxx/images/scene1.jpg") # 👉 КАРТИНКА СЦЕНЫ 1
  77. self.show_text("Утро администратора. Что сделать первым?")
  78. self.create_buttons([
  79. ("Планировать встречи", self.s1_plan),
  80. ("Финансовая отчетность", self.s1_finance),
  81. ("Ответить на звонки", self.s1_calls),
  82. ])
  83. def s1_plan(self):
  84. self.reputation += 10
  85. self.stress += 5
  86. if not self.check_game_over():
  87. self.scene_2()
  88. def s1_finance(self):
  89. self.budget += 5
  90. self.stress += 10
  91. if not self.check_game_over():
  92. self.scene_2()
  93. def s1_calls(self):
  94. self.reputation += 5
  95. self.stress += 15
  96. if not self.check_game_over():
  97. self.scene_2()
  98. # ---------
  99. def scene_2(self):
  100. self.update_labels()
  101. self.load_image("D:/grouppe2025-26 - 36/goev/xxxxx/images/scene2.jpg") # 👉 КАРТИНКА СЦЕНЫ 2
  102. self.show_text("Отдел просит дорогое оборудование. Что делать?")
  103. self.create_buttons([
  104. ("Договориться о дешевом варианте", self.s2_soft),
  105. ("Одобрить и перераспределить бюджет", self.s2_spend),
  106. ("Жестко отказать", self.s2_refuse),
  107. ])
  108. def s2_soft(self):
  109. self.budget -= 10
  110. self.reputation += 10
  111. if not self.check_game_over():
  112. self.scene_3()
  113. def s2_spend(self):
  114. self.budget -= 25
  115. self.stress += 10
  116. if not self.check_game_over():
  117. self.scene_3()
  118. def s2_refuse(self):
  119. self.reputation -= 10
  120. self.stress += 5
  121. if not self.check_game_over():
  122. self.scene_3()
  123. # ---------
  124. def scene_3(self):
  125. self.update_labels()
  126. self.load_image("D:/grouppe2025-26 - 36/goev/xxxxx/images/scene3.png") # 👉 КАРТИНКА СЦЕНЫ 3
  127. self.show_text("Клиент жалуется. Как реагировать?")
  128. self.create_buttons([
  129. ("Проявить эмпатию", self.s3_empathy),
  130. ("Дать четкий ответ", self.s3_clear),
  131. ("Формальный отказ", self.s3_refuse),
  132. ])
  133. def s3_empathy(self):
  134. self.reputation += 15
  135. self.stress += 5
  136. if not self.check_game_over():
  137. self.scene_4()
  138. def s3_clear(self):
  139. self.reputation += 5
  140. self.stress += 10
  141. if not self.check_game_over():
  142. self.scene_4()
  143. def s3_refuse(self):
  144. self.reputation -= 15
  145. self.stress += 5
  146. if not self.check_game_over():
  147. self.scene_4()
  148. # ---------
  149. def scene_4(self):
  150. self.update_labels()
  151. self.load_image("D:/grouppe2025-26 - 36/goev/xxxxx/images/scene4.jpg") # 👉 КАРТИНКА СЦЕНЫ 4
  152. self.show_text("Как улучшить процессы?")
  153. self.create_buttons([
  154. ("Внедрить CRM", self.s4_crm),
  155. ("Нанять сотрудника", self.s4_hire),
  156. ("Ничего не делать", self.s4_skip),
  157. ])
  158. def s4_crm(self):
  159. self.budget -= 30
  160. self.stress -= 15
  161. if not self.check_game_over():
  162. self.scene_5()
  163. def s4_hire(self):
  164. self.budget -= 50
  165. self.stress += 20
  166. if not self.check_game_over():
  167. self.scene_5()
  168. def s4_skip(self):
  169. self.stress += 15
  170. if not self.check_game_over():
  171. self.scene_5()
  172. # ---------
  173. def scene_5(self):
  174. self.update_labels()
  175. self.load_image("D:/grouppe2025-26 - 36/goev/xxxxx/images/scene5.jpg") # 👉 КАРТИНКА СЦЕНЫ 5
  176. result = "Итог:\n"
  177. if self.reputation > 70:
  178. result += "Отличная работа с клиентами\n"
  179. else:
  180. result += "Нужно улучшить коммуникацию\n"
  181. if self.budget > 50:
  182. result += "Хорошее управление бюджетом\n"
  183. else:
  184. result += "Слабый финансовый контроль\n"
  185. if self.stress < 50:
  186. result += "Вы стрессоустойчивы\n"
  187. else:
  188. result += "Высокий уровень стресса\n"
  189. self.show_text(result)
  190. self.clear_buttons()
  191. tk.Button(self.button_frame, text="Выход", command=self.root.quit).pack(pady=10)
  192. # ---------
  193. def end_game(self, text):
  194. self.show_text(text)
  195. self.clear_buttons()
  196. tk.Button(self.button_frame, text="Выход", command=self.root.quit).pack()
  197. # Запуск
  198. root = tk.Tk()
  199. game = AdminGameGUI(root)
  200. root.mainloop()