VICTORINA.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import tkinter as tk
  2. from tkinter import messagebox
  3. class SimpleGame:
  4. def __init__(self, root):
  5. self.root = root
  6. self.root.title("Викторина по лекции")
  7. self.root.geometry("500x450")
  8. self.root.configure(bg="#1e1e2e")
  9. # Данные игры
  10. self.score = 0
  11. self.current = 0
  12. # Вопросы и ответы (из лекции)
  13. self.questions = [
  14. {"q": "Внезапный отказ — это...", "a": "Резкое нарушение работоспособности"},
  15. {"q": "Постепенный отказ свидетельствует о...", "a": "Точности"},
  16. {"q": "Прерывистые отказы иначе называют...", "a": "Сбои"},
  17. {"q": "Что помогает от прерывистых отказов в дискретных системах?", "a": "Коды"},
  18. {"q": "Сколько групп методов восстановления? (цифра)", "a": "4"}
  19. ]
  20. # Интерфейс
  21. self.score_label = tk.Label(
  22. root,
  23. text=f"Счёт: {self.score}",
  24. font=("Arial", 14, "bold"),
  25. bg="#1e1e2e",
  26. fg="#89b4fa"
  27. )
  28. self.score_label.pack(pady=10)
  29. self.question_label = tk.Label(
  30. root,
  31. text="",
  32. font=("Arial", 13),
  33. bg="#1e1e2e",
  34. fg="white",
  35. wraplength=450,
  36. justify="center"
  37. )
  38. self.question_label.pack(pady=40)
  39. self.entry = tk.Entry(
  40. root,
  41. font=("Arial", 12),
  42. justify="center",
  43. bg="#313244",
  44. fg="white",
  45. insertbackground="white"
  46. )
  47. self.entry.pack(pady=10)
  48. self.entry.bind("<Return>", lambda e: self.check_answer())
  49. self.check_btn = tk.Button(
  50. root,
  51. text="Ответить",
  52. font=("Arial", 12),
  53. bg="#89b4fa",
  54. fg="#1e1e2e",
  55. activebackground="#89b4fa",
  56. cursor="hand2",
  57. command=self.check_answer
  58. )
  59. self.check_btn.pack(pady=10)
  60. self.feedback = tk.Label(
  61. root,
  62. text="",
  63. font=("Arial", 11),
  64. bg="#1e1e2e",
  65. fg="#a6e3a1"
  66. )
  67. self.feedback.pack(pady=20)
  68. self.next_btn = tk.Button(
  69. root,
  70. text="Следующий вопрос →",
  71. font=("Arial", 11),
  72. bg="#585b70",
  73. fg="white",
  74. state="disabled",
  75. cursor="hand2",
  76. command=self.next_question
  77. )
  78. self.next_btn.pack(pady=10)
  79. # Загружаем первый вопрос
  80. self.show_question()
  81. def show_question(self):
  82. self.question_label.config(text=f"{self.questions[self.current]['q']}")
  83. self.entry.delete(0, tk.END)
  84. self.entry.focus()
  85. self.feedback.config(text="")
  86. self.next_btn.config(state="disabled")
  87. self.check_btn.config(state="normal")
  88. def check_answer(self):
  89. user_answer = self.entry.get().strip().lower()
  90. correct = self.questions[self.current]["a"].lower()
  91. if user_answer == correct:
  92. self.score += 1
  93. self.score_label.config(text=f"Счёт: {self.score}")
  94. self.feedback.config(text=" Правильно! +1 балл", fg="#a6e3a1")
  95. else:
  96. self.feedback.config(
  97. text=f" Неправильно! Правильный ответ: {self.questions[self.current]['a']}",
  98. fg="#f38ba8"
  99. )
  100. self.check_btn.config(state="disabled")
  101. self.next_btn.config(state="normal")
  102. def next_question(self):
  103. self.current += 1
  104. if self.current < len(self.questions):
  105. self.show_question()
  106. else:
  107. messagebox.showinfo(
  108. "Игра окончена",
  109. f"Игра завершена!\n\nВаш счёт: {self.score} из {len(self.questions)}"
  110. )
  111. self.restart()
  112. def restart(self):
  113. self.score = 0
  114. self.current = 0
  115. self.score_label.config(text=f"Счёт: {self.score}")
  116. self.show_question()
  117. if __name__ == "__main__":
  118. root = tk.Tk()
  119. game = SimpleGame(root)
  120. root.mainloop()