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 在图形和动画编程中的能力。
写在后面
我是一只有趣的兔子,感谢你的喜欢!
