【python】绘制春节烟花

news2025/1/10 19:21:36

一、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 = x
        self.y = y
        self.color = color
        self.exploded = exploded
        self.particles = []

    def move(self):
        if not self.exploded:
            self.y -= firework_speed

    def 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 = True

    def update(self):
        if self.exploded:
            for particle in self.particles:
                index = self.particles.index(particle)
                particle_x, particle_y, dir_x, dir_y, color = particle
                particle_x += dir_x * 2
                particle_y += dir_y * 2
                self.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 = particle
                pygame.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)  # 控制游戏最大帧率为30fps

pygame.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_times
        firework.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.coloradmin.cn/o/1435922.html

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

相关文章

Python数据可视化库之ggplot使用详解

概要 数据可视化是数据分析和数据沟通的关键部分。Python 作为一门强大的数据科学和数据分析工具,提供了多种数据可视化库,其中之一就是 ggplot。ggplot 是一个基于 ggplot2 的 Python 数据可视化库,它可以创建精美且高度可定制的图表,以更好地理解和传达数据。本文将深入…

5-2、S曲线计算【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍S曲线的基本变换&#xff0c;将基本形式的S曲线变换成为任意过两点的S曲线&#xff0c;为后续步进电机S曲线运动提供理论支撑 一.计算目标 ①计算经过任意不同两点的S曲线方程 ②可调节曲线平…

github和gitee

github GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行托管&#xff0c;故名GitHub。 github可以给提交的代码打上标签&#xff0c;方便版本的迭代和回退&#xff0c;也是一个存储代码的仓库 github工作区 gitee是gitHub的…

【C语言】C的整理记录

前言 该笔记是建立在已经系统学习过C语言的基础上&#xff0c;笔者对C语言的知识和注意事项进行整理记录&#xff0c;便于后期查阅&#xff0c;反复琢磨。C语言是一种面向过程的编程语言。 原想在此阐述一下C语言的作用&#xff0c;然而发觉这些是编程语言所共通的作用&#…

Cayman Chemical--TR-FRET 分析试剂盒

Cayman TR-FRET分析试剂盒专为使用均相TR-FRET技术高通量定量测量细胞培养上清中待测物浓度或高通量筛选设计&#xff0c;为客户提供了一种强大且易于使用的检测方案。 TR-FRET分析法结合了荧光共振能量转移与时间分辨荧光两种技术&#xff0c;以带有铕&#xff08;Eu3&#xf…

【Nicn的刷题日常】之两个整数二进制位不同个数

目录 1.题目描述 描述 输入描述&#xff1a; 输出描述&#xff1a; 示例1 2.解题思路 3.解题代码 4.思路二 1.题目描述 描述 输入两个整数&#xff0c;求两个整数二进制格式有多少个位不同 输入描述&#xff1a; 两个整数 输出描述&#xff1a; 二进制不同位的个数…

Java老兵 转C语言,需要学习的点(最易懂的解释)

一、static 1.1 修饰函数内的局部变量&#xff1a; void sayHi(void) { static int index 5;index; }多次调用sayHi函数&#xff0c;index 5 只有在第一次调用的时候初始化一次&#xff0c;后面的多次调用&#xff0c;此句话就不执行了。 1.2 修饰全局变量或…

2024年第一篇博客

这是2024年的第一篇博客&#xff0c;2023年笔者经历了一连串的生活、工作、学习上的转折和调整&#xff0c;跌跌撞撞时光飞逝&#xff0c;转眼间就踏着元旦的钟声步入了2024年&#xff0c;前思后想、辗转反侧、犹豫再三不知道从哪里开始博客新的篇章&#xff0c;这个问题坦诚说…

解决Python xlwings报错AttributeError ‘NoneType‘ object has no attribute apps

一、问题背景 今天&#xff0c;遇到了一个问题&#xff1a;以前调试好的python使用xlwings操作wps表格的脚本突然不能运行了&#xff0c;遇到了很多莫名问题&#xff0c;下面记录分享下&#xff1a; 开始报错如下&#xff1a; D:\PycharmProjects\tiku\venv\Scripts\python.e…

C语言之字符逆序(牛客网)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 字符逆序__牛客网 题目&#xff1a; 思路&#xff1a;既然有空格就不能用scanf函数来接收字符了。因为scanf函数遇到空格会停止读取。我们可以用get…

QtAV学习:(一)Windows下编译QtAV

QtAV 主页&#xff1a; QtAV by wang-bin 作者的编译构建说明文档&#xff1a; Build QtAV wang-bin/QtAV Wiki GitHub 我的编译环境&#xff1a; 编译环境&#xff1a;win10/msvc2015/Qt5.6.3 第一步&#xff1a;GitHub拉取代码,执行子模块初始化 地址&#xff1a; …

风控安全产品系统设计

风控业务架构 我把风控业务架构的分层分为6层,分别是组件层、业务层、决策层、能力层、计算层、可视层。 以下基建为基础安全产品的简称。 组件层 组件层的职责是:数据收集与行为反制。 从接口、设备、行为三个维度进行数据收集,接收决策层的指令进行行为反制。为了保证…

2.6c语言 判断素数

试除法(2--a-1) 判断一个数是否是素数,素数是只能被1或者他本身整除的数(1不是素数),可以通过循环遍历从2--a-1所有数,看有没有数能够被他整除,从而去判断他是不是素数. 代码部分 #include<stdio.h> int main() {int arr[10]{2,3,4,5,66,77,567,2553,3456,4436};int f…

Vue安装与配置

写入借鉴网址&#xff1a;好细的Vue安装与配置_vue配置-CSDN博客 下载Vue安装地址&#xff1a; Node.js — Download 查看是否安装成功&#xff1a; node -v npm -v 配置全局模式及缓存 结果通过&#xff1a; C:\Windows\system32>npm install vue -g added 20 packages …

ElasticSearch查询语句用法

查询用法包括&#xff1a;match、match_phrase、multi_match、query_string、term 1.match 1.1 不同字段权重 如果需要为不同字段设置不同权重&#xff0c;可以考虑使用bool查询的should子句来组合多个match查询&#xff0c;并为每个match查询设置不同的权重 {"query&…

C++类和对象入门(三)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 前言 在c中&#xff0c;类型分为两类&#xff0c;一类是内置类型&#xff0c;另一类是自定义类型。 1.内置类型&#xf…

最适合入门的100个深度学习项目

&#x1f6a8;注意&#x1f6a8;&#xff1a;最近经粉丝反馈&#xff0c;发现有些订阅者将此专栏内容进行二次售卖&#xff0c;特在此声明&#xff0c;本专栏内容仅供学习&#xff0c;不得以任何方式进行售卖&#xff0c;未经作者许可不得对本专栏内容行使发表权、署名权、修改…

亲测解决vscode的debug用不了、点了没反应

这个问题在小虎登录vscode同步了设置后出现,原因是launch文件被修改或删除。解决方法是重新添加launch。 坏境配置 win11 + vscode 解决方法 Ctrl + shift + P,搜索debug添加配置: 选择python debugger。 结果生成了一个文件在当前路径: launch内容: {// Use Int…

MySQL篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、MyISAM Static 和 MyISAM Dynamic 有什么区别?二、如果一个表有一列定义为 TIMESTAMP,将发生什么?三、你怎么看到为表格定义的所有索引?四、LIKE 声明中的%和_是什么意思?五、列对比运算符是什么?前言 前些天发现了一个巨牛…

zabbix配置邮箱告警

1.监控nginx服务状态 2.创建触发器 触发器条件&#xff1a;当服务状态的值为0时&#xff0c;进行邮箱告警 3.配置邮件告警 本次使用qq邮箱进行告警 点击右边的测试&#xff0c;进入到qq邮箱查看消息。 4.为用户添加报警媒介 5.创建动作 6.现在尝试关闭nginx服务&#xff0c;…