当前位置:   article > 正文

Python新年烟花代码分享_pygame.font.sysfont默认字体

pygame.font.sysfont默认字体

目录

写在前面

添加祝福语

添加音效

主函数补充

完整代码展示

效果展示

结论


写在前面

        首先非常感谢“我的python教程”分享的文章Python新年烟花代码-CSDN博客,这篇文章非常详细的介绍了Pygame 绘制烟花的基本原理。基于我对这篇文章的学习,我进一步对代码进行了改善,在烟花爆炸页面添加了祝福语和音效,希望对python初学者有所帮助。

添加祝福语

        这段代码的目的是渲染一段文本并将其存储在 text 变量中,以备后续在 Pygame 窗口中显示。

  1. # 渲染文本并居中
  2. font = pygame.font.SysFont(None, 100) # 使用系统默认字体
  3. text = font.render('Happy Spring Festival in 2024 !', True, (255, 0, 0)) # 将文本颜色改为红色

        pygame.font.SysFont(None, 100)这个函数用于创建一个系统默认字体的字体对象。第一个参数是字体名称,传入 None 表示使用系统默认字体。第二个参数是字体大小,这里设置为 100。这样就创建了一个系统默认字体、大小为 100 的字体对象,存储在 font 变量中。

        font.render('Happy Spring Festival in 2024 !', True, (255, 0, 0))是使用 font 对象的 render() 方法渲染文本。第一个参数是要渲染的文本内容,这里是 "Happy Spring Festival in 2024 !"。第二个参数指定是否启用抗锯齿,设置为 True 表示启用。第三个参数是文本的颜色,这里设置为红色 (255, 0, 0)。渲染后的文本表面被存储在 text 变量中。

添加音效

        这段代码是用来初始化 Pygame 并加载音效文件的部分。

  1. # 初始化 Pygame
  2. pygame.init()
  3. # 加载音效
  4. explosion_sound = pygame.mixer.Sound("explosion.wav")
  5. # 加载背景音乐
  6. pygame.mixer.music.load("background_music.mp3")
  7. pygame.mixer.music.set_volume(0.9) # 设置音量

         explosion_sound = pygame.mixer.Sound("explosion.wav")这行代码加载了一个名为 "explosion.wav" 的音效文件,并将其存储在变量 explosion_sound 中。这表示可以在游戏中播放这个音效,比如在烟花爆炸时播放爆炸音效。

        pygame.mixer.music.load("background_music.mp3"): 这行代码加载了一个名为 "background_music.mp3" 的背景音乐文件,并使用 pygame.mixer.music.load() 函数将其加载到 Pygame 的音乐播放器中。这样就可以在程序运行时播放背景音乐。        

  pygame.mixer.music.set_volume(0.9): 这行代码设置了背景音乐的音量。音量是一个介于 0 和 1 之间的浮点数,其中 0 表示静音,1 表示最大音量。这里将音量设置为 0.9,以便音乐以较高的音量播放。

主函数补充

        下列代码是一个Python程序的主函数(main函数),它使用了Pygame库来创建一个简单的图形界面,并播放背景音乐,同时在屏幕上渲染文本“Happy Spring Festival in 2024!”。

  1. def main():
  2. pygame.display.set_caption('Happy Spring Festival in 2024 !')
  3. win = pygame.display.set_mode((DISPLAY_WIDTH, DISPLAY_HEIGHT))
  4. clock = pygame.time.Clock()
  5. fireworks = [Firework() for i in range(3)]
  6. running = True
  7. # 播放背景音乐
  8. pygame.mixer.music.play(-1) # -1 表示无限循环播放
  9. # 渲染文本并居中
  10. font = pygame.font.SysFont(None, 100) # 使用系统默认字体
  11. text = font.render('Happy Spring Festival in 2024 !', True, (255, 0, 0)) # 将文本颜色改为红色
  12. # 获取文本对象的宽度和高度
  13. text_width, text_height = text.get_size()
  14. # 计算文本对象的左上角坐标,使其位于页面正中
  15. text_x = (DISPLAY_WIDTH - text_width) // 2
  16. text_y = 20 # 调整文本的Y坐标使其位于页面顶部
  17. # 将文本对象渲染到窗口
  18. win.blit(text, (text_x, text_y))

完整代码展示

  1. import math
  2. from random import randint, uniform, choice
  3. import pygame
  4. vector = pygame.math.Vector2
  5. gravity = vector(0, 0.3)
  6. DISPLAY_WIDTH = 1200
  7. DISPLAY_HEIGHT = 800
  8. trail_colours = [(45, 45, 45), (60, 60, 60), (75, 75, 75),
  9. (125, 125, 125), (150, 150, 150)]
  10. dynamic_offset = 1
  11. static_offset = 5
  12. # 初始化 Pygame
  13. pygame.init()
  14. # 加载音效
  15. explosion_sound = pygame.mixer.Sound("explosion.wav")
  16. # 加载背景音乐
  17. pygame.mixer.music.load("background_music.mp3")
  18. pygame.mixer.music.set_volume(0.9) # 设置音量
  19. class Firework:
  20. def __init__(self):
  21. self.colour = (randint(0, 255), randint(0, 255), randint(0, 255))
  22. self.colours = (
  23. (randint(0, 255), randint(0, 255), randint(0, 255)
  24. ), (randint(0, 255), randint(0, 255), randint(0, 255)),
  25. (randint(0, 255), randint(0, 255), randint(0, 255)))
  26. self.firework = Particle(randint(0, DISPLAY_WIDTH), DISPLAY_HEIGHT, True,
  27. self.colour)
  28. self.exploded = False
  29. self.particles = []
  30. self.min_max_particles = vector(100, 400)
  31. def update(self, win):
  32. if not self.exploded:
  33. self.firework.apply_force(gravity)
  34. self.firework.move()
  35. for tf in self.firework.trails:
  36. tf.show(win)
  37. self.show(win)
  38. if self.firework.vel.y >= 0:
  39. self.exploded = True
  40. self.explode()
  41. else:
  42. for particle in self.particles:
  43. particle.apply_force(
  44. vector(gravity.x + uniform(-1, 1) / 20, gravity.y / 2 + (randint(1, 8) / 100)))
  45. particle.move()
  46. for t in particle.trails:
  47. t.show(win)
  48. particle.show(win)
  49. def explode(self):
  50. amount = randint(self.min_max_particles.x, self.min_max_particles.y)
  51. for i in range(amount):
  52. self.particles.append(
  53. Particle(self.firework.pos.x, self.firework.pos.y, False, self.colours))
  54. explosion_sound.play() # 播放爆炸音效
  55. def show(self, win):
  56. pygame.draw.circle(win, self.colour, (int(self.firework.pos.x), int(
  57. self.firework.pos.y)), self.firework.size)
  58. def remove(self):
  59. if self.exploded:
  60. for p in self.particles:
  61. if p.remove is True:
  62. self.particles.remove(p)
  63. if len(self.particles) == 0:
  64. return True
  65. else:
  66. return False
  67. class Particle:
  68. def __init__(self, x, y, firework, colour):
  69. self.firework = firework
  70. self.pos = vector(x, y)
  71. self.origin = vector(x, y)
  72. self.radius = 20
  73. self.remove = False
  74. self.explosion_radius = randint(5, 18)
  75. self.life = 0
  76. self.acc = vector(0, 0)
  77. self.trails = []
  78. self.prev_posx = [-10] * 10
  79. self.prev_posy = [-10] * 10
  80. if self.firework:
  81. self.vel = vector(0, -randint(17, 20))
  82. self.size = 5
  83. self.colour = colour
  84. for i in range(5):
  85. self.trails.append(Trail(i, self.size, True))
  86. else:
  87. self.vel = vector(uniform(-1, 1), uniform(-1, 1))
  88. self.vel.x *= randint(7, self.explosion_radius + 2)
  89. self.vel.y *= randint(7, self.explosion_radius + 2)
  90. self.size = randint(2, 4)
  91. self.colour = choice(colour)
  92. for i in range(5):
  93. self.trails.append(Trail(i, self.size, False))
  94. def apply_force(self, force):
  95. self.acc += force
  96. def move(self):
  97. if not self.firework:
  98. self.vel.x *= 0.8
  99. self.vel.y *= 0.8
  100. self.vel += self.acc
  101. self.pos += self.vel
  102. self.acc *= 0
  103. if self.life == 0 and not self.firework:
  104. distance = math.sqrt((self.pos.x - self.origin.x)
  105. ** 2 + (self.pos.y - self.origin.y) ** 2)
  106. if distance > self.explosion_radius:
  107. self.remove = True
  108. self.decay()
  109. self.trail_update()
  110. self.life += 1
  111. def show(self, win):
  112. pygame.draw.circle(win, (self.colour[0], self.colour[1], self.colour[2], 0), (int(self.pos.x), int(self.pos.y)),
  113. self.size)
  114. def decay(self):
  115. if 50 > self.life > 10:
  116. ran = randint(0, 30)
  117. if ran == 0:
  118. self.remove = True
  119. elif self.life > 50:
  120. ran = randint(0, 5)
  121. if ran == 0:
  122. self.remove = True
  123. def trail_update(self):
  124. self.prev_posx.pop()
  125. self.prev_posx.insert(0, int(self.pos.x))
  126. self.prev_posy.pop()
  127. self.prev_posy.insert(0, int(self.pos.y))
  128. for n, t in enumerate(self.trails):
  129. if t.dynamic:
  130. t.get_pos(self.prev_posx[n + dynamic_offset],
  131. self.prev_posy[n + dynamic_offset])
  132. else:
  133. t.get_pos(self.prev_posx[n + static_offset],
  134. self.prev_posy[n + static_offset])
  135. class Trail:
  136. def __init__(self, n, size, dynamic):
  137. self.pos_in_line = n
  138. self.pos = vector(-10, -10)
  139. self.dynamic = dynamic
  140. if self.dynamic:
  141. self.colour = trail_colours[n]
  142. self.size = int(size - n / 2)
  143. else:
  144. self.colour = (255, 255, 200)
  145. self.size = size - 2
  146. if self.size < 0:
  147. self.size = 0
  148. def get_pos(self, x, y):
  149. self.pos = vector(x, y)
  150. def show(self, win):
  151. pygame.draw.circle(win, self.colour, (int(
  152. self.pos.x), int(self.pos.y)), self.size)
  153. def update(win, fireworks):
  154. for fw in fireworks:
  155. fw.update(win)
  156. if fw.remove():
  157. fireworks.remove(fw)
  158. pygame.display.update()
  159. def main():
  160. pygame.display.set_caption('Happy Spring Festival in 2024 !')
  161. win = pygame.display.set_mode((DISPLAY_WIDTH, DISPLAY_HEIGHT))
  162. clock = pygame.time.Clock()
  163. fireworks = [Firework() for i in range(3)]
  164. running = True
  165. # 播放背景音乐
  166. pygame.mixer.music.play(-1) # -1 表示无限循环播放
  167. # 渲染文本并居中
  168. font = pygame.font.SysFont(None, 100) # 使用系统默认字体
  169. text = font.render('Happy Spring Festival in 2024 !', True, (255, 0, 0)) # 将文本颜色改为红色
  170. # 获取文本对象的宽度和高度
  171. text_width, text_height = text.get_size()
  172. # 计算文本对象的左上角坐标,使其位于页面正中
  173. text_x = (DISPLAY_WIDTH - text_width) // 2
  174. text_y = 20 # 调整文本的Y坐标使其位于页面顶部
  175. # 将文本对象渲染到窗口
  176. win.blit(text, (text_x, text_y))
  177. while running:
  178. clock.tick(60)
  179. for event in pygame.event.get():
  180. if event.type == pygame.QUIT:
  181. running = False
  182. if event.type == pygame.KEYDOWN:
  183. if event.key == pygame.K_1:
  184. fireworks.append(Firework())
  185. if event.key == pygame.K_2:
  186. for i in range(10):
  187. fireworks.append(Firework())
  188. win.fill((20, 20, 30))
  189. if randint(0, 20) == 1:
  190. fireworks.append(Firework())
  191. # 绘制文本
  192. win.blit(text, (text_x, text_y))
  193. update(win, fireworks)
  194. pygame.display.flip()
  195. pygame.quit()
  196. quit()
  197. if __name__ == "__main__":
  198. main()

效果展示

贺新春—烟花效果展示

结论

        祝编友们2024新春快乐!

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

闽ICP备14008679号