目录
新年祝福语
一、作品展示
二、作品所用资源
三、代码与资源说明
四、代码库
五、完整代码
六、总结
新年祝福语
岁月总是悄然流转,让人感叹时间的飞逝,转眼间又快到了中国传统的新年(龙年)。
回首过去,我们经历了许多挑战,也收获了成长。展望未来,我们充满期待。
在这特别的时刻,我想对所有粉丝送上真挚祝福。愿新年带给你们无尽的快乐与幸福,健康与平安。
感谢你们的支持,新的一年我将继续努力创造更多精彩。
祝大家新年快乐!
一、作品展示
以下是我用 [python] 制作的一个新年小作品,希望大家喜欢(龙年背景图是免费下载的)!
二、作品所用资源
由于 pygame 本身不支持中文显示,所以需要自行下载中文字体,而其自带的数字字体不好看,所以也一并下载了(代码中的字体与背景图大家自行更换)。
1. 小清新中文字体
2. 立体数字字体
3. 免费的背景图
三、代码与资源说明
百度云盘完整资源下载:新年快乐
这里展示代码与资源存放位置,是为了方便大家看代码时容易理解其中的内容。
四、代码库
本文主要用到了以下四个库。如果大家还没安装,可以 win + r 输入 cmd 安装。
pip install pygamepip install randompip install mathpip install os
五、完整代码
以下是完整的代码。其中,爆竹音效我没有添加,但有预留实现接口,大家如果感兴趣可以网上找相应的音频文件,并且将已注释的接口打开来播放即可。
import pygameimport randomimport mathimport os# 初始化pygamepygame.init()# 设置窗口大小和标题screen_width, screen_height = 800, 600screen = pygame.display.set_mode((screen_width, screen_height))pygame.display.set_caption("Fireworks")# 加载动态背景图bg_images = []for i in range(1, 3): # 替换为你的动态背景图文件名的范围 image_path = f"D:\\share\\python\\HappNewYear\\pic\\dragon_animation_{i}.png" # 替换为你的动态背景图路径 image = pygame.image.load(image_path).convert() bg_images.append(image)# 加载爆炸音效# explosion_sound = pygame.mixer.Sound('explosion.wav')# 定义烟花线条类class FireworkParticle(pygame.sprite.Sprite): def __init__(self, x, y, color): super().__init__() self.color = color self.length = random.randint(5, 15) # 线条长度 self.angle = random.uniform(0, 2 * math.pi) self.speed = random.uniform(1, 5) self.dx = self.speed * math.cos(self.angle) self.dy = self.speed * math.sin(self.angle) self.gravity = 0.1 self.x = x self.y = y def update(self): self.x += self.dx self.y += self.dy self.dy += self.gravity def draw(self, screen): end_x = self.x + self.length * math.cos(self.angle) end_y = self.y + self.length * math.sin(self.angle) pygame.draw.line(screen, self.color, (self.x, self.y), (end_x, end_y), 2) # 绘制线条# 颜色列表colors = [(253, 215, 88), (254, 254, 252), (255, 255, 217), (252, 253, 249), (248, 247, 106), (255, 255, 162)]# 字体显示font_path = os.path.join(os.path.dirname(__file__), 'font_ttf\\xiaoqingxin.ttf')zn_font = pygame.font.Font(font_path, 100)def font_show(font, string, color): text = font.render(string, True, color) text_rect = text.get_rect(center=(screen_width // 2, screen_height // 2)) screen.blit(text, text_rect)# 烟花爆炸函数def explode(x, y, timeout): # explosion_sound.play() # 播放爆炸音效 particles = pygame.sprite.Group() for _ in range(1000): #燃放的烟火密度,值越大越好看 color = random.choice(colors) particle = FireworkParticle(x, y, color) # 烟花燃放位置 particles.add(particle) # 爆炸动画循环 current_bg_image = 0 # 当前显示的背景图索引 last_explode_time = pygame.time.get_ticks() while True: current_time = pygame.time.get_ticks() if current_time - last_explode_time >= timeout: break # 退出循环 particles.update() # 切换背景图 if current_time % 50 == 0: # 每50毫秒切换一次背景图 current_bg_image = (current_bg_image + 1) % len(bg_images) screen.blit(bg_images[current_bg_image], (0, 0)) # 绘制背景图 font_show(zn_font, "龙年行大运", (255, 0, 0)) for particle in particles: particle.draw(screen) # 绘制烟花粒子 pygame.display.flip() # 更新屏幕显示 pygame.time.Clock().tick(60) # 控制帧率 # explosion_sound.stop() # 停止音效# 显示新年倒数def countdown(): screen.fill((255, 0, 0)) # 清空屏幕 font_show(zn_font, "跨年倒数", (255, 215, 0)) pygame.display.flip() # 更新屏幕显示 pygame.time.delay(1000) # 延迟1秒 # font = pygame.font.Font(None, 100) font_path = os.path.join(os.path.dirname(__file__), 'font_ttf\\Antology.ttf') font = pygame.font.Font(font_path, 100) countdown_time = 3 # 倒数时间 last_countdown_time = pygame.time.get_ticks() while countdown_time > 0: current_time = pygame.time.get_ticks() if current_time - last_countdown_time >= 1000: last_countdown_time = current_time countdown_time -= 1 screen.fill((255, 0, 0)) # 清空屏幕 font_show(font, str(countdown_time), (255, 215, 0)) pygame.display.flip() # 更新屏幕显示 pygame.time.Clock().tick(60) # 控制帧率 screen.fill((255, 0, 0)) # 清空屏幕 font_show(zn_font, "积步千里祝大家", (255, 215, 0)) pygame.display.flip() # 更新屏幕显示 pygame.time.delay(1000) # 延迟1秒 screen.fill((255, 0, 0)) # 清空屏幕 font_show(zn_font, "新年快乐", (255, 215, 0)) pygame.display.flip() # 更新屏幕显示 pygame.time.delay(1000) # 延迟1秒# 主程序循环running = Trueauto_explode_interval = 2000 # 自动循环燃放的时间间隔(毫秒)last_explode_time = pygame.time.get_ticks()countdown() # 显示新年倒数while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False current_time = pygame.time.get_ticks() if current_time - last_explode_time >= auto_explode_interval: last_explode_time = current_time x_offset = screen_width // 2 - 240 y_offset = screen_height for i in range(4): x_offset += (i * 80) y_offset = screen_height // (2 + i) explode(x_offset, y_offset, 2000) pygame.display.flip() # 更新屏幕显示 pygame.time.Clock().tick(60) # 控制帧率# 退出pygamepygame.quit()
六、总结
至此,本文内容已全部讲解完毕。祝愿大家在新的一年里龙腾虎跃,龙行天下,龙凤呈祥!