欢迎来到英杰社区https://bbs.csdn.net/topics/617804998
新年的钟声即将敲响,为了庆祝这个喜庆的时刻,我们可以用 Python 编写一个炫彩夺目的烟花盛典。本文将详细介绍如何使用 Pygame 库创建一个令人惊叹的烟花效果。
一、效果图:
二、准备工作
(1)、导入必要的模块:
代码首先导入了需要使用的模块:requests、lxml和csv。
import requests from lxml import etree import csv
如果出现模块报错
进入控制台输入:建议使用国内镜像源
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 = x self.y = y self.color = color self.radius = 3 self.angle = randint(0, 360) self.speed = randint(1, 5) self.gravity = 0.1 self.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.gravity self.life -= 1 def 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_HEIGHT self.color = (randint(0, 255), randint(0, 255), randint(0, 255)) self.particles = [] self.exploded = False def 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 -= 3 if self.y <= randint(200, 400): self.explode() self.exploded = True else: 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 = False win.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()
英杰社区https://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 = x self.y = y self.color = color self.radius = 3 self.angle = randint(0, 360) self.speed = randint(1, 5) self.gravity = 0.1 self.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.gravity self.life -= 1 def 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_HEIGHT self.color = (randint(0, 255), randint(0, 255), randint(0, 255)) self.particles = [] self.exploded = False def 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 -= 3 if self.y <= randint(200, 400): self.explode() self.exploded = True else: 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 = False win.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/#/
猜你喜欢
- 14天前(大理悦云雅阁酒店电话)雅阁酒店集团|端午佳节礼遇,大理悦云雅阁度假酒店
- 14天前(从“见世面”到“内在需要”:在海南,追问旅行的意义)从“见世面”到“内在需要”:在海南,追问旅行的意义
- 14天前(万豪酒店 珠海)万豪酒店品牌启航珠海金湾,续写大湾区拓展新篇
- 14天前(中旅酒店 维景)中旅酒店首次AI数字人直播亮相南京维景
- 14天前(甘州区文化旅游局)2025甘津文旅资源对接推介会在兰州举办
- 14天前(2025年“文化和自然遗产日”广东主会场活动举办)2025年“文化和自然遗产日”广东主会场活动举办
- 14天前(新西兰“空降”上海:新西兰旅游局邀请你来“玩真的”!)新西兰“空降”上海:新西兰旅游局邀请你来“玩真的”!
- 14天前(马尔代夫华尔道夫酒店多少钱)Chef Zhao就任马尔代夫伊挞富士岛华尔道夫酒店Li Long中餐厅新主厨
- 14天前(世茂海峡大厦多高)巴西地产高管齐聚厦门世茂海峡大厦 共探超高层建筑锻造经验
- 14天前(芜宣机场国际航班)新华丝路:芜宣机场开通至越南首都河内的国际货运航线
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章