python例子:使用pygame实现五彩烟花

news2024/9/22 4:01:28

作品介绍

作品名称:使用pygame实现五彩烟花

开发环境:PyCharm 2023.3.4 + python3.7

用到的库:pygame、random、sys、math

作品简介:该实例是一个使用 Pygame 库实现的烟花效果模拟程序。

实现过程

一、初始化Pygame

  • pygame.init() 初始化 Pygame 库。
import pygame
import random
import sys
import math
# 初始化pygame
pygame.init()

二、设置窗口

  • width 和 height 定义了窗口的宽度和高度。

  • screen 是 Pygame 的 Surface 对象,用于绘制图形。

  • pygame.display.set_caption('五彩烟花') 设置窗口标题。

# 设置窗口width, height = 640, 480
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('五彩烟花')

三、加载背景图片

  • 使用 pygame.image.load('city_background.jpg').convert() 加载并转换背景图片,以便在程序中使用。
# 加载背景图片
background_image = pygame.image.load('city_background.jpg').convert()

四、颜色生成器

  • random_color() 函数返回一个随机颜色的元组,用于烟花粒子的颜色。
# 定义颜色生成器
def random_color():
    return random.choice([
            (243, 130, 130), (239, 67, 229), (96, 24, 215),        
            (32, 80, 158), (29, 183, 163), (29, 183, 61),        
            (217, 219, 53), (219, 131, 53), (219, 77, 53)    ])

五、定义烟花类Firework

  • __init__: 构造函数,初始化烟花的位置、粒子列表,并随机生成粒子的初始状态。

  • update: 更新烟花粒子的位置和透明度,模拟重力和粒子消失效果。

  • draw: 绘制烟花粒子。

# 定义烟花类class Firework:
    def __init__(self, x, y):        
    self.x = x        
    self.y = y        
    self.particles = []        
    for _ in range(50):            
    angle = random.uniform(0, 2 * math.pi)            
    speed = random.uniform(1, 6)            
    velocity_x = speed * math.cos(angle)            
    velocity_y = speed * math.sin(angle)            
    alpha = 255            
    # 为每个粒子生成随机颜色            
    color = random_color()            
    self.particles.append([self.x, self.y, velocity_x, velocity_y, alpha, color])
    def update(self):        
    new_particles = []        
    for particle in self.particles:            
    particle[0] += particle[2]            
    particle[1] += particle[3]            
    particle[3] += 0.1  # 模拟重力           
     particle[4] = max(0, particle[4] - 10)  # 透明度递减,但不低于0            
     if particle[1] < height and particle[4] > 0:                
     new_particles.append(particle)  # 只保留还在屏幕内且透明度大于0的粒子            
     else:                
     # 如果粒子消失,创建新的粒子作为拖尾效果                
     trail_alpha = particle[4]                
     if trail_alpha > 0:                    
     trail_particle = [particle[0], particle[1], 0, 0, trail_alpha]                            new_particles.append(trail_particle)        
     self.particles = new_particles
    def draw(self):        
    for particle in self.particles:            
    particle_color = (*particle[5], int(particle[4]))  # 使用粒子自身的颜色            pygame.draw.circle(screen, particle_color, (int(particle[0]), int(particle[1])), 3)

六、主循环

  1. 烟花触发逻辑:
  • 如果随机数小于 0.05,则在窗口的随机位置创建一个新的 Firework 对象,并添加到 fireworks 列表中。
  1. 烟花生命周期管理:
  • 在 update 方法中,如果粒子的透明度降至 0 或粒子位置超出屏幕底部,则不再更新该粒子,相当于粒子已经消失。
  1. 退出程序:
  • 当用户关闭窗口时,退出主循环,调用 pygame.quit() 清理 Pygame 资源,并使用 sys.exit() 退出 Python 解释器。
# 主循环
running = True
fireworks = []
clock = pygame.time.Clock()
while running:    
for event in pygame.event.get():       
 if event.type == pygame.QUIT:            
 running = False
    # 绘制背景    
    screen.blit(background_image, (0, 0))
    # 随机触发烟花,降低频率    
    if random.random() < 0.05:        
    f_x = random.randint(0, width)        
    f_y = random.randint(0, height * 0.25)  # 使烟花从底部发射        fireworks.append(Firework(f_x, f_y))
    # 更新和绘制烟花    
    for firework in fireworks[:]:        
    firework.update()        
    firework.draw()        
    if not firework.particles:  # 如果没有粒子了,删除烟花           
    fireworks.remove(firework)
    pygame.display.flip()    
    clock.tick(30)
pygame.quit()
sys.exit()

七、结语

以上就是本次分享的全部内容,如果你有任何疑问或想要分享你的自动化办公经验,我们的评论区永远为你敞开。你的每一个点赞和转发,都是对我们最大的支持和鼓励!


好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请帮忙点赞、转发、点个在看吧!

如果你是准备学习Python或者正在学习(想通过Python兼职),下面这些你应该能用得上:

【点击这里】领取!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
Python所有方向的学习路线图,清楚各个方向要学什么东西
100多节Python课程视频,涵盖必备基础、爬虫和数据分析
100多个Python实战案例,学习不再是只会理论
华为出品独家Python漫画教程 ,手机也能学习
历年互联网企业Python面试真题,复习时非常方便
————————————————
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2078987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在没有密码的情况下从 iPad 中删除 MDM?100% 工作

如果您遇到已使用远程管理锁恢复的 iPad 或 iPhone&#xff0c;您将需要远程管理器的登录信息。 从 iPad 中删除 MDM可能很困难&#xff0c;尤其是在您没有正确的权限的情况下。在寻求帮助时&#xff0c;许多客户访问 Apple 的官方论坛&#xff0c;却发现问题并不总是容易解决。…

java中的原子性

在Java中&#xff0c;原子性&#xff08;Atomicity&#xff09;是并发编程中的一个核心概念&#xff0c;指的是一个或多个操作在中间状态对其他线程不可见&#xff0c;且不可被线程调度机制中断的性质。一个原子操作要么全部执行成功&#xff0c;要么完全不执行&#xff0c;不会…

第136天:内网安全-横向移动资源约束委派

利用条件 首先是dc域控主机必须是win2012以上的主机 其次是域内有一个账户&#xff0c;可以同时登录两台主机 利用 jie 可以登录 win2008 也可以登录 win7 资源委派不需要设置委派&#xff0c;默认即可 实验复现 复现环境 通过网盘分享的文件&#xff1a;136-xiaodi.local…

天宝TBCTrimble Business Center中文版本下载安装使用介绍

天宝TBC&#xff1a;测绘之道&#xff0c;尽在其中 引言 昔日杜甫&#xff0c;忧国忧民&#xff0c;今朝我辈&#xff0c;测绘天下。天宝TBC&#xff0c;乃测绘之利器&#xff0c;助我等行走于山川河流之间&#xff0c;绘制天地之图。此文将以杜甫之笔&#xff0c;述说TBC之妙…

C_05_编译4阶段

c语言编译的4个阶段&#xff1a;预处理、 编译、 汇编、 链接 预处理阶段会在源代码中查找预编译指令&#xff0c;其中主要是头文件展开&#xff08;include)&#xff0c;宏定义&#xff08;defind&#xff09;&#xff0c;选择性编译&#xff08;ifdef&#xff09;三种指令 预…

【ArcGIS/GeoScene Pro】离线许可归还不了

问题&#xff1a; 解决方案&#xff1a; 将一下项置空即可&#xff0c;让后重新获取许可信息

网络安全售前入门01——产品了解

目录 1.概述 2.常见网络安全产品 2.1下一代防火墙&#xff08;NGFW&#xff09; 3.后续 1.概述 为方便初入网络安全售前工作的小伙伴了解网安行业情况&#xff0c;我制作一系统售前入门&#xff08;安全产品&#xff0c;安全服务&#xff0c;法律法规等&#xff09;介绍&am…

AI创新,DataOps聚能 | 白鲸开源DTCC共话DataOps新篇章

近日&#xff0c;由IT168联合旗下ITPUB、ChinaUnix两大技术社区主办的第15届中国数据库技术大会&#xff08;DTCC 2024&#xff09;隆重召开。大会以“自研创新 数智未来”为主题&#xff0c;吸引了数百位行业专家和广大数据领域从业者共聚这场年度数据库技术交流盛宴&#xff…

vs2019 C++ 无法定位程序输入点于动态链接库

问题 一个项目一段时间没运行后&#xff0c;再运行报以下错误&#xff1a; 无法定位程序输入点??0lnferenceEngineExceptiondetailslnferenceEngine QEAAAEBV? b a s i c s t r i n g D U ? basic stringDU? basicstringDU?char traitsDstd v?$allocatorD2 stdHOZ 于动…

解决 python import 报错问题

需求问题描述 期望用Python写工具&#xff0c;转换excel内容合并到xml中&#xff0c;需要用到 openpyxl & lxml 库&#xff0c;因此需要安装。 import openpyxl 提示报错&#xff0c;但是没有像java代码的解决方案推荐&#xff0c;即无法直接导包。 分析记录 Note&#…

React antd 表格嵌套表格(可展开)

注意&#xff1a; 采用的是React antDsign 4.x版本 实现效果 代码实现 import { Space, Table } from antd; import React, { useRef } from react;const CheckList () > {const data [{id: 1,name: 张三,age: 18,content: [{id: 1-1,text: 我叫张三,},],},{id: 2,name:…

城管执法系统源码,城市管理综合执法监督系统,微服务架构,后端框架采用springboot ,支持二开

Java智慧城管系统源码 数字城管APP系统源码 城市管理综合执法监督系统源码&#xff0c;移动执法APP源码。 智慧城管系统开发技术&#xff1a; 技术架构&#xff1a; 微服务 开发语言&#xff1a; java 开发工具&#xff1a;idea、VSCode 前端框架&#xff1a;vueeleme…

2024焊工操作证考试在线模拟考试题

焊工证考试试题分为理论《焊工理论知识》考试和《焊工实操知识》专业能力考核。 焊工证考试试题理论知识考试采用闭卷电脑答题方式&#xff1b;理论知识考试和实操考核均实行百分制&#xff0c;焊工证考试成绩皆达80分及以上者为合格。 以下为焊工理论考试模拟试题&#xff0c…

模型案例:| 音频识别-报警器声音识别模型

导读 2023年以ChatGPT为代表的大语言模型横空出世&#xff0c;它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力&#xff0c;为人工智能技术的发展开辟了新的可能性。同时&#xff0c;人工智能技术正在进入各种应用领…

【解析几何笔记】10.向量的外积

10. 向量的外积 10.1 向量外积的定义 α β \pmb{\alpha}\times\pmb{\beta} αβ是一个向量&#xff0c; α β \pmb{\alpha}\times\pmb{\beta} αβ垂直于 α \pmb{\alpha} α和 β \pmb{\beta} β所在的平面&#xff0c;至于朝上还是朝下&#xff0c;取决于 α , β , α …

mysql 导入excel文件 navicate

需求&#xff1a; 需要将表格的数据&#xff0c;导入到mysql数据库&#xff0c;如果存在就更新&#xff0c;如果不存在就进行追加。 处理&#xff1a; 这种就用navicate进行操作。 excle表格&#xff1a; 平台流水号用户姓名来电号码联系电话通讯地址电子邮箱闽-20231221000…

如何构建社区康养养老系统:Java SpringBoot与Vue实战养老管理系统

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

LLM 安全培训和越狱

Meta、Google、OpenAI、Anthropic 等在公开发布之前都投入了大量精力来审查其模型的输出,并设置安全使用的护栏。尽管他们付出了努力,但越狱仍然会发生,即使是最新版本也是如此。根据 [1],GPT4 很容易受到基于说服的攻击,事实上比旧版 ChatGPT 更容易受到攻击。 新的和更复…

identYwaf:一款基于盲推理识别技术的WAF检测工具

关于identYwaf identYwaf是一款功能强大的Web应用防火墙识别与检测工具&#xff0c;该工具基于盲推理识别技术实现其功能&#xff0c;可以帮助广大研究人员迅速识别目标Web应用程序所使用的保护防火墙类型。 功能介绍 identYwaf所实现的盲推理通过检查一组预定义的测试性&…

论坛系统登录测试结果

目录 1 登录成功1.1 输入合法已注册手机号 2 登录失败2.1 输入未注册手机号2.2 输入非法手机号2.3 输入错误、过期验证码 论坛系统——部分测试用例 1 登录成功 1.1 输入合法已注册手机号 打开登录界面 输入已注册手机号 点击发送验证码 输入验证码&#xff0c;点击登录按钮 …