|
@@ -0,0 +1,138 @@
|
|
|
|
|
+import tkinter as tk
|
|
|
|
|
+from tkinter import messagebox
|
|
|
|
|
+
|
|
|
|
|
+class SimpleGame:
|
|
|
|
|
+ def __init__(self, root):
|
|
|
|
|
+ self.root = root
|
|
|
|
|
+ self.root.title("Викторина по лекции")
|
|
|
|
|
+ self.root.geometry("500x450")
|
|
|
|
|
+ self.root.configure(bg="#1e1e2e")
|
|
|
|
|
+
|
|
|
|
|
+ # Данные игры
|
|
|
|
|
+ self.score = 0
|
|
|
|
|
+ self.current = 0
|
|
|
|
|
+
|
|
|
|
|
+ # Вопросы и ответы (из лекции)
|
|
|
|
|
+ self.questions = [
|
|
|
|
|
+ {"q": "Внезапный отказ — это...", "a": "Резкое нарушение работоспособности"},
|
|
|
|
|
+ {"q": "Постепенный отказ свидетельствует о...", "a": "Точности"},
|
|
|
|
|
+ {"q": "Прерывистые отказы иначе называют...", "a": "Сбои"},
|
|
|
|
|
+ {"q": "Что помогает от прерывистых отказов в дискретных системах?", "a": "Коды"},
|
|
|
|
|
+ {"q": "Сколько групп методов восстановления? (цифра)", "a": "4"}
|
|
|
|
|
+ ]
|
|
|
|
|
+
|
|
|
|
|
+ # Интерфейс
|
|
|
|
|
+ self.score_label = tk.Label(
|
|
|
|
|
+ root,
|
|
|
|
|
+ text=f"Счёт: {self.score}",
|
|
|
|
|
+ font=("Arial", 14, "bold"),
|
|
|
|
|
+ bg="#1e1e2e",
|
|
|
|
|
+ fg="#89b4fa"
|
|
|
|
|
+ )
|
|
|
|
|
+ self.score_label.pack(pady=10)
|
|
|
|
|
+
|
|
|
|
|
+ self.question_label = tk.Label(
|
|
|
|
|
+ root,
|
|
|
|
|
+ text="",
|
|
|
|
|
+ font=("Arial", 13),
|
|
|
|
|
+ bg="#1e1e2e",
|
|
|
|
|
+ fg="white",
|
|
|
|
|
+ wraplength=450,
|
|
|
|
|
+ justify="center"
|
|
|
|
|
+ )
|
|
|
|
|
+ self.question_label.pack(pady=40)
|
|
|
|
|
+
|
|
|
|
|
+ self.entry = tk.Entry(
|
|
|
|
|
+ root,
|
|
|
|
|
+ font=("Arial", 12),
|
|
|
|
|
+ justify="center",
|
|
|
|
|
+ bg="#313244",
|
|
|
|
|
+ fg="white",
|
|
|
|
|
+ insertbackground="white"
|
|
|
|
|
+ )
|
|
|
|
|
+ self.entry.pack(pady=10)
|
|
|
|
|
+ self.entry.bind("<Return>", lambda e: self.check_answer())
|
|
|
|
|
+
|
|
|
|
|
+ self.check_btn = tk.Button(
|
|
|
|
|
+ root,
|
|
|
|
|
+ text="Ответить",
|
|
|
|
|
+ font=("Arial", 12),
|
|
|
|
|
+ bg="#89b4fa",
|
|
|
|
|
+ fg="#1e1e2e",
|
|
|
|
|
+ activebackground="#89b4fa",
|
|
|
|
|
+ cursor="hand2",
|
|
|
|
|
+ command=self.check_answer
|
|
|
|
|
+ )
|
|
|
|
|
+ self.check_btn.pack(pady=10)
|
|
|
|
|
+
|
|
|
|
|
+ self.feedback = tk.Label(
|
|
|
|
|
+ root,
|
|
|
|
|
+ text="",
|
|
|
|
|
+ font=("Arial", 11),
|
|
|
|
|
+ bg="#1e1e2e",
|
|
|
|
|
+ fg="#a6e3a1"
|
|
|
|
|
+ )
|
|
|
|
|
+ self.feedback.pack(pady=20)
|
|
|
|
|
+
|
|
|
|
|
+ self.next_btn = tk.Button(
|
|
|
|
|
+ root,
|
|
|
|
|
+ text="Следующий вопрос →",
|
|
|
|
|
+ font=("Arial", 11),
|
|
|
|
|
+ bg="#585b70",
|
|
|
|
|
+ fg="white",
|
|
|
|
|
+ state="disabled",
|
|
|
|
|
+ cursor="hand2",
|
|
|
|
|
+ command=self.next_question
|
|
|
|
|
+ )
|
|
|
|
|
+ self.next_btn.pack(pady=10)
|
|
|
|
|
+
|
|
|
|
|
+ # Загружаем первый вопрос
|
|
|
|
|
+ self.show_question()
|
|
|
|
|
+
|
|
|
|
|
+ def show_question(self):
|
|
|
|
|
+ self.question_label.config(text=f"{self.questions[self.current]['q']}")
|
|
|
|
|
+ self.entry.delete(0, tk.END)
|
|
|
|
|
+ self.entry.focus()
|
|
|
|
|
+ self.feedback.config(text="")
|
|
|
|
|
+ self.next_btn.config(state="disabled")
|
|
|
|
|
+ self.check_btn.config(state="normal")
|
|
|
|
|
+
|
|
|
|
|
+ def check_answer(self):
|
|
|
|
|
+ user_answer = self.entry.get().strip().lower()
|
|
|
|
|
+ correct = self.questions[self.current]["a"].lower()
|
|
|
|
|
+
|
|
|
|
|
+ if user_answer == correct:
|
|
|
|
|
+ self.score += 1
|
|
|
|
|
+ self.score_label.config(text=f"Счёт: {self.score}")
|
|
|
|
|
+ self.feedback.config(text=" Правильно! +1 балл", fg="#a6e3a1")
|
|
|
|
|
+ else:
|
|
|
|
|
+ self.feedback.config(
|
|
|
|
|
+ text=f" Неправильно! Правильный ответ: {self.questions[self.current]['a']}",
|
|
|
|
|
+ fg="#f38ba8"
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ self.check_btn.config(state="disabled")
|
|
|
|
|
+ self.next_btn.config(state="normal")
|
|
|
|
|
+
|
|
|
|
|
+ def next_question(self):
|
|
|
|
|
+ self.current += 1
|
|
|
|
|
+ if self.current < len(self.questions):
|
|
|
|
|
+ self.show_question()
|
|
|
|
|
+ else:
|
|
|
|
|
+ messagebox.showinfo(
|
|
|
|
|
+ "Игра окончена",
|
|
|
|
|
+ f"Игра завершена!\n\nВаш счёт: {self.score} из {len(self.questions)}"
|
|
|
|
|
+ )
|
|
|
|
|
+ self.restart()
|
|
|
|
|
+
|
|
|
|
|
+ def restart(self):
|
|
|
|
|
+ self.score = 0
|
|
|
|
|
+ self.current = 0
|
|
|
|
|
+ self.score_label.config(text=f"Счёт: {self.score}")
|
|
|
|
|
+ self.show_question()
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+if __name__ == "__main__":
|
|
|
|
|
+ root = tk.Tk()
|
|
|
|
|
+ game = SimpleGame(root)
|
|
|
|
|
+ root.mainloop()
|