【python】绘制春节烟花

一、Pygame库春节烟花示例

下面是一个使用Pygame实现的简单春节烟花效果的示例代码。请注意,运行下面的代码之前,请确保计算机上已经安装了Pygame库。

import pygame
import random
import math
from pygame.locals import *# 初始化pygame
pygame.init()# 设置屏幕大小
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))# 设置标题
pygame.display.set_caption('春节烟花')# 定义烟花参数
firework_speed = 5
firework_radius = 2
firework_explosion_radius = 60
colors = [(255, 0, 0),  # Red(0, 255, 0),  # Green(0, 0, 255),  # Blue(255, 255, 0),  # Yellow(255, 165, 0),  # Orange(255, 255, 255)  # White
]# 定义Firework类
class Firework:def __init__(self, x, y, color, exploded=False):self.x = xself.y = yself.color = colorself.exploded = explodedself.particles = []def move(self):if not self.exploded:self.y -= firework_speeddef explode(self):if not self.exploded:for angle in range(0, 360, 5):dir_x = math.cos(math.radians(angle))dir_y = math.sin(math.radians(angle))self.particles.append((self.x, self.y, dir_x, dir_y, self.color))self.exploded = Truedef update(self):if self.exploded:for particle in self.particles:index = self.particles.index(particle)particle_x, particle_y, dir_x, dir_y, color = particleparticle_x += dir_x * 2particle_y += dir_y * 2self.particles[index] = (particle_x, particle_y, dir_x, dir_y, color)if self.distance(particle_x, particle_y) > firework_explosion_radius:self.particles.pop(index)def show(self):if not self.exploded:pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), firework_radius)else:for particle in self.particles:particle_x, particle_y, dir_x, dir_y, color = particlepygame.draw.circle(screen, color, (int(particle_x), int(particle_y)), firework_radius)def distance(self, x, y):return math.sqrt((self.x - x) ** 2 + (self.y - y) ** 2)fireworks = [Firework(random.randint(0, screen_width), screen_height - 10, random.choice(colors))]# 游戏主循环
running = True
while running:screen.fill((0, 0, 0))  # use a dark sky background# 执行事件循环for event in pygame.event.get():if event.type == QUIT:running = False# 更新和显示烟花for firework in fireworks:if not firework.exploded and firework.y < screen_height / 2 + random.randint(-100, 100):firework.explode()firework.move()firework.update()firework.show()# 随机发射新的烟花if random.randint(0, 20) == 1:fireworks.append(Firework(random.randint(0, screen_width), screen_height - 10, random.choice(colors)))# 删除已完成的烟花for firework in fireworks:if firework.exploded and len(firework.particles) == 0:fireworks.remove(firework)pygame.display.flip()pygame.time.Clock().tick(30)  # 控制游戏最大帧率为30fpspygame.quit()

这个脚本创建了一些简单的烟花效果,它们会随机地在底部生成,并上升到屏幕的一半高度左右时爆炸。

二、在Windows 11上安装Pygame库

在Windows 11上安装Pygame库需要先确保电脑上有Python环境。Pygame是一个用Python语言编写的跨平台的游戏开发库。以下是在Windows 11上安装Pygame的一般步骤:

1. 安装Python:

   如果电脑还没有安装Python,可以从Python官网下载安装包安装。地址是:https://www.python.org/downloads/。下载适合Windows的版本,运行安装程序,并确保在安装过程中选中了“Add Python to PATH”这个选项,以便在命令行中使用`python`命令。

2. 打开命令提示符(CMD)或 PowerShell:

   安装了Python之后,按下Windows键,输入`cmd`或`PowerShell`,然后选择“命令提示符”或“Windows PowerShell”。确保以管理员身份运行它。

3. 更新pip(可选,但推荐):

   虽然这一步不是必需的,但建议将pip更新到最新版本,以确保无缝安装库。在命令提示符或PowerShell中输入以下命令:

python -m pip install --upgrade pip

4. 安装Pygame:

   现在,可以通过pip安装Pygame。在命令提示符或PowerShell中输入以下命令:

python -m pip install pygame

   注意:如果电脑安装了多个Python版本,使用`python3`或者`py`命令替换`python`。

5. 验证安装:

   为了验证Pygame是否成功安装,可以输入以下命令来导入Pygame,并查看其版本号:

python -c "import pygame; print(pygame.ver)"

这样Pygame应该就成功安装在indows 11系统上了。如果在安装过程中遇到问题,可能需要检查一下Python和pip是否正确安装以及是否已添加到系统的环境变量中。

三、turtle模块烟花示例

春节烟花通常是通过图形界面来实现的,下面用Python编写一个简单的烟花效果。我们将使用Python中的`turtle`模块来生成烟花效果。`turtle`是一个简单的图形绘制库,可以很容易地用来制作烟花动画。下面的Python代码演示了如何用`turtle`模块来绘制一个模拟烟花的图形:

import turtle
import random# 设置屏幕背景
screen = turtle.Screen()
screen.bgcolor("black")# 创建烟花的绘图对象
firework = turtle.Turtle()
firework.speed(0)
firework.hideturtle()# 绘制烟花的方法
def draw_firework():colors = ["red", "yellow", "blue", "green", "orange", "purple", "white"]# 烟花升空firework.penup()firework.goto(random.randint(-200, 200), random.randint(-200, 0))firework.pendown()# 烟花爆炸explode_times = random.randint(5, 15)for i in range(explode_times):firework.color(random.choice(colors))firework.pensize(random.randint(1, 5))firework.speed(0)angle = 360 / explode_timesfirework.seth(i * angle)firework.forward(random.randint(20, 150))firework.backward(random.randint(20, 150))# 重复绘制烟花
for _ in range(10):draw_firework()# 点击屏幕后退出
screen.exitonclick()

确保有Python环境,然后运行这段代码。它将随机地在屏幕上绘制10个不同颜色和大小的烟花效果。可以通过增加循环次数或修改代码来创建更多不同的效果。

由于`turtle`库的性能限制,这个烟花动画的展示效果比较基础和有限。对于更加复杂的烟花动画,通常需要使用其他图形库,比如Pygame,或者在Web上使用JavaScript结合HTML5的Canvas。

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

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

相关文章

如何让 Pages 文字分为两栏或更多栏?

通常一份文件都是由上往下仅有「一栏」而已&#xff0c;但在某些情况的排版&#xff0c;我们需要两栏甚至三栏的设计&#xff0c;在Pages 要如何做到呢&#xff1f;来看看吧。 将 Pages 文件改为双栏式设计 点一下「格式」>「布局」&#xff0c;就可以看到预设的「直栏」数…

LeetCode-第2469题=温度转换

1.题目描述 给你一个四舍五入到两位小数的非负浮点数 celsius 来表示温度&#xff0c;以 摄氏度&#xff08;Celsius&#xff09;为单位。 你需要将摄氏度转换为 开氏度&#xff08;Kelvin&#xff09;和 华氏度&#xff08;Fahrenheit&#xff09;&#xff0c;并以数组 ans …

【AI数字人-论文】GeneFace++

文章目录 前言pipelinePitch-Aware Audio-to-MotionLandmark LLELLELandmark LLE Instant motion-to-video rendering结果对比 前言 为了提高预测的面部关键点序列的长期时间一致性和自然度&#xff0c;我们提出了一个Pitch-Aware Audio-to-Motion音高感知的音频到动作模块。具…

Spring是怎么解决循环依赖的

首先先解释一下什么叫循环依赖 循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环.比如A依赖于B,B依赖于A 循环依赖在spring中是允许存在的,spring框架依据三级缓存已经解决了大部分的循环依赖 一级缓存:单例池,缓存已经经历了完整的…

时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于CNN-LST…

vue3 之 商城项目—layout静态模版结构搭建

layout—模块静态模版搭建 一般情况下我们会有nav区域&#xff0c;header区域&#xff0c;二级路由出口区域以及footer区域&#xff0c;如图 我们在开发的时候先把大模块搭建起来&#xff0c;再一步一步填充小模块 在layout下建文件&#xff0c;目录如下 在index.vue中把上…

基于springboot+vue+mysql员工宿舍管理系统

技术栈 jdk8springboot vueelement-plusMySQL 包含功能点 管理员端 登录员工管理宿舍管理留言板管理物品报修管理公告管理 员工端 登录首页个人中心物品报修留言板 功能截图(部分) 管理员 管理员登录 员工管理 宿舍管理 物品报修管理 公告管理 留言管理 员工 员工登录…

数据库管理-第145期 最强Oracle监控EMCC深入使用-02(20240205)

数据库管理145期 2024-02-05 数据库管理-第145期 最强Oracle监控EMCC深入使用-02&#xff08;20240205&#xff09;1 监控方式2 度量配置3 阻塞4 DG监控总结 数据库管理-第145期 最强Oracle监控EMCC深入使用-02&#xff08;20240205&#xff09; 作者&#xff1a;胖头鱼的鱼缸&…

LeetCode、216. 组合总和 III【中等,组合型枚举】

文章目录 前言LeetCode、216. 组合总和 III【中等&#xff0c;组合型枚举】题目类型与分类思路 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖…

769933-15-5,Biotin aniline,用来标记和检测细胞膜上的特定蛋白质

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;769933-15-5&#xff0c;Biotin aniline&#xff0c;生物素苯胺 一、基本信息 产品简介&#xff1a;Biotin aniline, also known as Biotin aniline, is a molecular probe with strong reactivity. Its uniqueness…

Java设计模式-责任链模式

责任链模式 一、概述二、结构三、案例实现四、优缺点五、源码解析 一、概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象的处理条件或权限不同。例如&#xff0c;公司员工请假&#xff0c;可批假的领导有部门…

TreeSet 集合

TreeSet 集合 1. 概述2. 方法3. 遍历方式4. 两种排序方式4.1 默认排序规则/自然排序4.1.1 概述4.1.2 compareTo()方法4.1.3 代码示例14.1.4 代码示例2 4.2 比较器排序4.2.1 概述4.2.2 compare()方法4.2.3 代码示例14.2.4 代码示例2 4.3 排序方式的对比 5. 注意事项 文章中的部分…

自学Java的第二十天

一&#xff0c;每日收获 1.使用方式 1: 动态初始化 2.使用方式 2: 动态初始化 3.使用方式 3: 动态初始化-列数不确定 4.使用方式 4: 静态初始化 5.二维数组的应用案例 6.二维数组使用细节和注意事项 二&#xff0c;新名词与小技巧 三&#xff0c;今天学习中所遇到的困难…

代理与Reflect反射

属性描述符 Proprety Descriptor 属性描述符 用于描述一个属性的相关信息 1.Object.getOwnPropertyDescriptor(对象&#xff0c;属性名) 可以得到一个对象的 某个属性的属性描述符 Object.getOwnPropertyDescriptors(对象) 可以得到某个对象的所有属性描述符 如果需要为某个…

(已解决)vue+element-ui实现个人中心,仿照原神

差一个个人中心页面&#xff0c;看到了这个博主的个人中心&#xff0c;真的很不错 地址&#xff1a;vueelement仿原神实现好看的个人中心 最终效果&#xff1a;

【多模态MLLMs+图像编辑】MGIE:苹果开源基于指令和大语言模型的图片编辑神器(24.02.03开源)

项目主页&#xff1a;https://mllm-ie.github.io/ 论文 :基于指令和多模态大语言模型图片编辑 2309.Guiding Instruction-based Image Editing via Multimodal Large Language Models &#xff08;加州大学圣巴拉分校苹果&#xff09; 代码&#xff1a;https://github.com/appl…

【2024.2.5练习】砍竹子(25分)

题目描述 题目分析 考虑题目是否满足贪心。每次施展魔法会使一段连续的竹子高度变为一半左右的平方根。根据样例&#xff0c;似乎每次让最高的竹子变短就能得到最优解。 假设魔法一次只能对一根竹子使用&#xff0c;永远不出现连续相同高度的竹子&#xff0c;那么显然无论使用…

电商开放API商品采集接口、关键字搜索接口,获取商品ID、商品主图接口

API是application programming interface&#xff08;应用程序接口&#xff09;的简称&#xff0c;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节。…

Oracle Vagrant Box 扩展根文件系统

需求 默认的Oracle Database 19c Vagrant Box的磁盘为34GB。 最近在做数据库升级实验&#xff0c;加之导入AWR dump数据&#xff0c;导致空间不够。 因此需要对磁盘进行扩容。 扩容方法1&#xff1a;预先扩容 此方法参考文档Vagrant, how to specify the disk size?。 指…

Linux Shell编程系列--变量的定义与使用

一、目的 上一篇我们简单介绍了shell脚本的组成以及如何运行一个shell脚本&#xff0c;本篇将详解讲解shell中的变量。在Shell脚本中&#xff0c;变量是用来存储和处理数据的基本结构。 二、介绍 1、定义变量 变量名与等号&#xff08;&#xff09;后跟值来定义一个变量&#…