source code and working
import tkinter as tk
from tkinter import messagebox
import random, time, json, os, winsound
# ---------------- ADVANCED NUMBER REACTION GAME ---------------- #
class NumberReactionGame:
def __init__(self, root):
[Link] = root
[Link]("Number Reaction Pro")
[Link]("800x550")
[Link](bg="#0f172a")
[Link] = None
[Link] = None
[Link] = []
self.current_player = 0
self.question_number = 0
self.start_time = 0
[Link] = 0
self.time_limit = 0
self.num_questions = 0
[Link] = 0
self.leaderboard_file = "[Link]"
self.create_main_menu()
# ---------------- UTILITY ---------------- #
def clear_screen(self):
for w in [Link].winfo_children():
[Link]()
def play_sound(self, kind="beep"):
try:
[Link]()
except:
pass
# ---------------- MAIN MENU ---------------- #
def create_main_menu(self):
self.clear_screen()
[Link]([Link], text="⚡ NUMBER REACTION PRO ⚡", font=("Arial",
28, "bold"),
fg="#38bdf8", bg="#0f172a").pack(pady=30)
[Link]([Link], text="SINGLE PLAYER", font=("Arial", 16, "bold"),
bg="#f59e0b", fg="white", width=20,
command=lambda: self.select_level("single")).pack(pady=10)
[Link]([Link], text="MULTIPLAYER", font=("Arial", 16, "bold"),
bg="#22c55e", fg="white", width=20,
command=lambda: self.select_level("multi")).pack(pady=10)
[Link]([Link], text="LEADERBOARD", font=("Arial", 16, "bold"),
bg="#3b82f6", fg="white", width=20,
command=self.show_leaderboard).pack(pady=10)
[Link]([Link], text="EXIT", font=("Arial", 16, "bold"),
bg="#ef4444", fg="white", width=20,
command=[Link]).pack(pady=10)
# ---------------- LEVEL SELECT ---------------- #
def select_level(self, mode):
[Link] = mode
self.clear_screen()
[Link]([Link], text="Select Level", font=("Arial", 24, "bold"),
fg="white", bg="#0f172a").pack(pady=20)
for lvl in ["Beginner", "Intermediate", "Expert"]:
[Link]([Link], text=lvl, font=("Arial", 16, "bold"),
bg="#f59e0b", fg="white",
command=lambda l=lvl: self.start_mode(l)).pack(pady=10)
[Link]([Link], text="BACK", font=("Arial", 14),
bg="#ef4444", fg="white",
command=self.create_main_menu).pack(pady=20)
# ---------------- START MODE ---------------- #
def start_mode(self, level):
[Link] = level
if [Link] == "multi":
self.ask_player_names()
else:
[Link] = [{"name": "Player", "score": 0, "correct": 0, "time":
0}]
self.current_player = 0
self.prepare_settings()
self.start_game()
# ---------------- PLAYER INPUT ---------------- #
def ask_player_names(self):
self.clear_screen()
[Link]([Link], text="Enter Player Names", font=("Arial", 20,
"bold"),
fg="white", bg="#0f172a").pack(pady=20)
[Link]([Link], text="Player 1", fg="white", bg="#0f172a").pack()
self.p1 = [Link]([Link])
[Link]()
[Link]([Link], text="Player 2", fg="white", bg="#0f172a").pack()
self.p2 = [Link]([Link])
[Link]()
[Link]([Link], text="START", bg="#22c55e", fg="white",
command=self.start_multiplayer).pack(pady=20)
def start_multiplayer(self):
[Link] = [
{"name": [Link](), "score": 0, "correct": 0, "time": 0},
{"name": [Link](), "score": 0, "correct": 0, "time": 0}
]
self.current_player = 0
self.prepare_settings()
self.start_game()
# ---------------- GAME SETTINGS ---------------- #
def prepare_settings(self):
if [Link] == "Beginner":
self.num_questions, self.time_limit = 5, 8
elif [Link] == "Intermediate":
self.num_questions, self.time_limit = 6, 6
else:
self.num_questions, self.time_limit = 8, 5
# ---------------- GAME PLAY ---------------- #
def start_game(self):
self.question_number = 0
[Link] = 0
self.next_question()
def generate_question(self):
if [Link] == "Beginner":
a, b = [Link](1, 10), [Link](1, 10)
op = [Link](['+', '-'])
elif [Link] == "Intermediate":
a, b = [Link](5, 25), [Link](5, 25)
op = [Link](['+', '-', '*'])
else:
a, b = [Link](10, 50), [Link](10, 50)
op = [Link](['+', '-', '*'])
q = f"{a} {op} {b}"
return q, eval(q)
def next_question(self):
self.clear_screen()
if self.question_number >= self.num_questions:
self.show_results()
return
self.question_number += 1
q, [Link] = self.generate_question()
self.start_time = [Link]()
p = [Link][self.current_player]
[Link]([Link], text=f"{p['name']} | {[Link]}", font=("Arial",
18, "bold"),
fg="#38bdf8", bg="#0f172a").pack(pady=10)
self.timer_label = [Link]([Link], text="", font=("Arial", 14),
fg="#f87171", bg="#0f172a")
self.timer_label.pack()
self.q_label = [Link]([Link], text=q, font=("Arial", 30, "bold"),
fg="#facc15", bg="#0f172a")
self.q_label.pack(pady=20)
[Link] = [Link]([Link], font=("Arial", 18))
[Link]()
[Link]([Link], text="SUBMIT", font=("Arial", 14),
bg="#22c55e", fg="white",
command=self.check_answer).pack(pady=10)
self.update_timer()
def update_timer(self):
elapsed = [Link]() - self.start_time
remain = max(0, round(self.time_limit - elapsed, 1))
self.timer_label.config(text=f"Time Left: {remain}s")
if remain <= 0:
[Link]()
else:
[Link](100, self.update_timer)
def timeout(self):
self.play_sound()
[Link] = 0
[Link]("Timeout", "Too Slow!")
self.next_question()
def check_answer(self):
elapsed = [Link]() - self.start_time
p = [Link][self.current_player]
try:
ans = int([Link]())
if ans == [Link] and elapsed <= self.time_limit:
self.play_sound()
[Link] += 1
bonus = [Link] * 2
p["score"] += 10 + bonus
p["correct"] += 1
[Link]("Correct!", f"+{10 + bonus} Points!")
else:
[Link] = 0
[Link]("Wrong!", f"Answer was {[Link]}")
except:
[Link] = 0
[Link]("Error", "Invalid Input")
self.current_player = (self.current_player + 1) % len([Link])
self.next_question()
# ---------------- RESULTS ---------------- #
def show_results(self):
self.clear_screen()
[Link](key=lambda x: x["score"], reverse=True)
[Link]([Link], text="🏆 FINAL RESULTS 🏆", font=("Arial", 24,
"bold"),
fg="#facc15", bg="#0f172a").pack(pady=20)
medals = ["🥇", "🥈", "🥉"]
for i, p in enumerate([Link]):
[Link]([Link],
text=f"{medals[i] if i < 3 else ''} {p['name']} - {p['score']}
pts",
font=("Arial", 18),
fg="white", bg="#0f172a").pack()
self.save_leaderboard()
[Link]([Link], text="MAIN MENU", font=("Arial", 14),
bg="#22c55e", fg="white",
command=self.create_main_menu).pack(pady=20)
# ---------------- LEADERBOARD ---------------- #
def save_leaderboard(self):
data = []
if [Link](self.leaderboard_file):
with open(self.leaderboard_file, "r") as f:
try:
data = [Link](f)
except:
data = []
for p in [Link]:
[Link]({
"name": p["name"],
"score": p["score"],
"level": [Link],
"mode": [Link]
})
with open(self.leaderboard_file, "w") as f:
[Link](data, f, indent=4)
def show_leaderboard(self):
self.clear_screen()
[Link]([Link], text="LEADERBOARD", font=("Arial", 22, "bold"),
fg="#38bdf8", bg="#0f172a").pack(pady=20)
if not [Link](self.leaderboard_file):
[Link]([Link], text="No records yet", fg="white",
bg="#0f172a").pack()
else:
with open(self.leaderboard_file, "r") as f:
data = [Link](f)
for p in sorted(data, key=lambda x: x["score"], reverse=True)[:10]:
[Link]([Link],
text=f"{p['name']} - {p['score']} pts ({p['level']})",
fg="white", bg="#0f172a").pack()
[Link]([Link], text="BACK", bg="#ef4444",
fg="white",
command=self.create_main_menu).pack(pady=20)
# ---------------- RUN ---------------- #
if __name__ == "__main__":
root = [Link]()
game = NumberReactionGame(root)
[Link]()