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

【python】python新年烟花代码【附源码】

        欢迎来到英杰社区icon-default.png?t=N7T8https://bbs.csdn.net/topics/617804998     

   新年的钟声即将敲响,为了庆祝这个喜庆的时刻,我们可以用 Python 编写一个炫彩夺目的烟花盛典。本文将详细介绍如何使用 Pygame 库创建一个令人惊叹的烟花效果。

一、效果图:

        

二、准备工作

(1)、导入必要的模块:

       代码首先导入了需要使用的模块:requests、lxml和csv。

import requests
from lxml import etree
import csv

        如果出现模块报错

c124a1693bfc457ba1f2909ee9d299fc.png

        进入控制台输入:建议使用国内镜像源

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 = xself.y = yself.color = colorself.radius = 3self.angle = randint(0, 360)self.speed = randint(1, 5)self.gravity = 0.1self.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.gravityself.life -= 1def 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_HEIGHTself.color = (randint(0, 255), randint(0, 255), randint(0, 255))self.particles = []self.exploded = Falsedef 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 -= 3if self.y <= randint(200, 400):self.explode()self.exploded = Trueelse: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 = Falsewin.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()

英杰社区icon-default.png?t=N7T8https://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 = xself.y = yself.color = colorself.radius = 3self.angle = randint(0, 360)self.speed = randint(1, 5)self.gravity = 0.1self.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.gravityself.life -= 1def 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_HEIGHTself.color = (randint(0, 255), randint(0, 255), randint(0, 255))self.particles = []self.exploded = Falsedef 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 -= 3if self.y <= randint(200, 400):self.explode()self.exploded = Trueelse: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 = Falsewin.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网站,欢迎大家访问:IT今日热榜 一站式资讯平台

   iToday,打开信息的新时代。作为一家创新的IT数字媒体平台,iToday致力于为用户提供最新、最全面的IT资讯和内容。里面包含了技术资讯、IT社区、面试求职、前沿科技等诸多内容。我们的团队由一群热爱创作的开发者和分享的专业编程知识爱好者组成,他们精选并整理出真实可信的信息,确保您获得独特、有价值的阅读体验。随时随地,尽在iToday,与世界保持连接,开启您的信息新旅程!

IT今日热榜 一站式资讯平台IT今日热榜汇聚各类IT热榜:虎嗅、知乎、36氪、京东图书销售、晚点、全天候科技、极客公园、GitHub、掘金、CSDN、哔哩哔哩、51CTO、博客园、GitChat、开发者头条、思否、LeetCode、人人都是产品经理、牛客网、看准、拉勾、Boss直聘http://itoday.top/#/

http://www.lryc.cn/news/278586.html

相关文章:

  • 书生·浦语大模型实战营-学习笔记1
  • ELF解析03 - 加载段
  • Mysql——索引相关的数据结构
  • 无代码DIY图像检索
  • Elasticsearch--Master选举
  • 微服务实战系列之Filter
  • 使用GPT大模型调用工具链
  • C语言实现bmp图像底层数据写入与创建
  • 基于BP神经网络的定位算法,基于BP神经网络定位预测
  • Java Http各个请求类型详细介绍
  • python函数装饰器参数统计调用时间和次数
  • 机器学习之集成学习AdaBoost
  • 行云部署成长之路 -- 慢 SQL 优化之旅 | 京东云技术团队
  • Windows权限提升
  • win系统搭建Minecraft世界服务器,MC开服教程,小白开服教程
  • word2vec中的CBOW和Skip-gram
  • 在ios上z-index不起作用问题的总结
  • 力扣labuladong一刷day59天动态规划
  • pyenv环境找不到sqlite:No module named _sqlite3
  • Histone H3K4me2 Antibody, SNAP-Certified™ for CUTRUN
  • 我用 Laf 开发了一个非常好用的密码管理工具
  • windows项目部署
  • http首部
  • 2024.1.8 Day04_SparkCore_homeWork
  • 09.简单工厂模式与工厂方法模式
  • DHCP,怎么在Linux和Windows中获得ip
  • 读写锁(arm)
  • 【第33例】IPD体系进阶:市场细分
  • response 拦截器返回的二进制文档(同步下载excel)如何配置
  • 为什么要使用云原生数据库?云原生数据库具体有哪些功能?