点击上方“蓝字”,发现更多精彩。
寒冬将至,让我们用python送她一场飘雪吧!
**
系列文章
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实现了三只可爱的皮卡丘! |
| 3 | hellokitty | 粉红色限定丨你好我是HelloKitty! |
| 4 | 小灰灰 | 谁会拒绝一只呆萌的小灰灰呢~ |
| 5 | 喜羊羊 | 我用python实现了一只呆萌的喜羊羊! |
| 6 | Tom&Jerry | 汤姆永远抓不到杰瑞,我们的故事永远不会结束 |
| 7 | 懒羊羊 | 教你用python实现一只可爱的懒羊羊! |
| 其他 | ||
| 1 | 满天星 | Python星星源码 |
| 2 | 雪花(2022) | Python雪花源码 |
| 3 | 模拟星空 | Python模拟星空代码 |
| 4 | 樱花树 | 樱花树下的约定,是承诺也是青春 |
| 5 | 七彩花朵 | Python七彩花朵代码 |
| 6 | 恶搞代码 | Python恶搞代码 |
| 7 | 代码雨 | 三十行代码教你实现《黑客帝国》炫酷代码雨 |
| 8 | 蝙蝠代码 | 万圣节特辑(一)丨 一只蝙蝠的诞生! |
| 9 | 南瓜头 | 万圣节特辑(二)丨 你好恶魔南瓜头! |
写在前面
LIGHT SNOW TODAY
早在22年的冬末,小编其实就已经发布过一段用python实现飘落雪花的视频啦,让我们一起看看吧!
对比今年的雪花,你更喜欢哪一个呢?本期小编将2022冬末的雪花代码进行了重置,给大家带来了全新的雪花代码,一起来看看吧!(含完整代码)
雪花代码(2022)
LIGHT SNOW TODAY
完整代码
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()
程序分析
这是一个使用turtle模块制作的雪花飘落动画。其中,每个雪花都是一个对象,具有自身的坐标、半径、颜色、移动速度等属性,可以自由地移动和修改。主要包含以下几个部分:
1.初始化
首先,需要导入turtle和random模块。然后,设置画布大小和颜色,创建一个画笔对象t并隐藏它。定义一个颜色列表,用于随机生成雪花的颜色。最后,定义一个Snow类来表示雪花,其中包含初始化函数和两个方法:snow和move。
2.生成雪花
在Snow类中,初始化函数会生成一个雪花对象。每个雪花随机生成离散的坐标、颜色、移动速度和左右移动的方向。其中,左右移动方向使用正弦函数来实现。
生成雪花后,可以调用snow方法来绘制出每个雪花的样子。在方法中,使用turtle模块的函数来绘制出6个雪花瓣,每个瓣包含三根线段。绘制完成后,会生成一个雪花。
3.雪花移动
当生成雪花后,需要让它们移动。在Snow类中,通过move方法来实现。每个雪花都有一个速度,上下移动的速度相等,左右移动的速度使用正弦函数来控制。当雪花飘出画布后,需要重新生成一个雪花对象。
4.绘制画面
最后,在主函数中,需要循环生成一定数量的雪花,并不断调用它们的移动函数和绘制函数,来实现雪花的飘落效果。利用turtle模块的tracer和update函数来实现清空画面、加速绘制等功能。
雪花代码(2023)
LIGHT SNOW TODAY
完整代码
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()
程序分析
细心的小伙伴一定会发现,在我们的雪花代码(2023)中,包含了2022版的雪花代码。没错!小编是在原本的雪花代码基础上,增加了新的雪花样式,可以随时切换两种雪花哦~
这是一段使用turtle模块绘制雪花飘落效果的Python代码,下面对其进行具体分析。
首先,代码中导入了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模块的方法来绘制不同形状和颜色的雪花,并控制其移动和重新生成等操作,最终实现了一个美妙的雪花飘落效果。
写在后面
LIGHT SNOW TODAY
我是一只有趣的兔子,感谢你的喜欢!
