首页 > Python资料 博客日记
【python】python新年烟花代码【附源码】
2024-02-28 19:00:04Python资料围观266次
欢迎来到英杰社区https://bbs.csdn.net/topics/617804998系列专栏:
【python】python爱心代码【附源码】 |
新年的钟声即将敲响,为了庆祝这个喜庆的时刻,我们可以用 Python 编写一个炫彩夺目的烟花盛典。本文将详细介绍如何使用 Pygame 库创建一个令人惊叹的烟花效果。
一、效果图:
二、准备工作
(1)、导入必要的模块:
代码首先导入了需要使用的模块:requests、lxml和csv。
import requests
from lxml import etree
import csv
如果出现模块报错
进入控制台输入:建议使用国内镜像源
pip install 模块名称 -i https://mirrors.aliyun.com/pypi/simple
我大致罗列了以下几种国内镜像源:
清华大学
https://pypi.tuna.tsinghua.edu.cn/simple
阿里云
https://mirrors.aliyun.com/pypi/simple/
豆瓣
https://pypi.douban.com/simple/
百度云
https://mirror.baidu.com/pypi/simple/
中科大
https://pypi.mirrors.ustc.edu.cn/simple/
华为云
https://mirrors.huaweicloud.com/repository/pypi/simple/
腾讯云
https://mirrors.cloud.tencent.com/pypi/simple/
(2) 、定义粒子类
接下来,我们定义一个粒子类,每个粒子具有位置、颜色、半径、角度、速度、重力和生命周期等属性。我们还为粒子类添加更新和绘制方法。
class Particle:
def __init__(self, x, y, color):
self.x = x
self.y = y
self.color = color
self.radius = 3
self.angle = randint(0, 360)
self.speed = randint(1, 5)
self.gravity = 0.1
self.life = randint(20, 25)
def update(self):
if self.life > 0:
radian = math.radians(self.angle)
self.x += self.speed * math.cos(radian)
self.y -= self.speed * math.sin(radian)
self.speed -= self.gravity
self.life -= 1
def draw(self):
pygame.draw.circle(win, self.color, (int(self.x), int(self.y)), self.radius)
(3)、定义烟花类
接下来,我们定义一个烟花类,每个烟花具有位置、颜色、粒子列表和是否已经爆炸的属性。我们为烟花类添加爆炸和更新方法,并在绘制方法中绘制烟花本身。
class Firework:
def __init__(self):
self.x = randint(100, DISPLAY_WIDTH - 100)
self.y = DISPLAY_HEIGHT
self.color = (randint(0, 255), randint(0, 255), randint(0, 255))
self.particles = []
self.exploded = False
def explode(self):
for _ in range(100):
particle = Particle(self.x, self.y, self.color)
self.particles.append(particle)
def update(self):
if not self.exploded:
self.y -= 3
if self.y <= randint(200, 400):
self.explode()
self.exploded = True
else:
for particle in self.particles:
particle.update()
def draw(self):
pygame.draw.circle(win, self.color, (int(self.x), int(self.y)), 5)
(4)、游戏主循环
在主循环中,我们处理退出事件,清空窗口,更新和绘制每个烟花及其粒子,移除完成的烟花和消失的粒子,并更新显示。
# 创建烟花列表
fireworks = []
# 游戏主循环
running = True
clock = pygame.time.Clock()
while running:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
win.fill(BLACK)
# 添加新的烟花
if len(fireworks) < 10 and randint(0, 100) < 2:
fireworks.append(Firework())
# 更新和绘制烟花
for firework in fireworks:
firework.update()
firework.draw()
for particle in firework.particles:
particle.draw()
# 移除完成的烟花及消失的粒子
fireworks = [firework for firework in fireworks if not firework.exploded or len(firework.particles) > 0]
for firework in fireworks:
firework.particles = [particle for particle in firework.particles if particle.life > 0]
pygame.display.update()
pygame.quit()
英杰社区https://bbs.csdn.net/topics/617804998
三、完整代码:
import pygame
import math
from random import randint, choice
# 初始化 Pygame
pygame.init()
# 设置窗口大小和标题
DISPLAY_WIDTH = 800
DISPLAY_HEIGHT = 600
win = pygame.display.set_mode((DISPLAY_WIDTH, DISPLAY_HEIGHT))
pygame.display.set_caption("烟花")
# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# 定义粒子类
class Particle:
def __init__(self, x, y, color):
self.x = x
self.y = y
self.color = color
self.radius = 3
self.angle = randint(0, 360)
self.speed = randint(1, 5)
self.gravity = 0.1
self.life = randint(20, 25)
def update(self):
if self.life > 0:
radian = math.radians(self.angle)
self.x += self.speed * math.cos(radian)
self.y -= self.speed * math.sin(radian)
self.speed -= self.gravity
self.life -= 1
def draw(self):
pygame.draw.circle(win, self.color, (int(self.x), int(self.y)), self.radius)
# 定义烟花类
class Firework:
def __init__(self):
self.x = randint(100, DISPLAY_WIDTH - 100)
self.y = DISPLAY_HEIGHT
self.color = (randint(0, 255), randint(0, 255), randint(0, 255))
self.particles = []
self.exploded = False
def explode(self):
for _ in range(100):
particle = Particle(self.x, self.y, self.color)
self.particles.append(particle)
def update(self):
if not self.exploded:
self.y -= 3
if self.y <= randint(200, 400):
self.explode()
self.exploded = True
else:
for particle in self.particles:
particle.update()
def draw(self):
pygame.draw.circle(win, self.color, (int(self.x), int(self.y)), 5)
# 创建烟花列表
fireworks = []
# 游戏主循环
running = True
clock = pygame.time.Clock()
while running:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
win.fill(BLACK)
# 添加新的烟花
if len(fireworks) < 10 and randint(0, 100) < 2:
fireworks.append(Firework())
# 更新和绘制烟花
for firework in fireworks:
firework.update()
firework.draw()
for particle in firework.particles:
particle.draw()
# 移除完成的烟花及消失的粒子
fireworks = [firework for firework in fireworks if not firework.exploded or len(firework.particles) > 0]
for firework in fireworks:
firework.particles = [particle for particle in firework.particles if particle.life > 0]
pygame.display.update()
pygame.quit()
通过上述步骤,我们已经成功创建了一个令人惊叹的烟花盛典。在这个过程中,我们学习了如何使用 Pygame 库和 Python 编程,创建粒子类和烟花类,并在主循环中更新和绘制烟花效果。
给大家推荐一个网站
里面包含了上百个IT网站,欢迎大家访问:IT今日热榜 一站式资讯平台
iToday,打开信息的新时代。作为一家创新的IT数字媒体平台,iToday致力于为用户提供最新、最全面的IT资讯和内容。里面包含了技术资讯、IT社区、面试求职、前沿科技等诸多内容。我们的团队由一群热爱创作的开发者和分享的专业编程知识爱好者组成,他们精选并整理出真实可信的信息,确保您获得独特、有价值的阅读体验。随时随地,尽在iToday,与世界保持连接,开启您的信息新旅程!
标签:
相关文章
最新发布
- 光流法结合深度学习神经网络的原理及应用(完整代码都有Python opencv)
- Python 图像处理进阶:特征提取与图像分类
- 大数据可视化分析-基于python的电影数据分析及可视化系统_9532dr50
- 【Python】入门(运算、输出、数据类型)
- 【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南
- 华为OD机试E卷 --第k个排列 --24年OD统一考试(Java & JS & Python & C & C++)
- Python已安装包在import时报错未找到的解决方法
- 【Python】自动化神器PyAutoGUI —告别手动操作,一键模拟鼠标键盘,玩转微信及各种软件自动化
- Pycharm连接SQL Sever(详细教程)
- Python编程练习题及解析(49题)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程