Fogos de Artifício

import tkinter as tk
import random

class Firework:
def __init__(self, canvas, x, y):
self.canvas = canvas
self.x = x
self.y = y
self.particles = []
self.create_firework()

def create_firework(self):
# Criar uma explosão de partículas
for _ in range(50): # Número de partículas
angle = random.uniform(0, 2 * 3.14159) # Ângulo aleatório
speed = random.uniform(1, 5) # Velocidade aleatória
particle = {
'x': self.x,
'y': self.y,
'dx': speed * random.uniform(-1, 1), # Movimento em X
'dy': speed * random.uniform(-1, -3), # Movimento em Y
'color': random.choice(['red', 'blue', 'green', 'yellow', 'purple', 'orange']),
'size': random.randint(5, 10)
}
self.particles.append(particle)

def update(self):
# Atualiza a posição das partículas
for particle in self.particles:
particle['x'] += particle['dx']
particle['y'] += particle['dy']
particle['dy'] += 0.1 # Simula a gravidade

# Reduzir a opacidade da partícula
if particle['size'] > 0:
particle['size'] -= 0.1

def draw(self):
# Desenha as partículas na tela
for particle in self.particles:
if particle['size'] > 0: # Desenha apenas se a partícula ainda existir
x = particle['x']
y = particle['y']
size = max(0, int(particle['size']))
self.canvas.create_oval(
x, y, x + size, y + size,
fill=particle['color'], outline=particle['color']
)

class FireworksApp:
def __init__(self, root):
self.root = root
self.root.title("Feliz Ano Novo")
self.canvas = tk.Canvas(root, width=800, height=600, bg="black")
self.canvas.pack()

self.fireworks = []

# Iniciar a animação
self.animate()

def animate(self):
# Criar novos fogos de artifício aleatoriamente
if random.random() < 0.05: # Chance de criar um novo fogo de artifício
x = random.randint(50, 750)
y = random.randint(200, 500)
firework = Firework(self.canvas, x, y)
self.fireworks.append(firework)

# Atualiza e desenha todos os fogos de artifício
for firework in self.fireworks:
firework.update()
firework.draw()

# Remover partículas que desapareceram
self.fireworks = [f for f in self.fireworks if any(p['size'] > 0 for p in f.particles)]

# Chama novamente a função de animação após 50ms
self.root.after(50, self.animate)

if __name__ == "__main__":
root = tk.Tk()
app = FireworksApp(root)
root.mainloop()


Comentários

Mensagens populares deste blogue

Criar Cartões de Visita

12 signos egípcios

Calcular a percentagem de ocupação