import random
import tkinter as tk
from tkinter import messagebox

class NumberGuessingGame:
    def __init__(self, master):
        self.master = master
        self.master.title("Number Guessing Game")
        
        # Generate a random number for the player to guess
        self.number_to_guess = random.randint(1, 100)
        self.attempts = 0
        self.max_attempts = 5

        # Create GUI elements
        self.create_widgets()

    def create_widgets(self):
        self.guess_frame = tk.Frame(self.master)
        self.guess_frame.pack(padx=20, pady=20)

        self.guess_label = tk.Label(self.guess_frame, text="Enter your guess:", fg="blue")
        self.guess_label.grid(row=0, column=0)

        self.entry_guess = tk.Entry(self.guess_frame)
        self.entry_guess.grid(row=0, column=1)

        self.guess_button = tk.Button(self.guess_frame, text="Guess", command=self.check_guess, bg="lightblue")
        self.guess_button.grid(row=0, column=2)

        self.result_label = tk.Label(self.master, text="", fg="green")
        self.result_label.pack(pady=10)

        self.attempts_label = tk.Label(self.master, text=f"Attempts: {self.attempts}/{self.max_attempts}", fg="red")
        self.attempts_label.pack()

    def check_guess(self):
        try:
            guess = int(self.entry_guess.get())
            self.attempts += 1
            self.attempts_label.config(text=f"Attempts: {self.attempts}/{self.max_attempts}")

            if guess < self.number_to_guess:
                self.result_label.config(text="Too low! Try again. (Hint: The number is between 1 and 100)", fg="blue")
            elif guess > self.number_to_guess:
                self.result_label.config(text="Too high! Try again. (Hint: The number is between 1 and 100)", fg="blue")
            else:
                self.result_label.config(text="Congratulations! You guessed the number correctly!", fg="green")
                messagebox.showinfo("Congratulations", "You guessed the number correctly!")
                self.master.destroy()
            
            if self.attempts == 3:
                messagebox.showinfo("Hint", "You have used 3 attempts. Here's a free hint: The number is an even number.")
        except ValueError:
            messagebox.showerror("Error", "Please enter a valid number.")

def main():
    root = tk.Tk()
    root.configure(bg="lightyellow")
    game = NumberGuessingGame(root)
    root.mainloop()

if __name__ == "__main__":
    main()