Egg Catcher

What you have to do? Just catch the eggs falling from the sky in your basket by moving it horizontally. Quick, before the eggs fall and break. Guess the number


Download

python-icon
                        
    # import modules
    from itertools import cycle
    from random import randrange
    from tkinter import *
    from tkinter import messagebox


    # Set Canvas Size
    window_width = 800
    window_height = 400

    # Create main window
    tk = Tk()

    # Set window title and icon
    tk.title("Egg Catcher")
    tk.iconbitmap("logo-ico.ico")

    # Create Canvas
    c = Canvas(tk, width=window_width, height=window_height, background='#00cccc')
    c.create_rectangle(-5, window_height - 100, window_width + 5,
                        window_height + 5, fill='#00cc00', width=0)
    c.create_oval(-80, -80, 120, 120, fill='#ffcc00', width=0)
    c.pack()

    # Declare Variables
    color_cycle = cycle(['#ff4d4d', '#ff66cc', '#80ff80', '#ff9966', '#ffff66', '#aa80ff', '#00e64d'])
    egg_width = 45
    egg_height = 55
    egg_score = 10
    egg_speed = 500
    egg_interval = 4000
    difficulty_factor = 0.95
    catcher_color = '#ff0000'
    catcher_width = 100
    catcher_height = 100
    catcher_start_x = window_width / 2 - catcher_width / 2
    catcher_start_y = window_height - catcher_height - 20
    catcher_start_x2 = catcher_start_x + catcher_width
    catcher_start_y2 = catcher_start_y + catcher_height

    catcher = c.create_arc(catcher_start_x, catcher_start_y, catcher_start_x2, catcher_start_y2,
                            start=200, extent=140, style='arc', outline=catcher_color, width=8)

    score = 0
    score_text = c.create_text(10, 10, anchor='nw', font=('Arial', 16, 'bold'),
                                fill='#000000', text='Score : ' + str(score))

    lives_remaining = 3
    lives_text = c.create_text(window_width-10, 10, anchor='ne', font=('Arial', 16, 'bold'),
                                fill='#000000', text='Lives : ' + str(lives_remaining))

    eggs = []

      # Functions
    # Function to Drop Eggs  
    def create_eggs():
        x = randrange(10, 740)
        y = 40
        new_egg = c.create_oval(x, y, x+egg_width, y+egg_height, fill=next(color_cycle), width=0)
        eggs.append(new_egg)
        tk.after(egg_interval, create_eggs)

    # Function to Move Eggs
    def move_eggs():
        for egg in eggs:
            (egg_x, egg_y, egg_x2, egg_y2) = c.coords(egg)
            c.move(egg,0,10)
            if egg_y2 > window_height:
                egg_dropped(egg)
        tk.after(egg_speed, move_eggs)

    # Function to Check Dropped Egg
    def egg_dropped(egg):
        eggs.remove(egg)
        c.delete(egg)
        lose_a_life()
        if lives_remaining == 0:
            messagebox.showinfo('GAME OVER!', 'Final Score : ' + str(score))
            tk.destroy()

    # Function to reduce Life
    def lose_a_life():
        global lives_remaining
        lives_remaining -= 1
        c.itemconfigure(lives_text, text='Lives : ' + str(lives_remaining))

    # Function to check Catch
    def catch_check():
        (catcher_x, catcher_y, catcher_x2, catcher_y2) = c.coords(catcher)
        for egg in eggs:
            (egg_x, egg_y, egg_x2, egg_y2) = c.coords(egg)
            if catcher_x < egg_x and egg_x2 < catcher_x2 and catcher_y2 - egg_y2 < 40:
                eggs.remove(egg)
                c.delete(egg)
                increase_score(egg_score)
        tk.after(100, catch_check)

    # Function to increase Score
    def increase_score(points):
        global score, egg_speed, egg_interval
        score += points
        egg_speed = int(egg_speed * difficulty_factor)
        egg_interval = int(egg_interval * difficulty_factor)
        c.itemconfigure(score_text, text='Score : ' + str(score))

    # Functions to move tray Left and Right
    def move_left(event):
        (x1, y1, x2, y2) = c.coords(catcher)
        if x1 > 0:
            c.move(catcher, -20, 0)

    def move_right(event):
        (x1, y1, x2, y2) = c.coords(catcher)
        if x2 < window_width:
            c.move(catcher, 20, 0)


    c.bind('', move_left)
    c.bind('', move_right)
    c.focus_set()

    tk.after(1000, create_eggs)
    tk.after(1000, move_eggs)
    tk.after(1000, catch_check)

    tk.mainloop()