here2share

# tk_Virtual_Maze.py

Dec 20th, 2025
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.34 KB | None | 0 0
  1. # tk_Virtual_Maze.py
  2.  
  3. import tkinter as tk
  4. import random
  5. import itertools
  6.  
  7. seeded = random.Random(5318008)
  8. numbers = list(range(1, 100))
  9. seeded.shuffle(numbers)
  10.  
  11. STEP_LIMIT_PER_LEVEL = 25
  12.  
  13. root = tk.Tk()
  14. root.title("# tk_Virtual_Maze.py")
  15.  
  16. status_var = tk.StringVar()
  17.  
  18. def draw_door(canvas, num):
  19.     canvas.delete("all")
  20.     w = int(canvas["width"])
  21.     h = int(canvas["height"])
  22.     canvas.create_rectangle(0, 0, w, h, fill="#d2b48c", outline="#8b6b45", width=3)
  23.     canvas.create_rectangle(15, 20, w-15, 90, fill="#e6cfa8", outline="#8b6b45", width=2)
  24.     canvas.create_rectangle(20, 25, w-20, 85, fill="#d9b98a", outline="")
  25.     canvas.create_rectangle(15, h-90, w-15, h-20, fill="#e6cfa8", outline="#8b6b45", width=2)
  26.     canvas.create_rectangle(20, h-85, w-20, h-25, fill="#d9b98a", outline="")
  27.     canvas.create_text(w//2, 50, text=str(num), font=("Arial", 18, ""))
  28.     knob_x = w - 12
  29.     knob_y = h//2
  30.     for r, color in [(10, "#bfc3c7"), (7, "#d9dde0"), (3, "#f5f6f7")]:
  31.         canvas.create_oval(knob_x-r, knob_y-r, knob_x+r, knob_y+r, fill=color, outline="")
  32.  
  33. def get_doors():
  34.     global current_maze
  35.     current_maze = []
  36.     for combo in itertools.combinations(range(1, level+7), 3):
  37.         c = list(combo)
  38.         c.append(level+8)
  39.         random.shuffle(c)
  40.         current_maze.append(tuple(c))
  41.     random.shuffle(current_maze)
  42.     return current_maze[:STEP_LIMIT_PER_LEVEL]
  43.  
  44. def update_status():
  45.     status_var.set(f"Level: {level} | Steps: {steps+1} | {score}")
  46.  
  47. def door_clicked(choice, door_step):
  48.     global steps, points, score, level, checkpoints
  49.     steps += 1
  50.     positions = [numbers.index(d) for d in door_step]
  51.     sorted_points = sorted(positions)
  52.     pos = numbers.index(choice)
  53.     if pos == sorted_points[1]:
  54.         points_awarded = 1
  55.     elif pos == sorted_points[2]:
  56.         points_awarded = random.randint(3, 7)
  57.     elif pos == sorted_points[3]:
  58.         points_awarded = 12
  59.     else:
  60.         points_awarded = 0
  61.     points += points_awarded
  62.     checkpoints += points_awarded
  63.     print(checkpoints)
  64.     if not doors:
  65.         if (level == 10 or checkpoints < 100):
  66.             status_var.set(f"Game Over! Total Of Gold Found: {points}")
  67.             for c in door_canvases:
  68.                 c.unbind("<Button-1>")
  69.             return
  70.         level += 1
  71.         steps = 0
  72.         score = f"Gold: {points}"
  73.         checkpoints = 0
  74.         doors[:] = get_doors()
  75.     update_status()
  76.     show_doors()
  77.  
  78. def show_doors():
  79.     door_step = doors.pop()
  80.     for i, num in enumerate(door_step):
  81.         draw_door(door_canvases[i], '?' if num == level+8 else num)
  82.         door_canvases[i].bind(
  83.             "<Button-1>",
  84.             lambda e, n=num, ds=door_step: door_clicked(n, ds)
  85.         )
  86.  
  87. def reset_game():
  88.     global level, steps, points, score, doors, checkpoints
  89.     level = 1
  90.     steps = 0
  91.     points = 0
  92.     score = 'Gold: Updates Each Level'
  93.     checkpoints = 0
  94.     doors = get_doors()
  95.     update_status()
  96.     for c in door_canvases:
  97.         c.bind("<Button-1>", lambda e: None)
  98.     show_doors()
  99.  
  100. door_frame = tk.Frame(root)
  101. door_frame.pack(pady=20)
  102.  
  103. door_canvases = []
  104. for i in range(4):
  105.     c = tk.Canvas(door_frame, width=120, height=200, bg="#d2b48c", highlightthickness=2, highlightbackground="#8b6b45")
  106.     c.grid(row=0, column=i, padx=20)
  107.     door_canvases.append(c)
  108.  
  109. status_label = tk.Label(root, textvariable=status_var, font=("Arial", 14))
  110. status_label.pack(pady=10)
  111.  
  112. reset_button = tk.Button(root, text="RESET", font=("Arial", 12, "bold"), fg="#ffffff", bg="#aa0000", width=10, command=reset_game)
  113. reset_button.pack(anchor="e", padx=20, pady=10)
  114.  
  115. reset_game()
  116.  
  117. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment