Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # tk_Virtual_Maze.py
- import tkinter as tk
- import random
- import itertools
- seeded = random.Random(5318008)
- numbers = list(range(1, 100))
- seeded.shuffle(numbers)
- STEP_LIMIT_PER_LEVEL = 25
- root = tk.Tk()
- root.title("# tk_Virtual_Maze.py")
- status_var = tk.StringVar()
- def draw_door(canvas, num):
- canvas.delete("all")
- w = int(canvas["width"])
- h = int(canvas["height"])
- canvas.create_rectangle(0, 0, w, h, fill="#d2b48c", outline="#8b6b45", width=3)
- canvas.create_rectangle(15, 20, w-15, 90, fill="#e6cfa8", outline="#8b6b45", width=2)
- canvas.create_rectangle(20, 25, w-20, 85, fill="#d9b98a", outline="")
- canvas.create_rectangle(15, h-90, w-15, h-20, fill="#e6cfa8", outline="#8b6b45", width=2)
- canvas.create_rectangle(20, h-85, w-20, h-25, fill="#d9b98a", outline="")
- canvas.create_text(w//2, 50, text=str(num), font=("Arial", 18, ""))
- knob_x = w - 12
- knob_y = h//2
- for r, color in [(10, "#bfc3c7"), (7, "#d9dde0"), (3, "#f5f6f7")]:
- canvas.create_oval(knob_x-r, knob_y-r, knob_x+r, knob_y+r, fill=color, outline="")
- def get_doors():
- global current_maze
- current_maze = []
- for combo in itertools.combinations(range(1, level+7), 3):
- c = list(combo)
- c.append(level+8)
- random.shuffle(c)
- current_maze.append(tuple(c))
- random.shuffle(current_maze)
- return current_maze[:STEP_LIMIT_PER_LEVEL]
- def update_status():
- status_var.set(f"Level: {level} | Steps: {steps+1} | {score}")
- def door_clicked(choice, door_step):
- global steps, points, score, level, checkpoints
- steps += 1
- positions = [numbers.index(d) for d in door_step]
- sorted_points = sorted(positions)
- pos = numbers.index(choice)
- if pos == sorted_points[1]:
- points_awarded = 1
- elif pos == sorted_points[2]:
- points_awarded = random.randint(3, 7)
- elif pos == sorted_points[3]:
- points_awarded = 12
- else:
- points_awarded = 0
- points += points_awarded
- checkpoints += points_awarded
- print(checkpoints)
- if not doors:
- if (level == 10 or checkpoints < 100):
- status_var.set(f"Game Over! Total Of Gold Found: {points}")
- for c in door_canvases:
- c.unbind("<Button-1>")
- return
- level += 1
- steps = 0
- score = f"Gold: {points}"
- checkpoints = 0
- doors[:] = get_doors()
- update_status()
- show_doors()
- def show_doors():
- door_step = doors.pop()
- for i, num in enumerate(door_step):
- draw_door(door_canvases[i], '?' if num == level+8 else num)
- door_canvases[i].bind(
- "<Button-1>",
- lambda e, n=num, ds=door_step: door_clicked(n, ds)
- )
- def reset_game():
- global level, steps, points, score, doors, checkpoints
- level = 1
- steps = 0
- points = 0
- score = 'Gold: Updates Each Level'
- checkpoints = 0
- doors = get_doors()
- update_status()
- for c in door_canvases:
- c.bind("<Button-1>", lambda e: None)
- show_doors()
- door_frame = tk.Frame(root)
- door_frame.pack(pady=20)
- door_canvases = []
- for i in range(4):
- c = tk.Canvas(door_frame, width=120, height=200, bg="#d2b48c", highlightthickness=2, highlightbackground="#8b6b45")
- c.grid(row=0, column=i, padx=20)
- door_canvases.append(c)
- status_label = tk.Label(root, textvariable=status_var, font=("Arial", 14))
- status_label.pack(pady=10)
- reset_button = tk.Button(root, text="RESET", font=("Arial", 12, "bold"), fg="#ffffff", bg="#aa0000", width=10, command=reset_game)
- reset_button.pack(anchor="e", padx=20, pady=10)
- reset_game()
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment