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绘制七彩花朵动画的完整代码。
技术需求
-
Turtle 图形库:
- 利用
turtle
模块实现图形绘制与动画控制。作为 Python 的标准图形化编程库,turtle
提供了直观的绘图功能。 - 通过
Pen
类创建画笔对象,灵活调整其位置、颜色、方向和路径,以绘制花朵及其动态效果。
- 利用
-
随机数生成:
- 借助
random
模块生成随机数,使花朵的位置、颜色、大小及运动速度等属性随机化,提升动画的多样性和趣味性。 random.randint()
和random.uniform()
分别用于生成整数和浮点数,确保花朵属性的随机分配。
- 借助
-
数学函数:
- 运用
math
模块中的sin()
函数,模拟花朵的左右摆动。借助正弦波,实现花朵在水平方向上的周期性运动,营造自然漂浮的效果。
- 运用
-
面向对象编程(OOP):
- 定义
Flower
类,每朵花均为该类的实例。此类包含花朵的属性(如位置、颜色、大小)和方法(如移动、绘制),赋予每个花朵独立的行为和状态。
- 定义
-
动画与画面更新:
- 使用
tu.tracer(0)
和tu.update()
调节动画更新频率,消除画面闪烁,确保动画流畅。 - 在每次画面更新前调用
t.clear()
清除先前内容,实现动态变化效果。
- 使用
-
无限循环与事件驱动:
- 采用
while True
实现无限循环,持续更新和绘制花朵,保证动画连续运行。 tu.mainloop()
启动主事件循环,维持图形窗口开启状态,直至用户关闭窗口。
- 采用
完整代码
import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['red','skyblue','orange','yellow','lime','pink','violet']
class Flower(): #每个花朵(花朵类)def __init__(self):self.r = ra.randint(8,12) #花朵的半径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 = 1 #花朵的外框大小(可不要)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 = ra.randint(8,12)self.x = ra.randint(-1000,1000)self.y = 500self.f = ra.uniform(-3.14,3.14)self.speed = ra.randint(5,10)self.color = ra.choice(colors)self.outline = 1
……
代码分析
这段代码利用 Python 的 Turtle 图形库和随机模块,通过定义一个花朵类来模拟屏幕上随机漂浮的花朵。核心在于主循环中随机生成花朵的位置、颜色、大小及运动方式,使花朵呈现出自由飘动的效果。以下是代码的详细分析。
1. 模块导入与初始设置
import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['red', 'skyblue', 'orange', 'yellow', 'lime', 'pink', 'violet']
turtle
模块用于图形绘制和动画,此处别名为tu
。random
模块生成随机数,支持花朵的随机生成与运动。math
模块提供数学函数,如正弦函数 (math.sin
) 控制花朵的左右移动。tu.setup(1.0, 1.0)
设置画布为全屏模式。t = tu.Pen()
创建 Pen 对象用于绘图,t.ht()
隐藏画笔箭头。colors
列表存储花朵可能的颜色,供随机选择。
2. 花朵类(Flower)
花朵类是动画的核心,描述每朵花的属性和行为。
2.1 构造方法(__init__
)
class Flower:def __init__(self):self.r = ra.randint(8, 12) # 花朵半径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 = 1 # 外框大小
self.r
设定花朵半径,范围 8 至 12。self.x
和self.y
分别设定横纵坐标,范围分别为 -1000 至 1000 和 -500 至 500。self.f
决定左右摇动程度,范围 -π 至 π。self.speed
设定移动速度,范围 5 至 10。self.color
随机选择颜色。self.outline
固定外框大小为 1。
2.2 移动方法(move
)
该方法更新花朵坐标,通过正弦函数实现水平波动运动。
self.y -= self.speed
实现向下移动。self.x += self.speed * math.sin(self.f)
通过正弦函数实现周期性左右摆动。self.f += 0.1
更新方向,改变摆动周期。- 若
self.y < -500
,表示花朵移出画布,重新生成并重置纵坐标为 500。
2.3 绘制方法(draw
)
控制是否绘制路径,移动到初始位置,设置方向和颜色,填充形状,绘制花瓣。
t.penup()
和t.pendown()
控制绘制路径。t.goto(self.x, self.y)
移动至初始位置。t.setheading(self.x)
设置方向。t.color(self.color)
设置颜色。t.begin_fill()
和t.end_fill()
填充形状。for i in range(5):
循环绘制花瓣,使用t.circle(self.r, extent=144)
绘制圆弧形花瓣,形成花朵整体形态。
3. 主程序
Flowers
列表存储所有花朵对象。for i in range(100):
循环创建 100 个花朵对象。tu.bgcolor('black')
设置背景色为黑色,突出花朵颜色。
4. 动画循环
tu.tracer(0)
禁用自动更新,避免闪烁,提高效率。t.clear()
清除旧图形。for i in range(50):
控制每帧 50 朵花的移动和绘制。Flowers[i].move()
和Flowers[i].draw()
分别移动和绘制花朵。tu.update()
更新画面显示花朵。
5. 事件循环
tu.mainloop()
启动主事件循环,持续显示窗口并响应输入。
6. 总结
此代码通过随机生成、运动和绘制花朵,实现了动态漂浮效果。每次运行时花朵表现不同,结合 turtle
库和 random
模块,展示了 Python 在图形和动画编程中的能力。
写在后面
我是一只有趣的兔子,感谢你的喜欢!