【python教程入门学习】Python新年炫酷烟花秀代码
Pygame 绘制烟花的基本原理
烟花从发射到绽放一共分为三个阶段:
发射阶段:在这一阶段烟花的形状是线性向上,通过设定一组大小不同、颜色不同的点来模拟“向上发射” 的运动。运动过程中,5 个点被赋予不同大小的加速度,随着时间推移,后面的点会赶上前面的点,最终所有点会汇聚在一起,处于绽放准备阶段。
烟花绽放:烟花绽放这个阶段,是由一个点分散多个点向不同方向发散,并且每个点的移动轨迹需要被记录,目的是为了追踪整个绽放轨迹。
烟花凋零:此阶段负责描绘绽放后烟花的效果。绽放后的烟花,在每一时刻点的下降速度和亮度(代码中也叫透明度)是不一样的。因此在代码里,将烟花绽放后将每个点赋予两个属性:分别为重力向量和生命周期,来模拟烟花在不同时期时不同的展现效果。
完整程序代码
import pygame from random import randint, uniform, choice import math vector = pygame.math.Vector2 gravity = vector(0, 0.3) DISPLAY_WIDTH = DISPLAY_HEIGHT = 800 trail_colours = [(45, 45, 45), (60, 60, 60), (75, 75, 75), (125, 125, 125), (150, 150, 150)] dynamic_offset = 1 static_offset = 3 class Firework: def __init__(self): # 随机颜色 self.colour = (randint(0, 255), randint(0, 255), randint(0, 255)) self.colours = ( (randint(0, 255), randint(0, 255), randint(0, 255)), (randint(0, 255), randint(0, 255), randint(0, 255)), (randint(0, 255), randint(0, 255), randint(0, 255))) self.firework = Particle(randint(0, DISPLAY_WIDTH), DISPLAY_HEIGHT, True, self.colour) # Creates the firework particle self.exploded = False self.particles = [] self.min_max_particles = vector(100, 225) def update(self, win): # called every frame if not self.exploded: self.firework.apply_force(gravity) self.firework.move() for tf in self.firework.trails: tf.show(win) self.show(win) if self.firework.vel.y >= 0: self.exploded = True def show(self, win): pass