import pygame
import random
# 初始化pygame
pygame.init()
# 设置屏幕大小
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
# 定义一些工具函数
def random_color():
return random.randint(100, 255), random.randint(100, 255), random.randint(100, 255)
def draw_tail(screen, positions, color):
if len(positions) > 1:
for i in range(len(positions) - 1):
pygame.draw.line(screen, color, positions[i], positions[i+1], 2)
class Particle:
def __init__(self, x, y, color):
self.x = x
self.y = y
self.color = color
self.radius = random.randint(4, 7)
self.vel_x = random.uniform(-1, 1) * random.randint(3, 7)
self.vel_y = random.uniform(-1, 1) * random.randint(3, 7)
self.lifetime = random.randint(50, 100)
self.positions = []
def update(self):
self.x += self.vel_x
self.y += self.vel_y
self.lifetime -= 1
self.vel_y += 0.15 # 模拟重力
self.positions.append((self.x, self.y))
if len(self.positions) > 5:
self.positions.pop(0)
def draw(self):
pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), max(1, self.radius * self.lifetime / 60))
draw_tail(screen, self.positions, self.color)
class Firework:
def __init__(self):
self.x = random.randint(0, width)
self.y = height
self.color = random_color()
self.vel_y = random.randint(-18, -8)
self.exploded = False
self.particles = []
self.positions = []
def explode(self):
for _ in range(100): # 烟花爆炸产生的粒子数
self.particles.append(Particle(self.x, self.y, random_color()))
def update(self):
if not self.exploded:
self.y += self.vel_y
self.vel_y += 0.1 # 模拟重力
self.positions.append((self.x, self.y))
if len(self.positions) > 10:
self.positions.pop(0)
if self.vel_y >= 0:
self.exploded = True
self.explode()
else:
for particle in self.particles:
particle.update()
def draw(self):
if not self.exploded:
pygame.draw.circle(screen, self.color, (self.x, int(self.y)), 5)
draw_tail(screen, self.positions, self.color)
else:
for particle in self.particles:
particle.draw()
fireworks = []
running = True
while running:
screen.fill((0, 0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if random.random() < 0.03: # 控制烟花生成的频率
fireworks.append(Firework())
for firework in fireworks[:]:
firework.update()
firework.draw()
if firework.exploded and all(p.lifetime <= 0 for p in firework.particles):
fireworks.remove(firework)
pygame.display.flip()
pygame.time.delay(30)
pygame.quit()
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
一款交互式烟花模拟应用,使用Python和pygame库精心打造。它不仅提供了逼真的烟花效果,包括颜色渐变、粒子尾迹、和随机形状,还能够让用户控制烟花的放置和爆炸,带来独一无二的视觉盛宴。通过优化的代码和精心设计的物理效果,每次使用都能带来全新的体验。 适用人群: 游戏开发者:寻找精美的烟花效果作为游戏元素。 教育工作者和学生:需要研究或学习计算机图形学和物理模拟。 独立开发者和艺术家:寻求灵感或想要在项目中添加独特的视觉效果。 娱乐活动策划者:为各种活动提供烟花显示的虚拟替代方案。 其他说明: 代码经过精心优化,保证流畅的运行效率和高质量的视觉效果。 提供定制化选项,用户可根据需要调整烟花的颜色、大小、形状和爆炸效果。 完全开源,支持进一步的修改和二次开发。 注重用户安全和隐私,不收集任何个人信息。
资源推荐
资源详情
资源评论
收起资源包目录
python-sky-blossoms.zip (1个子文件)
main.py 3KB
共 1 条
- 1
资源评论
JKooll
- 粉丝: 1251
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功