当前位置: 首页 > news >正文

Python新春烟花

fireworks

系列文章

序号直达链接
Tkinter
1Python李峋同款可写字版跳动的爱心
2Python跳动的双爱心
3Python蓝色跳动的爱心
4Python动漫烟花
5Python粒子烟花
Turtle
1Python满屏飘字
2Python蓝色流星雨
3Python金色流星雨
4Python漂浮爱心
5Python爱心光波①
6Python爱心光波②
7Python满天繁星
8Python五彩气球
9Python白色飘雪
10Python七彩花朵
11Python 3D星空
12Python大雪纷飞
13Python一闪一闪亮星星
14Python爱心泡泡
15Python爱心射线
16Python圣诞礼物
17Python礼物圣诞树
18Python浪漫星空
19Python飞舞蝙蝠
20Python万圣礼物
21Python蓝色飘雪
Pygame
1Python跨年烟花
2Python炫酷烟花
3Python黑客帝国字母雨
敬请期待……

写在前面

Python实现炫酷新春烟花动画的完整代码。

技术需求

  1. Pygame库

    • Pygame 是一款专为游戏开发设计的Python库,提供图形渲染、事件管理、音频播放等核心功能。在本代码中,Pygame负责创建窗口、处理用户交互、绘制粒子、烟花及文字等元素。
  2. 粒子系统

    • 粒子系统 是一种用于模拟物理现象的技术,常用于实现爆炸、烟雾、火焰等视觉效果。在此段代码中,粒子系统被用来模拟烟花爆炸的效果。每个粒子具备位置、速度和生命周期等属性,并受重力影响,逼真地再现烟花爆炸后的飞散场景。
  3. 物理模拟

    • 在代码中,通过在 update() 方法中调整垂直速度 vy 来模拟重力对粒子的影响,使粒子逐渐加速下落,模仿现实生活中烟花爆炸后物体的运动轨迹。
  4. 随机数生成

    • 随机数生成 用于控制烟花的颜色、发射角度、速度和生命周期等参数。每当生成新的烟花时,程序会随机选择颜色、粒子数量和角度等,确保每次烟花展示都是独一无二的。
  5. 图形绘制

    • 利用 pygame.draw.circle() 函数绘制粒子和文字,生动展现烟花动态效果及“Happy New Year!”的祝福语。pygame.font.SysFont() 用于加载系统字体并绘制文本内容。
  6. 事件处理

    • 通过 pygame.event.get() 捕获并处理用户事件,如关闭窗口等操作,使程序能够响应用户输入,增强应用的交互体验。
  7. 动画控制

    • 使用 帧率控制(通过 clock.tick(FPS))确保动画流畅运行,并借助 time.sleep(0.05) 调整每帧更新速率,使烟花效果更加清晰呈现。
  8. 面向对象编程(OOP)

    • 定义 ParticleFirework 类,采用面向对象编程理念,将粒子和烟花的行为封装于不同类中,提升代码结构化程度,便于维护与扩展。

完整代码

import pygame
import random
import math
import time# Initialize Pygame
pygame.init()# Constants
SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 700
BACKGROUND_COLOR = (0, 0, 0)  # Black
FPS = 60# Screen setup
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('新春烟花')# Font setup using system default font
font = pygame.font.SysFont("Comic Sans MS", 100)  # You can replace "Arial" with any system font
text_color = (255, 255, 255)  # White color for the text# Particle class
class Particle:def __init__(self, x, y, color, angle, speed, life):self.x = xself.y = yself.color = colorself.angle = angleself.speed = speedself.life = lifeself.radius = 2self.vx = math.cos(angle) * speedself.vy = math.sin(angle) * speeddef update(self):self.x += self.vxself.y += self.vyself.life -= 1self.vy += 0.05  # Gravity effectdef draw(self):pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), self.radius)# Firework class
class Firework:def __init__(self, x, y, color, num_particles=100, spread=2 * math.pi):self.x = xself.y = yself.color = colorself.num_particles = num_particlesself.spread = spreadself.particles = []self.exploded = Falsedef explode(self):if not self.exploded:for _ in range(self.num_particles):angle = random.uniform(0, self.spread)speed = random.uniform(1, 3)life = random.randint(30, 50)particle = Particle(self.x, self.y, self.color, angle, speed, life)self.particles.append(particle)self.exploded = True
……

代码分析

这段代码运用Python的Pygame库,精心设计了一个动态的新春烟花展示效果。程序不仅模拟了烟花的发射、爆炸及粒子运动,还在屏幕中央呈现了“Happy New Year!”的温馨祝福。接下来,我们将从程序结构、核心功能、代码实现和细节等方面进行深入解析。

1. 程序结构

该程序由几个关键部分构成:

  • Pygame初始化与常量定义: 初始化Pygame库,并设定屏幕尺寸、背景色、帧率等基础参数。
  • Particle类: 定义烟花中粒子的行为特性,包括位置、速度和生命周期等。
  • Firework类: 负责烟花的爆炸效果及粒子生成与更新。
  • 主循环(main函数): 处理游戏事件、更新画面、控制烟花发射和文字显示。

2. Pygame初始化

pygame.init()

此行代码启动Pygame库,使程序能够利用其绘图、音效处理和事件管理等功能。

3. 常量与屏幕配置

SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 700
BACKGROUND_COLOR = (0, 0, 0)  # 黑色背景
FPS = 60

这里定义了窗口尺寸、背景颜色和帧率等常量,为程序的整体布局和动画流畅性奠定基础。

创建并设置Pygame窗口:

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('新春烟花')

pygame.display.set_mode()创建指定尺寸的屏幕,pygame.display.set_caption()则将窗口标题设为“新春烟花”。

4. 字体配置

font = pygame.font.SysFont("Comic Sans MS", 100)
text_color = (255, 255, 255)  # 白色文字

通过pygame.font.SysFont()选择“Comic Sans MS”字体,字号设为100,用于渲染屏幕上的祝福文字,文字颜色为白色。

5. Particle类

Particle类描述烟花中的单个粒子,包含位置、颜色、速度、角度和生命周期等属性。

class Particle:def __init__(self, x, y, color, angle, speed, life):self.x = xself.y = yself.color = colorself.angle = angleself.speed = speedself.life = lifeself.radius = 2self.vx = math.cos(angle) * speedself.vy = math.sin(angle) * speed

update()方法更新粒子位置,考虑重力影响:

def update(self):self.x += self.vxself.y += self.vyself.life -= 1self.vy += 0.05  # 模拟重力

draw()方法绘制粒子:

def draw(self):pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), self.radius)

6. Firework类

Firework类模拟烟花爆炸过程及粒子管理。

class Firework:def __init__(self, x, y, color, num_particles=100, spread=2 * math.pi):self.x = xself.y = yself.color = colorself.num_particles = num_particlesself.spread = spreadself.particles = []self.exploded = False

explode()方法生成爆炸时的粒子:

def explode(self):if not self.exploded:for _ in range(self.num_particles):angle = random.uniform(0, self.spread)speed = random.uniform(1, 3)life = random.randint(30, 50)particle = Particle(self.x, self.y, self.color, angle, speed, life)self.particles.append(particle)self.exploded = True

update()方法更新粒子状态并检查是否已爆炸:

def update(self):if not self.exploded:self.explode()for particle in self.particles:particle.update()

draw()方法绘制所有粒子:

def draw(self):for particle in self.particles:if particle.life > 0:particle.draw()

7. 主循环

主循环是程序的核心,负责事件处理、烟花发射、状态更新和文字显示。

  • 事件处理: 检查退出事件。
  • 烟花发射: 随机决定是否发射新烟花。
  • 更新与绘制烟花: 更新烟花状态并绘制。
  • 文字显示: 屏幕中央显示祝福文字。

8. 总结

此代码通过Pygame实现了生动的烟花效果,利用粒子系统模拟烟花爆炸后的动态行为,结合随机化技术确保每次爆炸的独特性。此外,主循环实时更新烟花状态并展示祝福文字,营造出浓厚的节日氛围。

写在后面

我是一只有趣的兔子,感谢你的喜欢!

http://www.lqws.cn/news/474481.html

相关文章:

  • NuttX Socket 源码学习
  • C++ 中 QVector 的判断与操作
  • app专项测试命令如何写?
  • csp基础之进制转换器
  • 组件之间的双向绑定:v-model
  • redis分布式锁 Redisson在电商平台开发中的实际应用
  • `teleport` 传送 API 的使用:在 Vue 3 中的最佳实践
  • 决策树:化繁为简的智能决策利器
  • 跨平台轻量级RTSP服务:重构内网超低延迟直播体验
  • 面试题-合并类型
  • Flink流水线+Gravitino+Paimon集成
  • 【JAVA】数组的使用
  • CSP-S 模拟赛一总结(T1、T2)
  • 网络安全基础:从CIA三元组到密钥交换与消息认证
  • C++构造和折构函数详解,超详细!
  • 面试题-在ts中有两个类型,一个是a,一个是b,这两个联合起来就是c,如何实现联合
  • C++指针(三)
  • Spring Boot的智能装配引擎--自动配置
  • MySQL存储引擎与架构
  • Centos7.6内网离线安装Docker环境和Portainer-博客
  • 《SwanLab:开启AI开发新视界》
  • 基于YOLO的智能车辆检测与记录系统
  • 【格与代数系统】偏序关系、偏序集与全序集
  • UVA489刽子手游戏
  • QT vscode cmake 编译 undefined reference to `vtable for 问题解决
  • IEC61850 一致性测试中的 UCA 测试
  • Python文件管理利器之Shutil库详解
  • 嵌入式开发之嵌入式系统硬件架构设计时,如何选择合适的微处理器/微控制器?
  • 响应式数据的判断:Vue3中的方法
  • 《Effective Python》第九章 并发与并行——总结(基于物流订单处理系统)