Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- import math
- import random
- # Кол-во шариков
- BALL_COUNT = 500
- # Диапазоны параметров
- SPEED_RANGE = (1, 5)
- RADIUS_RANGE = (5, 20)
- COLORS = ["red", "green", "blue", "orange", "purple", "cyan", "magenta"]
- # Окно и холст
- root = tk.Tk()
- root.geometry("800x600")
- root.title("Тысяча мячиков")
- canvas = tk.Canvas(root, bg="white")
- canvas.pack(fill=tk.BOTH, expand=True)
- # Цель — положение мыши
- target_x = 300
- target_y = 200
- def update_target(event):
- global target_x, target_y
- target_x = event.x
- target_y = event.y
- canvas.bind("<Motion>", update_target)
- # Один шарик: координаты, радиус, скорость, цвет и ID на canvas
- balls = []
- for _ in range(BALL_COUNT):
- r = random.randint(*RADIUS_RANGE)
- x = random.randint(r, 800 - r)
- y = random.randint(r, 600 - r)
- color = random.choice(COLORS)
- speed = random.uniform(*SPEED_RANGE)
- ball_id = canvas.create_oval(x - r, y - r, x + r, y + r, fill=color, outline="")
- balls.append({"x": x, "y": y, "r": r, "speed": speed, "id": ball_id})
- # Изменение цвета случайного шарика при клике
- def change_random_color(event):
- ball = random.choice(balls)
- new_color = random.choice(COLORS)
- canvas.itemconfig(ball["id"], fill=new_color)
- canvas.bind("<Button-1>", change_random_color)
- # Обновление положения шариков
- def move_balls():
- for ball in balls:
- dx = target_x - ball["x"]
- dy = target_y - ball["y"]
- dist = math.hypot(dx, dy)
- if dist > 1:
- step_x = ball["speed"] * dx / dist
- step_y = ball["speed"] * dy / dist
- ball["x"] += step_x
- ball["y"] += step_y
- r = ball["r"]
- canvas.coords(ball["id"],
- ball["x"] - r, ball["y"] - r,
- ball["x"] + r, ball["y"] + r)
- root.after(16, move_balls)
- move_balls()
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement