本文参考了https://blog.csdn.net/weixin_43943977/article/details/102691392博主的樱花以及https://blog.csdn.net/weixin_44786530/article/details/90311184博主的烟花

“樱花是爱情与希望的象征,代表着高雅,质朴纯洁的爱情。樱花宛如懵懂少女的,安静得在春天开放,满树的白色粉色的樱花,是对情人诉说爱情的最美语言。心中的某个人,就如那场寂寞的樱花雨,缓缓消失在时光的深处,留下永恒的记忆。”

“烟花过后,灿烂瞬间转为平淡。瞬息万变的烟花,花瓣如雨,纷纷坠落,似乎触手可及,却只是昙花一现。”

试着将樱花与烟花结合起来,但烟花却无法在上空绽放,后面再调整吧

源码如下:

import turtle
import random
import time
from PIL import Image, ImageTk
# from time import sleep
import tkinter as tk
from time import sleep
from random import choice, uniform, randint
from math import sin, cos, radians# 模拟重力
GRAVITY = 0.05
# 颜色选项(随机或者按顺序)
colors = ['red', 'blue', 'yellow', 'white', 'green', 'orange', 'purple', 'seagreen', 'indigo', 'cornflowerblue']# 画樱花的躯干(60,t)
def Tree(branch, t):time.sleep(0.0005)if branch > 3:if 8 <= branch <= 12:if random.randint(0, 2) == 0:t.color('snow')  # 白else:t.color('lightcoral')  # 淡珊瑚色t.pensize(branch / 3)elif branch < 8:if random.randint(0, 1) == 0:t.color('snow')else:t.color('lightcoral')  # 淡珊瑚色t.pensize(branch / 2)else:t.color('sienna')  # 赭(zhě)色t.pensize(branch / 10)  # 6t.forward(branch)a = 1.5 * random.random()t.right(20 * a)b = 1.5 * random.random()Tree(branch - 10 * b, t)t.left(40 * a)Tree(branch - 10 * b, t)t.right(20 * a)t.up()t.backward(branch)t.down()# 掉落的花瓣
def Petal(m, t):for i in range(m):a = 200 - 400 * random.random()b = 10 - 20 * random.random()t.up()t.forward(b)t.left(90)t.forward(a)t.down()t.color('lightcoral')  # 淡珊瑚色t.circle(1)t.up()t.backward(a)t.right(90)t.backward(b)class Particle:def __init__(self, cv, idx, total, explosion_speed, x=0., y=0., vx=0., vy=0., size=2., color='red', lifespan=2,**kwargs):self.id = idxself.x = xself.y = yself.initial_speed = explosion_speedself.vx = vxself.vy = vyself.total = totalself.age = 0self.color = colorself.cv = cvself.cid = self.cv.create_oval(x - size, y - size, x + size,y + size, fill=self.color)self.lifespan = lifespandef update(self, dt):self.age += dt# 粒子范围扩大if self.alive() and self.expand():move_x = cos(radians(self.id * 360 / self.total)) * self.initial_speedmove_y = sin(radians(self.id * 360 / self.total)) * self.initial_speedself.cv.move(self.cid, move_x, move_y)self.vx = move_x / (float(dt) * 1000)# 以自由落体坠落elif self.alive():move_x = cos(radians(self.id * 360 / self.total))# we technically don't need to update x, y because move will do the jobself.cv.move(self.cid, self.vx + move_x, self.vy + GRAVITY * dt)self.vy += GRAVITY * dt# 移除超过最高时长的粒子elif self.cid is not None:cv.delete(self.cid)self.cid = None# 扩大的时间def expand (self):return self.age <= 1.2# 粒子是否在最高存在时长内def alive(self):return self.age <= self.lifespan'''
循环调用保持不停
'''
def simulate(cv):# time.sleep(0.0005)t1 = time.time()explode_points = []wait_time = randint(10, 100)numb_explode = randint(6, 10)# 创建一个所有粒子同时扩大的二维列表for point in range(numb_explode):objects = []x_cordi = randint(50, 550)y_cordi = randint(50, 150)speed = uniform(0.5, 1.5)size = uniform(0.5, 3)color = choice(colors)explosion_speed = uniform(0.2, 1)total_particles = randint(10, 50)for i in range(1, total_particles):r = Particle(cv, idx=i, total=total_particles, explosion_speed=explosion_speed, x=x_cordi, y=y_cordi,vx=speed, vy=speed, color=color, size=size, lifespan=uniform(0.6, 1.75))objects.append(r)explode_points.append(objects)total_time = .0# 1.8s内一直扩大while total_time < 1.8:sleep(0.01)tnew = time.time()t1, dt = tnew, tnew - t1for point in explode_points:for item in point:item.update(dt)cv.update()total_time += dt# 循环调用root.after(wait_time, simulate, cv)def close(*ignore):"""退出程序、关闭窗口"""global rootroot.quit()if __name__ == '__main__':root = tk.Tk()cv = tk.Canvas(root, height=520, width=750)cv.pack()image = Image.open("./black.jpg")photo = ImageTk.PhotoImage(image)w = turtle.TurtleScreen(cv)t = turtle.RawTurtle(w)# 选一个好看的背景会让效果更惊艳!cv.create_image(0, 0, image=photo)# root.mainloop()t.hideturtle()  # 隐藏画笔t.getscreen().tracer(5, 0)w.screensize(bg='black')  # wheat小麦t.left(90)t.up()t.backward(150)t.down()t.color('sienna')# 画樱花的躯干Tree(60, t)# 掉落的花瓣Petal(200, t)root.protocol("WM_DELETE_WINDOW", close)root.after(100, simulate, cv)root.mainloop()
# w.exitonclick()

注:原樱花采用Turtle,烟花采用tkinter,结合需将Turtle转化为tkinter,转化代码为:

root = tk.Tk()
cv = tk.Canvas(root, height=520, width=750)
w = turtle.TurtleScreen(cv)
t = turtle.RawTurtle(w)

以及import time与from time import time的区别。

Python实现浪漫的樱花与烟花雨相关推荐

  1. python 实现漂亮的烟花、樱花、玫瑰花_Python实现浪漫的樱花与烟花雨

    本文参考了https://blog.csdn.net/weixin_43943977/article/details/102691392博主的樱花以及https://blog.csdn.net/wei ...

  2. python樱花_Python实现浪漫的樱花与烟花雨

    import turtle import random import time from PIL import Image, ImageTk # from time import sleep impo ...

  3. python画图——浪漫的樱花❀

    图片: 二:python代码 import turtle as T import random import time   # 画樱花的躯干(60,t) def Tree(branch, t):   ...

  4. HTML5七夕情人节表白网页❤ 浪漫的樱花雨3D相册 ❤ HTML+CSS+JavaScript

    HTML5七夕情人节表白网页❤ 浪漫的樱花雨3D相册 ❤ HTML+CSS+JavaScript 这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看. 此 ...

  5. 含源码,用Python实现浪漫烟花

    目录 前言 环境准备 代码编写 效果展示 前言 Python实现浪漫的烟花特效 现在很多地方都不能放烟花了,既然看不到, 那作为程序猿的我们还不能自己用代码做一个吗? 今天就带大家用代码做一个烟花特效 ...

  6. python语言表白源码-python七夕浪漫表白源码

    本文实例为大家分享了python七夕浪漫表白的具体代码,供大家参考,具体内容如下 from turtle import * from time import sleep def go_to(x, y) ...

  7. python浪漫代码-python七夕浪漫表白源码

    本文实例为大家分享了python七夕浪漫表白的具体代码,供大家参考,具体内容如下 from turtle import * from time import sleep def go_to(x, y) ...

  8. python表白源代码-python七夕浪漫表白源码

    本文实例为大家分享了python七夕浪漫表白的具体代码,供大家参考,具体内容如下 from turtle import * from time import sleep def go_to(x, y) ...

  9. python樱花_用 Python 绘制美丽的樱花

    原标题:用 Python 绘制美丽的樱花 黑夜可能漫长,但总会迎来温暖的阳光,三月如期而至,武大的樱花又一次盛开.那么今天就一起来看看怎样在python中画一棵美丽的樱花树- 说到用python画画, ...

最新文章

  1. QuickFlow之任务代理-TaskDelegation
  2. 自己喜欢的shell终端配置
  3. listview winfrom 表头_winform ListView点击行表头,排序
  4. 指针数组和数组指针——兄弟你的括号呢?
  5. apache poi 修改docx表格_word 模板内容的替换和生成word 表格(使用poi)
  6. 印度首富之女大婚,贫穷限制了我的想象……
  7. 【数据结构与算法】非森林版并查集V2.1的Java实现
  8. java date 转换sql date_java.util.Date和java.sql.Date之间的转换
  9. spring整合shiro
  10. C/C++ sizeof(上)
  11. 软件产品需求分析模板
  12. 电子商务系统怎么开发,有哪些流程_OctShop
  13. 阿里云centos8安装rabbitMq
  14. VGG16-好莱坞明星识别
  15. 马哥Python视频
  16. 认识世界和改造世界 [马原]
  17. Java后端面试(五)
  18. Spring官网下载各版本jar包
  19. logback过滤部分日志输出
  20. 装箱和拆箱分别什么意思?

热门文章

  1. Mac virtualbox 共享文件夹
  2. SOAPpy 调用天气预报WebService
  3. 《创业大败局》一文的启示
  4. 使用js实现简单的下拉菜单
  5. 回归测试的关键性和重要性及测试方法
  6. 大话西游虚拟机 无法登陆解 进不去、黑屏、决办法
  7. 流程图系列:ProcessOn如何扩大页面?
  8. 添加用户到组的两种方式
  9. Android入门之简单的BMI计算
  10. 一起来拥抱强大的TypeScript吧--Ts+Vue完全教程