当前位置:   article > 正文

[python] 过年燃放烟花

[python] 过年燃放烟花

目录

新年祝福语

一、作品展示 

二、作品所用资源 

三、代码与资源说明 

四、代码库

五、完整代码 

六、总结 


新年祝福语

岁月总是悄然流转,让人感叹时间的飞逝,转眼间又快到了中国传统的新年(龙年)。

回首过去,我们经历了许多挑战,也收获了成长。展望未来,我们充满期待。

在这特别的时刻,我想对所有粉丝送上真挚祝福。愿新年带给你们无尽的快乐与幸福,健康与平安。

感谢你们的支持,新的一年我将继续努力创造更多精彩。

祝大家新年快乐!


一、作品展示 

以下是我用 [python] 制作的一个新年小作品,希望大家喜欢(龙年背景图是免费下载的)!

二、作品所用资源 

由于 pygame 本身不支持中文显示,所以需要自行下载中文字体,而其自带的数字字体不好看,所以也一并下载了(代码中的字体与背景图大家自行更换)

1. 小清新中文字体

2. 立体数字字体

3. 免费的背景图

三、代码与资源说明 

百度云盘完整资源下载:新年快乐

这里展示代码与资源存放位置,是为了方便大家看代码时容易理解其中的内容。 

 

四、代码库

本文主要用到了以下四个库。如果大家还没安装,可以 win + r 输入 cmd 安装。

  1. pip install pygame
  2. pip install random
  3. pip install math
  4. pip install os

五、完整代码 

以下是完整的代码。其中,爆竹音效我没有添加,但有预留实现接口,大家如果感兴趣可以网上找相应的音频文件,并且将已注释的接口打开来播放即可。

  1. import pygame
  2. import random
  3. import math
  4. import os
  5. # 初始化pygame
  6. pygame.init()
  7. # 设置窗口大小和标题
  8. screen_width, screen_height = 800, 600
  9. screen = pygame.display.set_mode((screen_width, screen_height))
  10. pygame.display.set_caption("Fireworks")
  11. # 加载动态背景图
  12. bg_images = []
  13. for i in range(1, 3): # 替换为你的动态背景图文件名的范围
  14. image_path = f"D:\\share\\python\\HappNewYear\\pic\\dragon_animation_{i}.png" # 替换为你的动态背景图路径
  15. image = pygame.image.load(image_path).convert()
  16. bg_images.append(image)
  17. # 加载爆炸音效
  18. # explosion_sound = pygame.mixer.Sound('explosion.wav')
  19. # 定义烟花线条类
  20. class FireworkParticle(pygame.sprite.Sprite):
  21. def __init__(self, x, y, color):
  22. super().__init__()
  23. self.color = color
  24. self.length = random.randint(5, 15) # 线条长度
  25. self.angle = random.uniform(0, 2 * math.pi)
  26. self.speed = random.uniform(1, 5)
  27. self.dx = self.speed * math.cos(self.angle)
  28. self.dy = self.speed * math.sin(self.angle)
  29. self.gravity = 0.1
  30. self.x = x
  31. self.y = y
  32. def update(self):
  33. self.x += self.dx
  34. self.y += self.dy
  35. self.dy += self.gravity
  36. def draw(self, screen):
  37. end_x = self.x + self.length * math.cos(self.angle)
  38. end_y = self.y + self.length * math.sin(self.angle)
  39. pygame.draw.line(screen, self.color, (self.x, self.y), (end_x, end_y), 2) # 绘制线条
  40. # 颜色列表
  41. colors = [(253, 215, 88), (254, 254, 252), (255, 255, 217), (252, 253, 249), (248, 247, 106), (255, 255, 162)]
  42. # 字体显示
  43. font_path = os.path.join(os.path.dirname(__file__), 'font_ttf\\xiaoqingxin.ttf')
  44. zn_font = pygame.font.Font(font_path, 100)
  45. def font_show(font, string, color):
  46. text = font.render(string, True, color)
  47. text_rect = text.get_rect(center=(screen_width // 2, screen_height // 2))
  48. screen.blit(text, text_rect)
  49. # 烟花爆炸函数
  50. def explode(x, y, timeout):
  51. # explosion_sound.play() # 播放爆炸音效
  52. particles = pygame.sprite.Group()
  53. for _ in range(1000): #燃放的烟火密度,值越大越好看
  54. color = random.choice(colors)
  55. particle = FireworkParticle(x, y, color) # 烟花燃放位置
  56. particles.add(particle)
  57. # 爆炸动画循环
  58. current_bg_image = 0 # 当前显示的背景图索引
  59. last_explode_time = pygame.time.get_ticks()
  60. while True:
  61. current_time = pygame.time.get_ticks()
  62. if current_time - last_explode_time >= timeout:
  63. break # 退出循环
  64. particles.update()
  65. # 切换背景图
  66. if current_time % 50 == 0: # 每50毫秒切换一次背景图
  67. current_bg_image = (current_bg_image + 1) % len(bg_images)
  68. screen.blit(bg_images[current_bg_image], (0, 0)) # 绘制背景图
  69. font_show(zn_font, "龙年行大运", (255, 0, 0))
  70. for particle in particles:
  71. particle.draw(screen) # 绘制烟花粒子
  72. pygame.display.flip() # 更新屏幕显示
  73. pygame.time.Clock().tick(60) # 控制帧率
  74. # explosion_sound.stop() # 停止音效
  75. # 显示新年倒数
  76. def countdown():
  77. screen.fill((255, 0, 0)) # 清空屏幕
  78. font_show(zn_font, "跨年倒数", (255, 215, 0))
  79. pygame.display.flip() # 更新屏幕显示
  80. pygame.time.delay(1000) # 延迟1秒
  81. # font = pygame.font.Font(None, 100)
  82. font_path = os.path.join(os.path.dirname(__file__), 'font_ttf\\Antology.ttf')
  83. font = pygame.font.Font(font_path, 100)
  84. countdown_time = 3 # 倒数时间
  85. last_countdown_time = pygame.time.get_ticks()
  86. while countdown_time > 0:
  87. current_time = pygame.time.get_ticks()
  88. if current_time - last_countdown_time >= 1000:
  89. last_countdown_time = current_time
  90. countdown_time -= 1
  91. screen.fill((255, 0, 0)) # 清空屏幕
  92. font_show(font, str(countdown_time), (255, 215, 0))
  93. pygame.display.flip() # 更新屏幕显示
  94. pygame.time.Clock().tick(60) # 控制帧率
  95. screen.fill((255, 0, 0)) # 清空屏幕
  96. font_show(zn_font, "积步千里祝大家", (255, 215, 0))
  97. pygame.display.flip() # 更新屏幕显示
  98. pygame.time.delay(1000) # 延迟1秒
  99. screen.fill((255, 0, 0)) # 清空屏幕
  100. font_show(zn_font, "新年快乐", (255, 215, 0))
  101. pygame.display.flip() # 更新屏幕显示
  102. pygame.time.delay(1000) # 延迟1秒
  103. # 主程序循环
  104. running = True
  105. auto_explode_interval = 2000 # 自动循环燃放的时间间隔(毫秒)
  106. last_explode_time = pygame.time.get_ticks()
  107. countdown() # 显示新年倒数
  108. while running:
  109. for event in pygame.event.get():
  110. if event.type == pygame.QUIT:
  111. running = False
  112. current_time = pygame.time.get_ticks()
  113. if current_time - last_explode_time >= auto_explode_interval:
  114. last_explode_time = current_time
  115. x_offset = screen_width // 2 - 240
  116. y_offset = screen_height
  117. for i in range(4):
  118. x_offset += (i * 80)
  119. y_offset = screen_height // (2 + i)
  120. explode(x_offset, y_offset, 2000)
  121. pygame.display.flip() # 更新屏幕显示
  122. pygame.time.Clock().tick(60) # 控制帧率
  123. # 退出pygame
  124. pygame.quit()

六、总结 

至此,本文内容已全部讲解完毕。祝愿大家在新的一年里龙腾虎跃,龙行天下,龙凤呈祥! 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/111348?site
推荐阅读
相关标签
  

闽ICP备14008679号