您现在的位置是:首页 > 技术教程 正文

【python】python新年烟花代码【附源码】

admin 阅读: 2024-03-20
后台-插件-广告管理-内容页头部广告(手机)

        欢迎来到英杰社区icon-default.png?t=N7T8https://bbs.csdn.net/topics/617804998系列专栏:

【python】python爱心代码【附源码】

   

        新年的钟声即将敲响,为了庆祝这个喜庆的时刻,我们可以用 Python 编写一个炫彩夺目的烟花盛典。本文将详细介绍如何使用 Pygame 库创建一个令人惊叹的烟花效果。

一、效果图:

4c3f47d613e3474889845c61f20c474c.gif

        

二、准备工作

(1)、导入必要的模块:

       代码首先导入了需要使用的模块:requests、lxml和csv。

  1. import requests
  2. from lxml import etree
  3. import csv

        如果出现模块报错

c124a1693bfc457ba1f2909ee9d299fc.png

        进入控制台输入:建议使用国内镜像源

pip install 模块名称 -i https://mirrors.aliyun.com/pypi/simple

         我大致罗列了以下几种国内镜像源:

  1. 清华大学
  2. https://pypi.tuna.tsinghua.edu.cn/simple
  3. 阿里云
  4. https://mirrors.aliyun.com/pypi/simple/
  5. 豆瓣
  6. https://pypi.douban.com/simple/
  7. 百度云
  8. https://mirror.baidu.com/pypi/simple/
  9. 中科大
  10. https://pypi.mirrors.ustc.edu.cn/simple/
  11. 华为云
  12. https://mirrors.huaweicloud.com/repository/pypi/simple/
  13. 腾讯云
  14. https://mirrors.cloud.tencent.com/pypi/simple/

        (2) 、定义粒子类

        接下来,我们定义一个粒子类,每个粒子具有位置、颜色、半径、角度、速度、重力和生命周期等属性。我们还为粒子类添加更新和绘制方法。

  1. class Particle:
  2. def __init__(self, x, y, color):
  3. self.x = x
  4. self.y = y
  5. self.color = color
  6. self.radius = 3
  7. self.angle = randint(0, 360)
  8. self.speed = randint(1, 5)
  9. self.gravity = 0.1
  10. self.life = randint(20, 25)
  11. def update(self):
  12. if self.life > 0:
  13. radian = math.radians(self.angle)
  14. self.x += self.speed * math.cos(radian)
  15. self.y -= self.speed * math.sin(radian)
  16. self.speed -= self.gravity
  17. self.life -= 1
  18. def draw(self):
  19. pygame.draw.circle(win, self.color, (int(self.x), int(self.y)), self.radius)

        (3)、定义烟花类

         接下来,我们定义一个烟花类,每个烟花具有位置、颜色、粒子列表和是否已经爆炸的属性。我们为烟花类添加爆炸和更新方法,并在绘制方法中绘制烟花本身。

 
  1. class Firework:
  2. def __init__(self):
  3. self.x = randint(100, DISPLAY_WIDTH - 100)
  4. self.y = DISPLAY_HEIGHT
  5. self.color = (randint(0, 255), randint(0, 255), randint(0, 255))
  6. self.particles = []
  7. self.exploded = False
  8. def explode(self):
  9. for _ in range(100):
  10. particle = Particle(self.x, self.y, self.color)
  11. self.particles.append(particle)
  12. def update(self):
  13. if not self.exploded:
  14. self.y -= 3
  15. if self.y <= randint(200, 400):
  16. self.explode()
  17. self.exploded = True
  18. else:
  19. for particle in self.particles:
  20. particle.update()
  21. def draw(self):
  22. pygame.draw.circle(win, self.color, (int(self.x), int(self.y)), 5)

        (4)、游戏主循环

        在主循环中,我们处理退出事件,清空窗口,更新和绘制每个烟花及其粒子,移除完成的烟花和消失的粒子,并更新显示。

  1. # 创建烟花列表
  2. fireworks = []
  3. # 游戏主循环
  4. running = True
  5. clock = pygame.time.Clock()
  6. while running:
  7. clock.tick(60)
  8. for event in pygame.event.get():
  9. if event.type == pygame.QUIT:
  10. running = False
  11. win.fill(BLACK)
  12. # 添加新的烟花
  13. if len(fireworks) < 10 and randint(0, 100) < 2:
  14. fireworks.append(Firework())
  15. # 更新和绘制烟花
  16. for firework in fireworks:
  17. firework.update()
  18. firework.draw()
  19. for particle in firework.particles:
  20. particle.draw()
  21. # 移除完成的烟花及消失的粒子
  22. fireworks = [firework for firework in fireworks if not firework.exploded or len(firework.particles) > 0]
  23. for firework in fireworks:
  24. firework.particles = [particle for particle in firework.particles if particle.life > 0]
  25. pygame.display.update()
  26. pygame.quit()

英杰社区icon-default.png?t=N7T8https://bbs.csdn.net/topics/617804998

三、完整代码:

        7c083ffdae014ff392ab4f2fdcfd96b8.png

  1. import pygame
  2. import math
  3. from random import randint, choice
  4. # 初始化 Pygame
  5. pygame.init()
  6. # 设置窗口大小和标题
  7. DISPLAY_WIDTH = 800
  8. DISPLAY_HEIGHT = 600
  9. win = pygame.display.set_mode((DISPLAY_WIDTH, DISPLAY_HEIGHT))
  10. pygame.display.set_caption("烟花")
  11. # 定义颜色
  12. WHITE = (255, 255, 255)
  13. BLACK = (0, 0, 0)
  14. # 定义粒子类
  15. class Particle:
  16. def __init__(self, x, y, color):
  17. self.x = x
  18. self.y = y
  19. self.color = color
  20. self.radius = 3
  21. self.angle = randint(0, 360)
  22. self.speed = randint(1, 5)
  23. self.gravity = 0.1
  24. self.life = randint(20, 25)
  25. def update(self):
  26. if self.life > 0:
  27. radian = math.radians(self.angle)
  28. self.x += self.speed * math.cos(radian)
  29. self.y -= self.speed * math.sin(radian)
  30. self.speed -= self.gravity
  31. self.life -= 1
  32. def draw(self):
  33. pygame.draw.circle(win, self.color, (int(self.x), int(self.y)), self.radius)
  34. # 定义烟花类
  35. class Firework:
  36. def __init__(self):
  37. self.x = randint(100, DISPLAY_WIDTH - 100)
  38. self.y = DISPLAY_HEIGHT
  39. self.color = (randint(0, 255), randint(0, 255), randint(0, 255))
  40. self.particles = []
  41. self.exploded = False
  42. def explode(self):
  43. for _ in range(100):
  44. particle = Particle(self.x, self.y, self.color)
  45. self.particles.append(particle)
  46. def update(self):
  47. if not self.exploded:
  48. self.y -= 3
  49. if self.y <= randint(200, 400):
  50. self.explode()
  51. self.exploded = True
  52. else:
  53. for particle in self.particles:
  54. particle.update()
  55. def draw(self):
  56. pygame.draw.circle(win, self.color, (int(self.x), int(self.y)), 5)
  57. # 创建烟花列表
  58. fireworks = []
  59. # 游戏主循环
  60. running = True
  61. clock = pygame.time.Clock()
  62. while running:
  63. clock.tick(60)
  64. for event in pygame.event.get():
  65. if event.type == pygame.QUIT:
  66. running = False
  67. win.fill(BLACK)
  68. # 添加新的烟花
  69. if len(fireworks) < 10 and randint(0, 100) < 2:
  70. fireworks.append(Firework())
  71. # 更新和绘制烟花
  72. for firework in fireworks:
  73. firework.update()
  74. firework.draw()
  75. for particle in firework.particles:
  76. particle.draw()
  77. # 移除完成的烟花及消失的粒子
  78. fireworks = [firework for firework in fireworks if not firework.exploded or len(firework.particles) > 0]
  79. for firework in fireworks:
  80. firework.particles = [particle for particle in firework.particles if particle.life > 0]
  81. pygame.display.update()
  82. pygame.quit()

        通过上述步骤,我们已经成功创建了一个令人惊叹的烟花盛典。在这个过程中,我们学习了如何使用 Pygame 库和 Python 编程,创建粒子类和烟花类,并在主循环中更新和绘制烟花效果。

    给大家推荐一个网站

    IT今日热榜 一站式资讯平台

5e55aaa0909e411ebb2694c9d3c30361.png


        里面包含了上百个IT网站,欢迎大家访问:IT今日热榜 一站式资讯平台

   iToday,打开信息的新时代。作为一家创新的IT数字媒体平台,iToday致力于为用户提供最新、最全面的IT资讯和内容。里面包含了技术资讯、IT社区、面试求职、前沿科技等诸多内容。我们的团队由一群热爱创作的开发者和分享的专业编程知识爱好者组成,他们精选并整理出真实可信的信息,确保您获得独特、有价值的阅读体验。随时随地,尽在iToday,与世界保持连接,开启您的信息新旅程!

IT今日热榜 一站式资讯平台IT今日热榜汇聚各类IT热榜:虎嗅、知乎、36氪、京东图书销售、晚点、全天候科技、极客公园、GitHub、掘金、CSDN、哔哩哔哩、51CTO、博客园、GitChat、开发者头条、思否、LeetCode、人人都是产品经理、牛客网、看准、拉勾、Boss直聘http://itoday.top/#/

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索