用python编写一个放烟花的小程序

news/2025/1/8 3:36:08/
python">import pygame
import random
# 代码解释及使用说明:
# 首先,导入 pygame 和 random 库。pygame 用于创建游戏窗口和图形绘制,random 用于生成随机数。
# 初始化 pygame,并设置屏幕尺寸为 800x600 像素,设置窗口标题为 "Fireworks"。
# 定义了几种颜色常量,用于粒子的颜色。
# 定义 Particle 类:
# __init__ 方法:初始化粒子的位置、颜色、半径、水平和垂直速度及重力。
# update 方法:更新粒子的位置和速度,同时考虑重力影响,半径会逐渐减小,当半径小于 0 时将其置为 0。
# draw 方法:在屏幕上绘制粒子,使用 pygame.draw.circle 函数,根据粒子的位置和半径绘制圆形。
# main 函数:
# 初始化时钟,用于控制帧率。
# 创建存储粒子的列表 particles。
# 主循环中,填充屏幕为黑色。
# 处理事件,当用户点击鼠标时,在鼠标位置创建 100 个粒子添加到 particles 列表。
# 对 particles 列表中的每个粒子调用 update 和 draw 方法。
# 过滤掉半径小于等于 0 的粒子,防止无效粒子的绘制。
# 调用 pygame.display.flip() 更新屏幕显示,使用 clock.tick(60) 控制帧率为 60 帧每秒。
# 这个程序通过点击鼠标创建烟花效果,每次点击会在鼠标位置生成 100 个粒子,粒子会向上喷射并在重力作用下下落,同时半径逐渐减小,模拟烟花绽放和消散的过程。
# 初始化 pygame
pygame.init()# 屏幕尺寸
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Fireworks")# 颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
YELLOW = (255, 255, 0)
ORANGE = (255, 165, 0)
CYAN = (0, 255, 255)
MAGENTA = (255, 0, 255)
GREEN = (0, 255, 0)
colors = [RED, YELLOW, ORANGE, CYAN, MAGENTA, GREEN]class Particle:
def __init__(self, x, y):
self.x = x
self.y = y
self.color = random.choice(colors)
self.radius = random.randint(1, 3)
self.x_vel = random.uniform(-1, 1)
self.y_vel = random.uniform(-5, -1)
self.gravity = 0.1def update(self):
self.x += self.x_vel
self.y += self.y_vel
self.y_vel += self.gravity
self.radius -= 0.05
if self.radius < 0:
self.radius = 0def draw(self):
pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), int(self.radius))def main():
clock = pygame.time.Clock()
particles = []
running = True
while running:
screen.fill(BLACK)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEBUTTONDOWN:
x, y = pygame.mouse.get_pos()
for _ in range(100):
particle = Particle(x, y)
particles.append(particle)for particle in particles:
particle.update()
particle.draw()
particles = [particle for particle in particles if particle.radius > 0]pygame.display.flip()
clock.tick(60)if __name__ == "__main__":
main()
pygame.quit()

运行后视图


http://www.ppmy.cn/news/1561449.html

相关文章

CSS——14.交集选择器

选择既要满足div元素又要满足 类名为abc的元素 即只要这个元素&#xff1a;< div class“abc”>我爱学习2< /div >变红&#xff0c;无论是单独使用div标签选择器还是单独使用 ".abc"类选择器都无法实现只让< div class“abc”>我爱学习2< /div …

kubelet状态错误报错

journalctl -xeu kubelet 执行后的日志如下: -- -- The process exit code is exited and its exit status is 1. Jan 02 14:20:06 iv-ydipyqxfr4wuxjsij0bd systemd[1]: kubelet.service: Failed with result exit-code. -- Subject: Unit failed -- Defined-By: system…

df.replace({‘b‘: r‘\s*(\.)\s*‘}, {‘b‘: r‘\1ty‘}, regex=True)

这段代码 df.replace({b: r\s*(\.)\s*}, {b: r\1ty}, regexTrue) 用于在 DataFrame 中进行替换操作&#xff0c;具体来说是针对 b 列&#xff0c;匹配并替换符合正则表达式的值。 详细解析&#xff1a; df.replace()&#xff1a;这是 Pandas 中的 replace() 方法&#xff0c;用…

【服务器常见网络攻击】

服务器常见网络攻击 服务器遭受的网络攻击类型繁多&#xff0c;每种攻击都有其特定的技术特征和应对策略。 1. DDoS&#xff08;分布式拒绝服务&#xff09;攻击 描述&#xff1a;攻击者通过控制大量计算机&#xff08;僵尸网络&#xff09;向目标服务器发送过多请求&#x…

计算机网络(第8版)第三章习题--交换机交换表的查找转发

方法&#xff1a; 【【计算机网络-内有合集】交换机交换表的查找转发-哔哩哔哩】

[CTF/网络安全] 攻防世界 simple_js 解题详析

题目描述&#xff1a;小宁发现了一个网页&#xff0c;但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} ) 页面源代码&#xff1a; 代码分析 function dechiffre(pass_enc){// 定义密钥&#xff0c;格式为 ASCII 码值的十进制数&#xff0c;以逗号分隔var pass "…

机器学习基础-卷积的计算

目录 1 掌握卷积计算的基本过程 1.1 单通道单卷积核 1.2 单通道多卷积核 1.3 多通道单卷积核 1.4 多通道多卷积核 其他计算 padding&#xff0c;stride的作用 填充 步幅 1 掌握卷积计算的基本过程 1.1 单通道单卷积核 如图3所示&#xff0c;现在有一张形状为[5,5,1]…

【Adobe Acrobat PDF】Acrobat failed to connect to a DDE server.是怎么回事?

【Adobe Acrobat PDF】Acrobat failed to connect to a DDE server.是怎么回事&#xff1f; 【Adobe Acrobat PDF】Acrobat failed to connect to a DDE server.是怎么回事&#xff1f; 文章目录 【Adobe Acrobat PDF】Acrobat failed to connect to a DDE server.是怎么回事&…