Python大雪纷飞

系列文章

序号 直达链接
Tkinter
1 Python李峋同款可写字版跳动的爱心
2 Python跳动的双爱心
3 Python蓝色跳动的爱心
4 Python动漫烟花
5 Python粒子烟花
Turtle
1 Python满屏飘字
2 Python蓝色流星雨
3 Python金色流星雨
4 Python漂浮爱心
5 Python爱心光波①
6 Python爱心光波②
7 Python满天繁星
8 Python五彩气球
9 Python白色飘雪
10 Python七彩花朵
11 Python 3D星空
12 Python大雪纷飞
13 Python一闪一闪亮星星
14 Python爱心泡泡
15 Python爱心射线
16 Python圣诞礼物
17 Python礼物圣诞树
18 Python浪漫星空
19 Python飞舞蝙蝠
20 Python万圣礼物
21 Python蓝色飘雪
Pygame
1 Python跨年烟花
2 Python炫酷烟花
3 Python黑客帝国字母雨
敬请期待……

写在前面

Python实现大雪纷飞动态效果的完整代码。

技术需求

  1. Turtle图形库:用于创建画布、绘制图形和控制动画。通过turtle库中的方法,如Pen(), goto(), circle(), color()等,实现了动态绘制雪花的效果。

  2. 随机数生成:通过random库生成随机数,确保雪花的位置、速度、大小等属性是随机的,模拟了雪花下落时的自然随机性。

  3. 面向对象编程(OOP):使用了Snow类来封装雪花的属性和行为。每个雪花对象都有自己的位置、大小、颜色和下落速度,以及绘制和移动的方法。

  4. 无限循环:使用while True:实现了一个持续更新的动画循环,使得雪花不断下落,形成动态效果。

  5. 动画帧控制:通过tu.tracer(0)tu.update()关闭自动刷新,并手动控制动画更新,实现平滑的雪花下落效果。

  6. 图形更新和清空:使用clear()方法清空每一帧的画布,以便重新绘制雪花,确保每个动画帧都是新的。

背景图片

完整代码

import turtle as tu
import random as ra
import time

tu.setup(1.0, 1.0, None, None)
tu.bgcolor('black')  # 设置画布颜色
tu.title("张万森下雪了")
tu.bgpic('test.png')
t = tu.Pen()
t.ht()  # 隐藏画笔
colors = ['white']  # 雪花的颜色列表


class Snow():  # 雪花类
    def __init__(self):
        self.r = ra.uniform(1, 3)  # 雪花的半径
        self.x = ra.randint(-1000, 1000)  # 雪花的横坐标
        self.y = ra.randint(500, 1000)  # 雪花的纵坐标
        self.speed = ra.randint(15, 99)  # 雪花移动速度
        self.color = ra.choice(colors)  # 雪花的颜色
        self.outline = 2  # 雪花的大小

……

代码分析

这段代码实现了一个用Python的Turtle图形库绘制动态雪花的效果,背景图为test.png,并通过模拟雪花的下落来呈现下雪的场景,以下是详细的分析。

1. 导入库

import turtle as tu
import random as ra
import time
  • turtle(简称tu): 用于绘制图形和动画的库,能够创建一个画布,并使用“画笔”进行绘制。
  • random(简称ra): 用于生成随机数的库,这里用于随机生成雪花的属性(位置、大小、速度等)。
  • time:这里引入了time库,但并未在代码中实际使用。

2. 设置画布

tu.setup(1.0, 1.0, None, None)
tu.bgcolor('black')  # 设置画布颜色
tu.title("张万森下雪了")
tu.bgpic('test.png')
  • tu.setup(1.0, 1.0, None, None):设置画布的大小为默认大小(1.0表示画布占据整个屏幕)。
  • tu.bgcolor('black'):设置背景颜色为黑色,符合下雪场景的黑夜效果。
  • tu.title("张万森下雪了"):为画布窗口设置标题。
  • tu.bgpic('test.png'):设置背景图片为test.png,这张图片会作为画布的背景,增加视觉效果。

3. 初始化画笔

t = tu.Pen()
t.ht()  # 隐藏画笔
  • t = tu.Pen():创建一个画笔对象t,通过它可以进行各种绘图操作。
  • t.ht():隐藏画笔,使得画笔在绘图时不可见,仅显示结果。

4. 雪花类定义

class Snow():
    def __init__(self):
        self.r = ra.uniform(1, 3)  # 雪花的半径
        self.x = ra.randint(-1000, 1000)  # 雪花的横坐标
        self.y = ra.randint(500, 1000)  # 雪花的纵坐标
        self.speed = ra.randint(15, 99)  # 雪花移动速度
        self.color = ra.choice(colors)  # 雪花的颜色
        self.outline = 2  # 雪花的大小
  • __init__(self)是雪花类的构造函数,用来初始化每个雪花的属性。
    • self.r:雪花的半径,范围在1到3之间。
    • self.x:雪花的横坐标,随机生成在-1000到1000之间。
    • self.y:雪花的纵坐标,随机生成在500到1000之间,使得雪花初始位置位于画布的上方。
    • self.speed:雪花的下落速度,随机生成15到99之间的数值。
    • self.color:雪花的颜色,随机从colors列表中选择(这里只包含白色“white”)。
    • self.outline:雪花的边框大小,固定为2。

5. 雪花的绘制方法

  • snow(self)方法用来绘制单个雪花。
    • t.pensize(self.outline):设置画笔的大小为雪花的边框大小(outline)。
    • t.penup():提起画笔,以便移动到雪花的起始位置。
    • t.goto(self.x, self.y):将画笔移动到雪花的随机坐标。
    • t.pendown():放下画笔开始绘制。
    • t.color(self.color):设置雪花的颜色为白色(通过self.color)。
    • t.begin_fill()t.end_fill():开始和结束填充颜色。
    • t.circle(self.r):绘制一个圆形,代表雪花的形状,半径为self.r

6. 雪花移动方法

  • move(self)方法控制雪花的下落。
    • 当雪花的纵坐标self.y大于等于-500时,雪花继续下落,纵坐标self.y减去self.speed,实现下落效果。
    • 如果雪花超出了画布(即self.y小于-500),则重新生成雪花的属性(半径、位置、速度、颜色等),使其重新出现在画布上方。

7. 创建雪花对象并开始动画

  • Snows = []:创建一个空列表Snows来存储所有雪花对象。
  • for i in range(595):循环595次,生成595个雪花对象,并将它们添加到Snows列表中。

8. 主动画循环

  • while True::开启一个无限循环,确保动画不断刷新。
  • tu.tracer(0):关闭动画的自动更新,允许在绘制过程中控制何时更新画布。
  • t.clear():清空画布上的内容,为下一帧的绘制做好准备。
  • t.penup():提起画笔,将其移动到初始位置。
  • t.goto(0, -255):将画笔移动到屏幕底部中心,为雪花绘制提供背景。
  • t.pendown():放下画笔开始绘制。
  • for i in range(199):循环199次,逐一移动并绘制每个雪花,Snows[i].move()移动雪花,Snows[i].snow()绘制雪花。
  • tu.update():更新画布,使得所有操作在屏幕上显示出来。

9. 程序终止

  • tu.mainloop():启动事件循环,使得窗口保持打开状态,直到手动关闭。

10. 总结

这段代码通过Turtle库和随机数生成技术,模拟了一个动态的雪花下落效果。使用了Snow类来表示每个雪花,控制其位置、速度、大小和颜色,并通过无限循环实现动画效果。每个雪花下落到画布底部后,会重新出现在画布上方,形成持续不断的雪花效果。

写在后面

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

你可能感兴趣的:(趣味编程,python,开发语言)