Защитник печати_2.5.1300.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. import tkinter as tk
  2. from tkinter import messagebox, ttk
  3. def display_scene():
  4. """Очищает окно и отображает текущую сцену"""
  5. for widget in root.winfo_children():
  6. widget.destroy()
  7. if current_scene in scenes:
  8. scenes[current_scene]()
  9. else:
  10. game_over()
  11. def game_over():
  12. """Финал игры: показ результата"""
  13. frame = tk.Frame(root, bg="#f0f8ff")
  14. frame.pack(pady=50)
  15. tk.Label(
  16. frame,
  17. text="Игра завершена!",
  18. font=("Arial", 24, "bold"),
  19. bg="#f0f8ff",
  20. fg="#2c3e50"
  21. ).pack(pady=20)
  22. # Оценка результата по набранным баллам
  23. if score >= 45:
  24. result = "Отлично! Система полностью защищена."
  25. elif score >= 30:
  26. result = "Хорошо! Есть небольшие уязвимости."
  27. elif score >= 15:
  28. result = "Удовлетворительно. Требуется доработка защиты."
  29. else:
  30. result = "Критические уязвимости! Пересмотрите политику безопасности."
  31. tk.Label(
  32. frame,
  33. text=f"Ваш итоговый счёт: {score}/50\n\n{result}",
  34. font=("Arial", 14),
  35. bg="#f0f8ff",
  36. fg="#2c3e50",
  37. justify="center"
  38. ).pack(pady=20)
  39. tk.Button(
  40. frame,
  41. text="Начать заново",
  42. command=restart,
  43. bg="#3498db",
  44. fg="white",
  45. font=("Arial", 12),
  46. padx=20
  47. ).pack(pady=10)
  48. def restart():
  49. """Перезапуск игры"""
  50. score = 0
  51. current_scene = 1
  52. display_scene()
  53. # --- Сцены игры ---
  54. def scene_1():
  55. """Сцена 1: Аутентификация пользователей"""
  56. tk.Label(
  57. root,
  58. text="Сцена 1: Настройка аутентификации",
  59. font=("Arial", 18, "bold"),
  60. bg="#f0f8ff",
  61. fg="#2c3e50"
  62. ).pack(pady=20)
  63. tk.Label(
  64. root,
  65. text="Выберите методы аутентификации для доступа к принтеру.",
  66. font=("Arial", 12),
  67. bg="#f0f8ff",
  68. fg="#34495e",
  69. wraplength=700,
  70. justify="center"
  71. ).pack(pady=10)
  72. # Переменные для чекбоксов
  73. auth_vars = {
  74. "smartcard": tk.BooleanVar(),
  75. "pin": tk.BooleanVar(),
  76. "biometry": tk.BooleanVar(),
  77. "mfa": tk.BooleanVar()
  78. }
  79. tk.Checkbutton(
  80. root,
  81. text="Смарт‑карта",
  82. variable=auth_vars["smartcard"],
  83. bg="#f0f8ff",
  84. font=("Arial", 11)
  85. ).pack(anchor="w", padx=100, pady=5)
  86. tk.Checkbutton(
  87. root,
  88. text="PIN‑код (6+ цифр)",
  89. variable=auth_vars["pin"],
  90. bg="#f0f8ff",
  91. font=("Arial", 11)
  92. ).pack(anchor="w", padx=100, pady=5)
  93. tk.Checkbutton(
  94. root,
  95. text="Биометрия (отпечаток)",
  96. variable=auth_vars["biometry"],
  97. bg="#f0f8ff",
  98. font=("Arial", 11)
  99. ).pack(anchor="w", padx=100, pady=5)
  100. tk.Checkbutton(
  101. root,
  102. text="Многофакторная аутентификация (MFA)",
  103. variable=auth_vars["mfa"],
  104. bg="#f0f8ff",
  105. font=("Arial", 11)
  106. ).pack(anchor="w", padx=100, pady=5)
  107. # Кнопка проверки
  108. tk.Button(
  109. root,
  110. text="Применить настройки",
  111. command=check_scene_1,
  112. bg="#27ae60",
  113. fg="white",
  114. font=("Arial", 12),
  115. padx=20
  116. ).pack(pady=30)
  117. def check_scene_1():
  118. auth_vars = {}
  119. """Проверка условий сцены 1"""
  120. selected = [
  121. auth_vars["smartcard"].get(),
  122. auth_vars["pin"].get(),
  123. auth_vars["biometry"].get(),
  124. auth_vars["mfa"].get()
  125. ]
  126. if sum(selected) >= 2 and auth_vars["mfa"].get():
  127. score += 10
  128. messagebox.showinfo("Успех", "Правильно! MFA + ещё один метод обеспечивают надёжную защиту.")
  129. current_scene += 1
  130. display_scene()
  131. else:
  132. messagebox.showwarning(
  133. "Ошибка",
  134. "Выберите минимум 2 метода, включая MFA."
  135. )
  136. def scene_2():
  137. """Сцена 2: Контроль вывода на печать"""
  138. tk.Label(
  139. root,
  140. text="Сцена 2: Настройка контроля печати",
  141. font=("Arial", 18, "bold"),
  142. bg="#f0f8ff",
  143. fg="#2c3e50"
  144. ).pack(pady=20)
  145. tk.Label(
  146. root,
  147. text="Настройте правила вывода документов на принтер.",
  148. font=("Arial", 12),
  149. bg="#f0f8ff",
  150. fg="#34495e",
  151. wraplength=700,
  152. justify="center"
  153. ).pack(pady=10)
  154. # Максимальное число копий
  155. tk.Label(
  156. root,
  157. text="Максимальное число копий:",
  158. font=("Arial", 11),
  159. bg="#f0f8ff"
  160. ).pack(anchor="w", padx=100, pady=5)
  161. copies_var = tk.IntVar(value=1)
  162. ttk.Spinbox(
  163. root,
  164. from_=1,
  165. to=10,
  166. textvariable=copies_var,
  167. width=5
  168. ).pack(anchor="w", padx=100, pady=5)
  169. # Водяной знак
  170. tk.Label(
  171. root,
  172. text="Добавить водяной знак:",
  173. font=("Arial", 11),
  174. bg="#f0f8ff"
  175. ).pack(anchor="w", padx=100, pady=5)
  176. watermark_var = tk.StringVar(value="Конфиденциально")
  177. watermark_options = [
  178. "Нет",
  179. "Конфиденциально",
  180. "ФИО пользователя",
  181. "Дата и время",
  182. "ID задания"
  183. ]
  184. ttk.Combobox(
  185. root,
  186. textvariable=watermark_var,
  187. values=watermark_options,
  188. state="readonly",
  189. width=20
  190. ).pack(anchor="w", padx=100, pady=5)
  191. root = tk.Tk()
  192. root.title("Защитник печати")
  193. root.geometry("800x600")
  194. root.configure(bg="#f0f8ff")
  195. score = 0
  196. current_scene = 1
  197. # Словарь сцен: номер → метод
  198. scenes = {
  199. 1: scene_1,
  200. 2: scene_2,
  201. }
  202. display_scene()
  203. root.mainloop()