当前位置:   article > 正文

用python写的新年快乐的代码,python节日祝福源代码_python运行新年快乐代码

python运行新年快乐代码

本篇文章给大家谈谈用python写的新年快乐的代码,以及python节日祝福源代码,希望对各位有所帮助,不要忘了收藏本站喔。

春节即将到来之际,用Python写了春节快乐的祝福代码,程序运行加载的背景图各背景音乐均可自行选择,设置动态效果阶段模拟放烟花的过程。首先是粒子扩张阶段,再是停留阶段,然后是自由落体阶段,最后是消失python画六瓣花代码。同时停留阶段在屏幕上绘制想表达的文字,完整程序包请在文末下载(含背景图片及背景音乐)运行效果图:在这里插入图片描述
完整程序代码:

  1. # -*- coding: UTF-8 -*-
  2. '''
  3. 代码用途 : 庆祝新年
  4. 公众号 : Python代码大全
  5. '''
  6. import random
  7. import pygame as py
  8. import tkinter as tk
  9. from time import time, sleep
  10. from tkinter import filedialog
  11. from PIL import Image, ImageTk
  12. from math import sin, cos, radians
  13. from random import choice, uniform, randint
  14. # 导入库
  15. def randomcolor():
  16. # 生成随机颜色
  17. colArr = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
  18. color = ""
  19. for i in range(6):
  20. color += colArr[random.randint(0, 14)]
  21. return "#" + color
  22. GRAVITY = 0.06
  23. # 重力变量
  24. colors = ['red', 'blue', 'yellow', 'white', 'green', 'orange', 'purple', 'seagreen', 'indigo', 'cornflowerblue', 'pink']
  25. # 颜色列表
  26. '''
  27. Generic class for particles
  28. particles are emitted almost randomly on the sky, forming a round of circle (a star) before falling and getting removed
  29. from canvas
  30. Attributes(属性):
  31. - id: 粒子的id
  32. - x, y: 粒子的坐标
  33. - vx, vy: 粒子在对应坐标的变化速度
  34. - total:一颗烟花里的粒子总数
  35. - age: 粒子在画布上停留的时间
  36. - color: 自我移植
  37. - cv: 画布
  38. - lifespan: 粒子在画布上停留的时间
  39. '''
  40. class part:
  41. # 为每一个烟花绽放出来的粒子单独构建一个类的对象 ,每个粒子都会有一些重要的属性,决定它的外观(大小、颜色)、移动速度等
  42. def __init__(self, cv, idx, total, explosion_speed, x=0., y=0., vx=0., vy=0., size=2., color='red', lifespan=2,
  43. **kwargs):
  44. self.id = idx
  45. # 每个烟花的特定标识符
  46. self.x = x
  47. # 烟花绽放x轴
  48. self.y = y
  49. # 烟花绽放y轴
  50. self.initial_speed = explosion_speed
  51. # 粒子初始速度
  52. self.vx = vx
  53. # 粒子运动x轴速度
  54. self.vy = vy
  55. # 粒子运动y轴速度
  56. self.total = total
  57. # 绽放粒子数
  58. self.age = 0
  59. # 粒子已停留时间
  60. self.color = color
  61. # 粒子颜色
  62. self.cv = cv
  63. # 画布
  64. self.cid = self.cv.create_oval(x - size, y - size, x + size, y + size, fill=self.color, outline='white',
  65. width=0.01)
  66. # 指定一个限定矩形(Tkinter 会自动在这个矩形内绘制一个椭圆)
  67. self.lifespan = lifespan
  68. # 粒子在画布上停留的时间
  69. def update(self, dt):
  70. self.age += dt
  71. # 更新粒子停留时间
  72. if self.alive() and self.expand():
  73. # 如果粒子既存活又处于扩张阶段
  74. move_x = cos(radians(self.id * 360 / self.total)) * self.initial_speed
  75. # 粒子x轴继续膨胀
  76. move_y = sin(radians(self.id * 360 / self.total)) * self.initial_speed
  77. # 粒子y轴继续膨胀
  78. self.cv.move(self.cid, move_x, move_y)
  79. # 根据id把画布上的粒子移动x和y个距离
  80. self.vx = move_x / (float(dt) * 1000)
  81. # 粒子x轴的速度
  82. elif self.alive():
  83. columnFont = ('华文行楷', 20)
  84. # 如果粒子仅存活不扩张(只是停留时间足够,说明膨胀到最大了),则自由坠落
  85. self.cv.create_text(250, 100, text='新', tag="write_tag", fill=choice(colors), font=columnFont) # 字体
  86. self.cv.create_text(300, 100, text='年', tag="write_tag", fill=choice(colors), font=columnFont)
  87. self.cv.create_text(350, 100, text='快', tag="write_tag", fill=choice(colors), font=columnFont)
  88. self.cv.create_text(400, 100, text='乐', tag="write_tag", fill=choice(colors), font=columnFont)
  89. # 删除文字标签
  90. move_x = cos(radians(self.id * 360 / self.total))
  91. # x轴的移动位移
  92. # we technically don't need to update x, y because move will do the job
  93. self.cv.move(self.cid, self.vx + move_x, self.vy + GRAVITY * dt)
  94. self.vy += GRAVITY * dt
  95. # 更新y轴
  96. elif self.cid is not None:
  97. # 如果粒子生命周期已过,则将其移除
  98. cv.delete(self.cid)
  99. # 在画布上移除该粒子对象
  100. self.cv.delete("write_tag")
  101. # 同时移除字体
  102. self.cid = None
  103. def expand(self):
  104. # 定义膨胀效果时间帧
  105. return self.age <= 1.2
  106. # 判断膨胀时间是否小于1.2秒
  107. def alive(self):
  108. # 判断粒子是否仍在生命周期内
  109. return self.age <= self.lifespan
  110. # 判断已停留时间是否小于应该停留时间
  111. '''
  112. Firework simulation loop:
  113. Recursively call to repeatedly emit new fireworks on canvas
  114. a list of list (list of stars, each of which is a list of particles)
  115. is created and drawn on canvas at every call,
  116. via update protocol inside each 'part' object
  117. '''
  118. def simulate(cv):
  119. t = time()
  120. # 返回自1970年后经过的浮点秒数,精确到小数点后7位
  121. explode_points = []
  122. # 爆炸点列表,烟花列表
  123. wait_time = randint(10, 100)
  124. # 等待时间为10到100之间整数
  125. numb_explode = randint(8, 20)
  126. # 爆炸烟花个数时6到10之间的随机整数
  127. # create list of list of all particles in all simultaneous explosion
  128. for point in range(numb_explode):
  129. # 为所有模拟烟花绽放的全部粒子创建一列列表
  130. if point <= 4:
  131. objects = []
  132. # 每个点的爆炸粒子列表粒子列表
  133. x_cordi = 250 + point * 50
  134. # 每个爆炸点的x轴
  135. y_cordi = 100
  136. # 每个爆炸点的y轴
  137. speed = uniform(0.5, 1.5)
  138. # 每个爆炸点的速度
  139. size = uniform(0.5, 3)
  140. # 每个爆炸点的大小
  141. color = choice(colors)
  142. # 每个爆炸点的颜色
  143. explosion_speed = uniform(0.6, 3)
  144. # 爆炸的绽放速度
  145. total_particles = randint(10, 60)
  146. # 烟花的总粒子数
  147. for i in range(1, total_particles):
  148. # 同一个烟花爆炸出来的粒子大小、速度、坐标都是相同的
  149. r = part(cv, idx=i, total=total_particles, explosion_speed=explosion_speed, x=x_cordi, y=y_cordi,
  150. vx=speed, vy=speed, color=color, size=size, lifespan=uniform(0.6, 1.75))
  151. # 把上述参数代入part函数,但是每个粒子的生存时间是自己独立的
  152. objects.append(r)
  153. # 把r添加进粒子列表
  154. explode_points.append(objects)
  155. # 把粒子列表添加进烟花列表
  156. else:
  157. objects = []
  158. # 每个点的爆炸粒子列表粒子列表
  159. x_cordi = randint(50, 550)
  160. # 每个爆炸点的x轴
  161. y_cordi = randint(50, 150)
  162. # 每个爆炸点的y轴
  163. speed = uniform(0.5, 1.5)
  164. # 每个爆炸点的速度
  165. size = uniform(0.5, 3)
  166. # 每个爆炸点的大小
  167. color = choice(colors)
  168. # 每个爆炸点的颜色
  169. explosion_speed = uniform(0.3, 2)
  170. # 爆炸的绽放速度
  171. total_particles = randint(10, 50)
  172. # 烟花的总粒子数
  173. for i in range(1, total_particles):
  174. # 同一个烟花爆炸出来的粒子大小、速度、坐标都是相同的
  175. r = part(cv, idx=i, total=total_particles, explosion_speed=explosion_speed, x=x_cordi, y=y_cordi,
  176. vx=speed, vy=speed, color=color, size=size, lifespan=uniform(0.6, 1.75))
  177. # 把上述参数代入part函数,但是每个粒子的生存时间是自己独立的
  178. objects.append(r)
  179. # 把r添加进粒子列表
  180. explode_points.append(objects)
  181. # 把粒子列表添加进烟花列表
  182. total_time = .0
  183. # 初始化总时间
  184. # keeps undate within a timeframe of 1.8 second
  185. while total_time < 2:
  186. # 当总时间小于1.8秒时运行该循环
  187. sleep(0.03)
  188. # 让画面暂停0.01秒
  189. tnew = time()
  190. # 刷新时间
  191. t, dt = tnew, tnew - t
  192. # 时间等于新时间,和上次时间间隔为tnew-t
  193. for point in explode_points:
  194. # 遍历烟花列表
  195. for item in point:
  196. # 遍历烟花里的粒子列表
  197. item.update(dt)
  198. # 粒子更新时间
  199. cv.update()
  200. # 刷新画布
  201. total_time += dt
  202. # 为while循环增加时间
  203. root.after(wait_time, simulate, cv)
  204. # 将组件置于其他组件之后,放在最顶层,覆盖下面的,递归调用自己,形成新一轮的爆炸
  205. def close(*ignore):
  206. # 打开模拟循环并关闭窗口
  207. """Stops simulation loop and closes the window."""
  208. global root
  209. root.quit()
  210. if __name__ == '__main__':
  211. root = tk.Tk()
  212. root.title('祝大家—虎年大吉') # 设置窗体的标题栏
  213. cv = tk.Canvas(root, height=600, width=600)
  214. # 绘制一个高600,宽600的画布
  215. bgpath = filedialog.askopenfilename(title='请选择背景图片')
  216. # 选择背景图片
  217. image = Image.open(bgpath)
  218. # 打开背景图片
  219. image = image.resize((600, 600), Image.ANTIALIAS)
  220. # 把背景图片调整成窗口大小
  221. photo = ImageTk.PhotoImage(image)
  222. cv.create_image(0, 0, image=photo, anchor='nw')
  223. # 在画布上绘制加载的背景图片
  224. bgmusic = filedialog.askopenfilename(title='请选择背景音乐')
  225. py.mixer.init()
  226. # 初始化
  227. py.mixer.music.load(bgmusic)
  228. # 文件加载
  229. py.mixer.music.play(-1, 0, fade_ms=50)
  230. # 播放 第一个是播放值 -1代表循环播放, 第二个参数代表开始播放的时间
  231. py.mixer.music.pause()
  232. # 暂停
  233. py.mixer.music.unpause()
  234. # 取消暂停
  235. cv.pack()
  236. # 把cv添加进去
  237. root.protocol("WM_DELETE_WINDOW", close)
  238. root.after(200, simulate, cv)
  239. # 在0.1秒后再调用stimulate函数,生成一轮烟花绽放效果
  240. root.mainloop()
  241. # 执行root,生成窗口

完整程序包下载地址:https://pan.baidu.com/s/1av00wEa-x7r3fC-Uqu9u9w,下载提取码获取请先关注:Python代码大全,在公众号回复:春节快乐提取码。Python代码大全

文章知识点与官方知识档案匹配,可进一步学习相关知识
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/74603
推荐阅读
相关标签
  

闽ICP备14008679号