| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- import tkinter as tk
- from tkinter import messagebox, ttk
- def display_scene():
- """Очищает окно и отображает текущую сцену"""
- for widget in root.winfo_children():
- widget.destroy()
- if current_scene in scenes:
- scenes[current_scene]()
- else:
- game_over()
- def game_over():
- """Финал игры: показ результата"""
- frame = tk.Frame(root, bg="#f0f8ff")
- frame.pack(pady=50)
- tk.Label(
- frame,
- text="Игра завершена!",
- font=("Arial", 24, "bold"),
- bg="#f0f8ff",
- fg="#2c3e50"
- ).pack(pady=20)
- # Оценка результата по набранным баллам
- if score >= 45:
- result = "Отлично! Система полностью защищена."
- elif score >= 30:
- result = "Хорошо! Есть небольшие уязвимости."
- elif score >= 15:
- result = "Удовлетворительно. Требуется доработка защиты."
- else:
- result = "Критические уязвимости! Пересмотрите политику безопасности."
- tk.Label(
- frame,
- text=f"Ваш итоговый счёт: {score}/50\n\n{result}",
- font=("Arial", 14),
- bg="#f0f8ff",
- fg="#2c3e50",
- justify="center"
- ).pack(pady=20)
- tk.Button(
- frame,
- text="Начать заново",
- command=restart,
- bg="#3498db",
- fg="white",
- font=("Arial", 12),
- padx=20
- ).pack(pady=10)
- def restart():
- """Перезапуск игры"""
- score = 0
- current_scene = 1
- display_scene()
- # --- Сцены игры ---
- def scene_1():
- """Сцена 1: Аутентификация пользователей"""
- tk.Label(
- root,
- text="Сцена 1: Настройка аутентификации",
- font=("Arial", 18, "bold"),
- bg="#f0f8ff",
- fg="#2c3e50"
- ).pack(pady=20)
- tk.Label(
- root,
- text="Выберите методы аутентификации для доступа к принтеру.",
- font=("Arial", 12),
- bg="#f0f8ff",
- fg="#34495e",
- wraplength=700,
- justify="center"
- ).pack(pady=10)
- # Переменные для чекбоксов
- auth_vars = {
- "smartcard": tk.BooleanVar(),
- "pin": tk.BooleanVar(),
- "biometry": tk.BooleanVar(),
- "mfa": tk.BooleanVar()
- }
- tk.Checkbutton(
- root,
- text="Смарт‑карта",
- variable=auth_vars["smartcard"],
- bg="#f0f8ff",
- font=("Arial", 11)
- ).pack(anchor="w", padx=100, pady=5)
- tk.Checkbutton(
- root,
- text="PIN‑код (6+ цифр)",
- variable=auth_vars["pin"],
- bg="#f0f8ff",
- font=("Arial", 11)
- ).pack(anchor="w", padx=100, pady=5)
- tk.Checkbutton(
- root,
- text="Биометрия (отпечаток)",
- variable=auth_vars["biometry"],
- bg="#f0f8ff",
- font=("Arial", 11)
- ).pack(anchor="w", padx=100, pady=5)
- tk.Checkbutton(
- root,
- text="Многофакторная аутентификация (MFA)",
- variable=auth_vars["mfa"],
- bg="#f0f8ff",
- font=("Arial", 11)
- ).pack(anchor="w", padx=100, pady=5)
- # Кнопка проверки
- tk.Button(
- root,
- text="Применить настройки",
- command=check_scene_1,
- bg="#27ae60",
- fg="white",
- font=("Arial", 12),
- padx=20
- ).pack(pady=30)
- def check_scene_1():
- auth_vars = {}
- """Проверка условий сцены 1"""
- selected = [
- auth_vars["smartcard"].get(),
- auth_vars["pin"].get(),
- auth_vars["biometry"].get(),
- auth_vars["mfa"].get()
- ]
- if sum(selected) >= 2 and auth_vars["mfa"].get():
- score += 10
- messagebox.showinfo("Успех", "Правильно! MFA + ещё один метод обеспечивают надёжную защиту.")
- current_scene += 1
- display_scene()
- else:
- messagebox.showwarning(
- "Ошибка",
- "Выберите минимум 2 метода, включая MFA."
- )
- def scene_2():
- """Сцена 2: Контроль вывода на печать"""
- tk.Label(
- root,
- text="Сцена 2: Настройка контроля печати",
- font=("Arial", 18, "bold"),
- bg="#f0f8ff",
- fg="#2c3e50"
- ).pack(pady=20)
- tk.Label(
- root,
- text="Настройте правила вывода документов на принтер.",
- font=("Arial", 12),
- bg="#f0f8ff",
- fg="#34495e",
- wraplength=700,
- justify="center"
- ).pack(pady=10)
- # Максимальное число копий
- tk.Label(
- root,
- text="Максимальное число копий:",
- font=("Arial", 11),
- bg="#f0f8ff"
- ).pack(anchor="w", padx=100, pady=5)
- copies_var = tk.IntVar(value=1)
- ttk.Spinbox(
- root,
- from_=1,
- to=10,
- textvariable=copies_var,
- width=5
- ).pack(anchor="w", padx=100, pady=5)
- # Водяной знак
- tk.Label(
- root,
- text="Добавить водяной знак:",
- font=("Arial", 11),
- bg="#f0f8ff"
- ).pack(anchor="w", padx=100, pady=5)
- watermark_var = tk.StringVar(value="Конфиденциально")
- watermark_options = [
- "Нет",
- "Конфиденциально",
- "ФИО пользователя",
- "Дата и время",
- "ID задания"
- ]
- ttk.Combobox(
- root,
- textvariable=watermark_var,
- values=watermark_options,
- state="readonly",
- width=20
- ).pack(anchor="w", padx=100, pady=5)
- root = tk.Tk()
- root.title("Защитник печати")
- root.geometry("800x600")
- root.configure(bg="#f0f8ff")
- score = 0
- current_scene = 1
- # Словарь сцен: номер → метод
- scenes = {
- 1: scene_1,
- 2: scene_2,
- }
- display_scene()
- root.mainloop()
|