这个冬天让我们用python送她一场飘雪吧!

技术

picture.image

点击上方“蓝字”,发现更多精彩。

picture.image

寒冬将至,让我们用python送她一场飘雪吧!

picture.image

**picture.image

系列文章

LIGHT SNOW TODAY**

序号文章目录直达链接
表白系列
1浪漫520表白代码无限弹窗!满屏表白代码来啦,快来看看吧
2满屏表白代码Python满屏表白代码
3跳动的爱心Python跳动的爱心源码
4漂浮爱心Python漂浮爱心源码
5爱心光波Python爱心光波代码
6流星雨Python流星雨源码
7玫瑰花叮咚,您的玫瑰花已送达~
节日系列
1生日快乐Python生日蛋糕代码
2圣诞节Python圣诞树源码
3中秋节中秋佳节将至,一起来赏月吧
4国庆节目光所至皆华夏,五星闪耀为信仰
5儿童节让代码创造童话,共建快乐世界
6万圣节终于要到我这只可爱鬼的节日啦!
7新年快乐Python烟花秀源码
动漫系列
1柯南真相只有一个!名侦探柯南来袭~
2皮卡丘我用python实现了三只可爱的皮卡丘!
3hellokitty粉红色限定丨你好我是HelloKitty!
4小灰灰谁会拒绝一只呆萌的小灰灰呢~
5喜羊羊我用python实现了一只呆萌的喜羊羊!‍
6Tom&Jerry汤姆永远抓不到杰瑞,我们的故事永远不会结束
7懒羊羊教你用python实现一只可爱的懒羊羊!
其他
1满天星Python星星源码
2雪花(2022)Python雪花源码
3模拟星空Python模拟星空代码
4樱花树樱花树下的约定,是承诺也是青春
5七彩花朵Python七彩花朵代码
6恶搞代码Python恶搞代码
7代码雨三十行代码教你实现《黑客帝国》炫酷代码雨
8蝙蝠代码万圣节特辑(一)丨 一只蝙蝠的诞生!
9南瓜头万圣节特辑(二)丨 你好恶魔南瓜头!

picture.image

写在前面

LIGHT SNOW TODAY

picture.image

早在22年的冬末,小编其实就已经发布过一段用python实现飘落雪花的视频啦,让我们一起看看吧!

picture.image

对比今年的雪花,你更喜欢哪一个呢?本期小编将2022冬末的雪花代码进行了重置,给大家带来了全新的雪花代码,一起来看看吧!(含完整代码)

picture.image

雪花代码(2022)

LIGHT SNOW TODAY

picture.image

完整代码

picture.image


            
import turtle as tu
            
import random as ra
            
import math
            
tu.setup(1.0, 1.0)
            
tu.screensize(1.0, 1.0)    #设置画布大小
            
tu.bgcolor('black')  #设置画布颜色
            
t = tu.Pen()
            
t.ht()               #隐藏画笔
            
colors = ['white']   #雪花的颜色列表
            
class Snow():    #雪花类
            
    def __init__(self):
            
        self.r = 6                       #雪花的半径
            
        self.x = ra.randint(-1000,1000)   #雪花的横坐标
            
        self.y = ra.randint(-500,500)     #雪花的纵坐标
            
        self.f = ra.uniform(-3.14,3.14)   #雪花左右移动呈正弦函数
            
        self.speed = ra.randint(5,10)     #雪花移动速度
            
        self.color = ra.choice(colors)    #雪花的颜色
            
        self.outline = 5                 #雪花的大小
            
    def snow(self):                #画每个雪花
            
        x=self.r                   #雪花的半径
            
        t.pensize(self.outline)    #雪花的大小
            
        t.penup()                  #提笔
            
        t.goto(self.x,self.y)      #随机位置
            
        t.pendown()                #落笔
            
        t.color(self.color)        #雪花颜色
            
        for i in range(6):        #循环画六个雪花瓣
            
            t.forward(x*5)
            
            t.backward(x*2)
            
            t.left(60)
            
            t.forward(x*2)
            
            t.backward(x*2)
            
            t.right(120)
            
            t.forward(x*2)
            
            t.backward(x*2)
            
            t.left(60)
            
            t.backward(x*3)
            
            t.right(60)
            
    def move(self):                    #雪花移动函数
            
        if self.y >= -500:            #当雪花还在画布中时
            
            self.y -= self.speed     #设置上下移动速度
            
            self.x -= self.speed * math.sin(self.f)    #设置左右移动速度
            
            self.f -= 0.1            #可以理解成标志,改变左右移动的方向
            
        else:                        #当雪花漂出了画布时,重新生成一个雪花
            
            self.r = 6
            
            self.x = ra.randint(-1000,1000)
            
            self.y = 500
            
            self.f = ra.uniform(-3.14,3.14)
            
            self.speed = ra.randint(5,10)
            
            self.color = ra.choice(colors)
            
            self.outline = 5
            
Snows = []            #用列表保存所有雪花
            
for i in range(100):
            
    Snows.append(Snow())
            
while True:           #开始绘制
            
    tu.tracer(0)
            
    t.clear()
            
    for i in range(50):    #50个漂浮的雪花
            
        Snows[i].move()
            
        Snows[i].snow()
            
    tu.update()
            
tu.mainloop()
        

程序分析

picture.image

picture.image

这是一个使用turtle模块制作的雪花飘落动画。其中,每个雪花都是一个对象,具有自身的坐标、半径、颜色、移动速度等属性,可以自由地移动和修改。主要包含以下几个部分:

picture.image

1.初始化

首先,需要导入turtle和random模块。然后,设置画布大小和颜色,创建一个画笔对象t并隐藏它。定义一个颜色列表,用于随机生成雪花的颜色。最后,定义一个Snow类来表示雪花,其中包含初始化函数和两个方法:snow和move。

picture.image

2.生成雪花

在Snow类中,初始化函数会生成一个雪花对象。每个雪花随机生成离散的坐标、颜色、移动速度和左右移动的方向。其中,左右移动方向使用正弦函数来实现。

生成雪花后,可以调用snow方法来绘制出每个雪花的样子。在方法中,使用turtle模块的函数来绘制出6个雪花瓣,每个瓣包含三根线段。绘制完成后,会生成一个雪花。

picture.image

3.雪花移动

当生成雪花后,需要让它们移动。在Snow类中,通过move方法来实现。每个雪花都有一个速度,上下移动的速度相等,左右移动的速度使用正弦函数来控制。当雪花飘出画布后,需要重新生成一个雪花对象。

picture.image

4.绘制画面

最后,在主函数中,需要循环生成一定数量的雪花,并不断调用它们的移动函数和绘制函数,来实现雪花的飘落效果。利用turtle模块的tracer和update函数来实现清空画面、加速绘制等功能。

picture.image

雪花代码(2023)

LIGHT SNOW TODAY

picture.image

完整代码

picture.image


            
import turtle as tu
            
import random as ra
            
import math
            
tu.setup(1.0, 1.0)
            
tu.screensize(1.0, 1.0)  # 设置画布大小
            
tu.title("Snows")
            
tu.bgcolor('black')  # 设置画布颜色
            
t = tu.Pen()
            
t.ht()  # 隐藏画笔
            
colors = ['white', 'skyblue']  # 雪花的颜色列表
            
class Snow():  # 雪花类
            
    def __init__(self):
            
        self.r1 = 6   # 雪花的半径
            
        self.r2 = ra.uniform(0.15,0.25)
            
        self.x = ra.randint(-1000, 1000)  # 雪花的横坐标
            
        self.y = ra.randint(-500, 500)  # 雪花的纵坐标
            
        self.f = ra.uniform(-3.14, 3.14)  # 雪花左右移动呈正弦函数
            
        self.speed = ra.randint(5, 10)  # 雪花移动速度
            
        self.color1 = colors[0]  # 雪花的颜色
            
        self.color2 = colors[1]
            
        self.outline1 = 5
            
        self.outline2 = 3
            
    def snow1(self):  # 画每个雪花
            
        x = self.r1  # 雪花的半径
            
        t.pensize(self.outline1)  # 雪花的大小
            
        t.penup()  # 提笔
            
        t.goto(self.x, self.y)  # 随机位置
            
        t.pendown()  # 落笔
            
        t.color(self.color1)  # 雪花颜色
            
        for i in range(6):  # 循环画六个雪花瓣
            
            t.forward(x * 5)
            
            t.backward(x * 2)
            
            t.left(60)
            
            t.forward(x * 2)
            
            t.backward(x * 2)
            
            t.right(120)
            
            t.forward(x * 2)
            
            t.backward(x * 2)
            
            t.left(60)
            
            t.backward(x * 3)
            
            t.right(60)
            
    def snow2(self):  # 画每个雪花
            
        x = self.r2  # 雪花的半径
            
        t.penup()  # 提笔
            
        t.goto(self.x, self.y)  # 随机位置
            
        t.pendown()  # 落笔生成长图
            
        t.pensize(self.outline2)  # 雪花的大小
            
        t.color(self.color2)  # 雪花颜色
            
        for i in range(8):
            
            t.left(105 - 45 * i)
            
            t.forward(100 * x)
            
            t.right(30)
            
            t.forward(100 * x)
            
            t.right(150)
            
            t.forward(100 * x)
            
            t.right(30)
            
            t.forward(100 * x)
            
            t.left(105)
            
        t.pensize(0.5)  # 雪花的大小
            
        # 大雪花中间那部分
            
        for j in range(8):
            
            t.left(90 - 45 * j)
            
            t.left(15)
            
            t.forward(30 * x)
            
            t.right(30)
            
            t.forward(30 * x)
            
            t.right(150)
            
            t.forward(30 * x)
            
            t.right(30)
            
            t.forward(30 * x)
            
            t.left(105)
            
    def move(self):  # 雪花移动函数
            
        if self.y >= -500:  # 当雪花还在画布中时
            
            self.y -= self.speed  # 设置上下移动速度
            
            self.x -= self.speed * math.sin(self.f)  # 设置左右移动速度
            
            self.f -= 0.1  # 可以理解成标志,改变左右移动的方向
            
        else:  # 当雪花漂出了画布时,重新生成一个雪花
            
            self.r = 0.2
            
            self.x = ra.randint(-1000, 1000)
            
            self.y = 500
            
            self.f = ra.uniform(-3.14, 3.14)
            
            self.speed = ra.randint(5, 10)
            
            self.color = ra.choice(colors)
            
Snows = []  # 用列表保存所有雪花
            
for i in range(100):
            
    Snows.append(Snow())
            
while True:  # 开始绘制
            
    tu.tracer(0)
            
    t.clear()
            
    for i in range(50):  # 50个漂浮的雪花
            
        Snows[i].move()
            
        Snows[i].snow2()
            
    tu.update()
            
tu.mainloop()
        

程序分析

picture.image

picture.image

细心的小伙伴一定会发现,在我们的雪花代码(2023)中,包含了2022版的雪花代码。没错!小编是在原本的雪花代码基础上,增加了新的雪花样式,可以随时切换两种雪花哦~

picture.image

这是一段使用turtle模块绘制雪花飘落效果的Python代码,下面对其进行具体分析。

picture.image

首先,代码中导入了turtle模块和random模块,并设置了画布大小、标题和背景颜色,创建了一个画笔对象t,并将其隐藏。

代码中还定义了一个Snow类,用来保存每个雪花的属性和绘制方法。在__init__方法中,对每个雪花对象初始化时,随机生成其半径、位置、左右移动速度、颜色等属性。

其中,r1和r2分别表示2022雪花和2023雪花的半径,x和y表示雪花的横纵坐标,f表示雪花左右移动所需的标志,speed表示雪花移动速度,color1和color2表示大雪花和小雪花的颜色,outline1和outline2表示2022雪花和2023雪花的大小。

在snow1和snow2方法中,分别用turtle模块的方法来绘制两种的形状,包括雪花的花瓣、中间部分等,使用不同的颜色和大小来区分不同种类的雪花。

在move方法中,用来控制雪花的移动,当雪花的纵坐标小于等于-500时,即漂出了画布,就将其重新生成,否则就按照设定的速度和移动方向进行移动。

最后,在主函数中,创建了100个雪花对象加入到Snows列表中,然后在循环遍历Snows列表时,调用每个雪花对象的move和snow2方法,实现雪花的漂落和绘制过程,并使用turtle模块的update方法更新画布,实现动态效果。

总之,该段代码通过使用turtle模块的方法来绘制不同形状和颜色的雪花,并控制其移动和重新生成等操作,最终实现了一个美妙的雪花飘落效果。

picture.image

写在后面

LIGHT SNOW TODAY

picture.image

我是一只有趣的兔子,感谢你的喜欢!

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动 EB 级湖仓一体分析服务 LAS 的实践与展望
火山引擎湖仓一体分析服务 LAS 是面向湖仓一体架构的 Serverless 数据处理分析服务,提供一站式的海量数据存储计算和交互分析能力,完全兼容 Spark、Presto、Flink 生态,在字节跳动内部有着广泛的应用。本次演讲将介绍 LAS 在字节跳动内部的发展历程和大规模应用实践,同时介绍 LAS 在火山引擎上的发展规划。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论