Python跨年烟花

跨年快乐!🎆 2026年已经过去两个月了,但烟花永不过时~

Python 快速实现一个绚丽的跨年烟花动画,最简单上手的是 turtle 库(Python内置,无需额外安装),适合新手/快速演示。下面给你一个完整、可直接复制运行的版本,包含:

  • 黑色夜空背景
  • 随机发射的火箭
  • 绽放的多色粒子烟花(带重力下落 + 渐隐效果)
  • 循环播放,永不停止(直到你关窗口)
import turtle
import random
import time

# 设置屏幕
screen = turtle.Screen()
screen.bgcolor("black")
screen.title("Happy New Year 2026! 🎆 跨年烟花秀")
screen.setup(width=1000, height=700)
screen.tracer(0)  # 关闭自动刷新,手动控制更流畅

# 颜色池(烟花常用色)
colors = ["red", "orange", "yellow", "lime", "cyan", "blue", "purple", "magenta", "white", "pink"]

class Firework:
    def __init__(self):
        self.particles = []
        self.exploded = False

        # 随机发射位置(底部随机)
        x = random.randint(-400, 400)
        self.rocket = turtle.Turtle()
        self.rocket.shape("circle")
        self.rocket.shapesize(0.3)
        self.rocket.color(random.choice(colors))
        self.rocket.penup()
        self.rocket.goto(x, -350)
        self.rocket.speed(0)

        # 目标爆炸高度
        self.target_y = random.randint(50, 250)
        self.color = self.rocket.color()[0]

    def launch(self):
        if self.rocket.ycor() < self.target_y:
            self.rocket.sety(self.rocket.ycor() + random.uniform(4, 8))  # 上升速度随机
            # 尾迹小效果(可选)
            if random.random() < 0.1:
                trail = turtle.Turtle()
                trail.shape("circle")
                trail.shapesize(0.1)
                trail.color(self.color)
                trail.penup()
                trail.goto(self.rocket.position())
                trail.hideturtle()  # 很快消失
                screen.ontimer(trail.hideturtle, 300)
        else:
            self.explode()

    def explode(self):
        self.exploded = True
        self.rocket.hideturtle()

        # 爆炸粒子数(越大越绚丽,但越卡)
        num_particles = random.randint(40, 80)
        for _ in range(num_particles):
            p = turtle.Turtle()
            p.shape("circle")
            p.shapesize(0.15)
            p.color(self.color)
            p.penup()
            p.goto(self.rocket.position())
            p.dx = random.uniform(-5, 5)
            p.dy = random.uniform(-2, 8)   # 上抛
            p.brightness = 1.0
            self.particles.append(p)

    def update(self):
        if not self.exploded:
            self.launch()
        else:
            new_particles = []
            for p in self.particles:
                p.setx(p.xcor() + p.dx)
                p.sety(p.ycor() + p.dy)
                p.dy -= 0.15  # 重力
                p.brightness -= 0.015
                if p.brightness > 0:
                    # 渐隐:颜色变暗
                    r, g, b = [int(c * p.brightness) for c in p.color()]
                    p.color(f"#{r:02x}{g:02x}{b:02x}")
                    new_particles.append(p)
                else:
                    p.hideturtle()
            self.particles = new_particles

# 创建初始一批烟花
fireworks = [Firework() for _ in range(4)]

# 添加新年文字(可选,居中显示)
writer = turtle.Turtle()
writer.hideturtle()
writer.color("gold")
writer.penup()
writer.goto(0, 200)
writer.write("Happy New Year 2026!", align="center", font=("Arial", 40, "bold"))

# 主循环
while True:
    screen.update()
    time.sleep(0.02)  # 控制帧率,防太快卡顿

    for fw in fireworks[:]:
        fw.update()
        # 如果烟花完全消失,补充新的
        if fw.exploded and not fw.particles:
            fireworks.remove(fw)
            fireworks.append(Firework())

    # 偶尔添加额外烟花增加密度
    if random.random() < 0.03:
        fireworks.append(Firework())

# 关闭窗口优雅退出
screen.exitonclick()

运行方式

  1. 复制代码到 .py 文件(如 newyear_fireworks.py
  2. 用 Python 运行(推荐 3.8+)
  3. 全屏享受!(按 Esc 或关闭窗口退出)

进阶玩法建议(想更炫?)

  • 加倒计时:用 datetime 计算到下一个跨年时间,显示剩余秒数。
  • 加音乐:用 pygame.mixer 播放跨年BGM(需 pip install pygame)。
  • 升级版用 Pygame:粒子更多、更丝滑,支持鼠标交互发射烟花。
  • 3D版:用 Ursina 或 PyOpenGL(更复杂,但效果炸裂)。

想加倒计时、背景音乐、还是改成2027版?或者要 Pygame 版本的完整代码?告诉我,我再给你升级~ 新年虽过,烟花不灭!🚀

文章已创建 4845

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部