Python蓝色飘雪

snows

系列文章

写在前面

Python绘制蓝色飘雪动画的完整代码。

技术需求

  1. Python Turtle 库:用于图形绘制和动画创建。turtle 库提供了一个简洁的图形界面,支持绘制各种形状、控制图形运动及显示动画。
  2. 面向对象编程 (OOP):通过定义 Snow 类实现雪花对象。每个雪花对象具备独立属性(如位置、速度、颜色等)和方法(如 snowmove),充分体现了面向对象的封装特性。
  3. 随机数生成:利用 random 库生成随机数,设置雪花的位置、颜色、大小和速度,确保每片雪花属性独特,模拟自然雪花随机飘落的效果。
  4. 数学函数与三角函数:借助 math 库中的 sin 函数控制雪花的左右漂移,形成随机波动轨迹。同时,运用数学公式调整雪花的运动方向。
  5. 动画与帧控制:采用 tu.tracer(0)tu.update() 控制帧更新,消除闪烁现象,提升动画流畅度。t.clear() 用于清除上一帧内容,为新帧绘制做准备。
  6. 循环与事件驱动:通过 while True 循环持续更新雪花位置并绘制新画面,模拟雪花连续飘落的效果。
  7. 图形重绘与清除:在绘制新雪花前,调用 t.clear() 清除上一帧内容,确保每一帧从空白画布开始,避免雪花重叠影响动画效果。

完整代码

import turtle as tu
import random as ra
import math

tu.setup(1.0, 1.0)
tu.title("蓝色飘雪")
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
……

代码分析

这段代码通过Python的Turtle库实现了飘雪效果,展示了多个雪花在黑色背景下从上方逐渐飘落的动画。代码采用面向对象编程思想创建雪花对象,并利用随机数生成不同雪花的初始状态,确保每片雪花具有独特的轨迹和外观。以下将详细分析代码各部分。

1. 导入必要的库

import turtle as tu
import random as ra
import math
  • turtle 库:用于图形绘制,包括创建画布、设置画笔、绘制雪花及控制动画。
  • random 库:生成随机数,使雪花的位置、颜色、大小和速度等具有随机性,增强动画的真实感。
  • math 库:提供数学函数,用于计算雪花的左右摆动轨迹。

2. 设置画布

tu.setup(1.0, 1.0)
tu.title("蓝色飘雪")
tu.bgcolor('black')
t = tu.Pen()
t.ht()
  • tu.setup(1.0, 1.0):设置画布为最大尺寸,充满屏幕。
  • tu.title("蓝色飘雪"):设置窗口标题为“蓝色飘雪”。
  • tu.bgcolor('black'):设置背景色为黑色,模拟夜空中的雪花。
  • t = tu.Pen():创建一个用于绘制图形的画笔 t
  • t.ht():隐藏画笔,避免绘制过程中出现画笔图形。

3. 定义雪花类 Snow

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

Snow 类表示单片雪花,每个实例代表一片雪花,属性包括:

  • r1:雪花半径,初始化为6。
  • r2:浮动半径(0.15到0.25),调整雪花尺寸。
  • x, y:初始位置,确保雪花出现在不同位置。
  • f:浮动角度(-π到π),控制雪花左右摆动幅度。
  • speed:移动速度(5到10),赋予雪花不同飘落速度。
  • color1, color2:雪花颜色,选自 colors 列表。
  • outline1, outline2:外轮廓线宽,控制雪花边缘粗细。

4. 雪花的绘制函数 snow

snow 方法负责绘制单片雪花,步骤如下:

  1. x = self.r2:设置雪花半径。
  2. t.penup()t.pendown():控制是否开始绘制。
  3. t.goto(self.x, self.y):移动画笔到雪花坐标。
  4. t.pensize(self.outline2):设置画笔宽度。
  5. t.color(self.color2):设置画笔颜色。
  6. 使用正六角形结构描绘雪花形状。

5. 雪花的移动函数 move

move 方法控制雪花移动,模拟飘落效果:

  • self.y -= self.speed:纵向位置递减,模拟向下飘落。
  • self.x -= self.speed * math.sin(self.f):横向位置变化,实现左右摆动。
  • self.f -= 0.1:更新浮动角度,改变摆动方向。
  • 当雪花超出下边界时,重新生成属性实现循环效果。

6. 创建雪花对象

通过循环创建100个 Snow 对象,保存到 Snows 列表中,每个对象具有不同的初始属性,增强动画真实感。

7. 绘制和更新动画

  • tu.tracer(0):禁用自动更新,提高动画效率。
  • t.clear():清除画布内容,准备下一帧绘制。
  • for i in range(50):循环绘制50个雪花,调用 movesnow 方法。
  • tu.update():更新屏幕内容,显示当前帧。
  • tu.mainloop():进入事件循环,持续执行动画。

8. 总结

该代码使用 turtle 库实现飘雪效果,通过面向对象设计,每片雪花都是独立对象,具有随机属性和漂浮效果。通过数学函数计算偏移,使雪花呈现自然轨迹,动画流畅自然,表现力强。

写在后面

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Want595

感谢小伙伴的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值