It's almost the Spring Festival. A fireworks show is implemented in Python

The pace of the Spring Festival is getting closer and closer. During the Spring Festival, many places will set off fireworks to increase the festival atmosphere. However, due to the intensification of environmental pollution, fireworks have been banned in many places in recent years. In order to make up for this regret, in this article, we will take a look at how to use Python to realize a fireworks show.

realization

Python libraries used for function implementation include tkinter, PIL, time, random and math. If the third library has not been installed before, use PIP install pilot to install it.

First, we use tkinter to create a canvas. We can choose a suitable picture as the background according to our preferences. The code is as follows:

root = tk.Tk()
# Draw a canvas
cv = tk.Canvas(root, height=457, width=690)
# Background map
image = Image.open("bg.jpeg")
photo = ImageTk.PhotoImage(image)
# Draw a picture on the drawing board
cv.create_image(0, 0, image=photo, anchor='nw')
cv.pack()

Look at the effect


 

Then we will realize the effect of fireworks and display it on the canvas. First, define a fireworks class fireworks, which mainly includes initialization methods and update data methods.

The main parameters of the initialization method include: fireworks blooming coordinate axis, speed, color, particle number and time, etc. the code is implemented as follows:

def __init__(self, cv, idx, total, explosion_speed, x=0., y=0.,
			 vx=0., vy=0., size=2., color='red', lifespan=2, **kwargs):
	self.id = idx
	# Fireworks bloom x-axis
	self.x = x
	# Fireworks bloom x-axis
	self.y = y
	self.initial_speed = explosion_speed
	# External x-axis speed
	self.vx = vx
	# External y-axis speed
	self.vy = vy
	# Number of particles in bloom
	self.total = total
	# Dwell time
	self.age = 0
	# colour
	self.color = color
	# canvas
	self.cv = cv
	self.cid = self.cv.create_oval(x - size, y - size, x + size, y + size,
	fill=self.color)
	self.lifespan = lifespan

After the fireworks are set off, you need to refresh. Take a look at the update method. The code implementation is as follows:

def update(self, dt):
	self.age += dt
	# Particle expansion
	if self.alive() and self.expand():
		move_x = cos(radians(self.id * 360 / self.total)) * self.initial_speed
		move_y = sin(radians(self.id * 360 / self.total)) * self.initial_speed
		self.cv.move(self.cid, move_x, move_y)
		self.vx = move_x / (float(dt) * 1000)
	# Expand to maximum drop
	elif self.alive():
		move_x = cos(radians(self.id * 360 / self.total))
		self.cv.move(self.cid, self.vx + move_x, self.vy + 0.5 * dt)
		self.vy += 0.5 * dt
	# Expired removal
	elif self.cid is not None:
		cv.delete(self.cid)
		self.cid = None

Next, let's look at the implementation of fireworks discharge. The main elements include: the number of fireworks, the range and speed of explosion, residence time and refresh time. The code implementation is as follows:

def ignite(cv):
    t = time()
    # Fireworks list
    explode_points = []
    wait_time = randint(10, 100)
    # Number of explosions
    numb_explode = randint(6, 10)
    for point in range(numb_explode):
        # Explosive particle list
        objects = []
        # Explosion x-axis
        x_cordi = randint(50, 550)
        # Explosion y-axis
        y_cordi = randint(50, 150)
        speed = uniform(0.5, 1.5)
        size = uniform(0.5, 3)
        color = choice(colors)
        # Explosion blooming speed
        explosion_speed = uniform(0.2, 1)
        # Number of particles and radius of explosion
        total_particles = randint(10, 50)
        for i in range(1, total_particles):
            r = fireworks(cv, idx=i, total=total_particles,
                          explosion_speed=explosion_speed, x=x_cordi, y=y_cordi,
                     vx=speed, vy=speed, color=color, size=size,
                     lifespan=uniform(0.6, 1.75))
            # Add to particle list
            objects.append(r)
        # Add particle list to fireworks list
        explode_points.append(objects)
    total_time = .0
    # Keep updated within 1.8 second time frame
    while total_time < 1.8:
        # Pause the screen for 0.01s
        sleep(0.01)
        # Refresh time
        tnew = time()
        t, dt = tnew, tnew - t
        # Traverse the fireworks list
        for point in explode_points:
            # Traverse the list of particles in fireworks
            for item in point:
                # Update time
                item.update(dt)
        # Refresh page
        cv.update()
        total_time += dt
    root.after(wait_time, ignite, cv)

Finally, let's look at the effect:

summary

In this article, we use Python to realize the special effects of fireworks. If you are interested, you can try it yourself. Finally, I wish you progress every day!! The most important thing to learn Python is mentality. We are bound to encounter many problems in the process of learning. We may not be able to solve them if we want to break our head. This is normal. Don't rush to deny yourself and doubt yourself. If you have difficulties in learning at the beginning and want to find a python learning and communication environment, you can join us, receive learning materials and discuss together.

 

Keywords: Python Back-end

Added by chyan on Wed, 29 Dec 2021 08:15:52 +0200