0% found this document useful (0 votes)
7 views11 pages

Number Reaction Game in Python

source code of number reaction

Uploaded by

bnchavan519
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views11 pages

Number Reaction Game in Python

source code of number reaction

Uploaded by

bnchavan519
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

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]()

You might also like