当前位置: 首页 > news >正文

Python七彩花朵

七彩花朵

系列文章

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

写在前面

Python绘制七彩花朵动画的完整代码。

技术需求

  1. Turtle 图形库

    • 利用 turtle 模块实现图形绘制与动画控制。作为 Python 的标准图形化编程库,turtle 提供了直观的绘图功能。
    • 通过 Pen 类创建画笔对象,灵活调整其位置、颜色、方向和路径,以绘制花朵及其动态效果。
  2. 随机数生成

    • 借助 random 模块生成随机数,使花朵的位置、颜色、大小及运动速度等属性随机化,提升动画的多样性和趣味性。
    • random.randint()random.uniform() 分别用于生成整数和浮点数,确保花朵属性的随机分配。
  3. 数学函数

    • 运用 math 模块中的 sin() 函数,模拟花朵的左右摆动。借助正弦波,实现花朵在水平方向上的周期性运动,营造自然漂浮的效果。
  4. 面向对象编程(OOP)

    • 定义 Flower 类,每朵花均为该类的实例。此类包含花朵的属性(如位置、颜色、大小)和方法(如移动、绘制),赋予每个花朵独立的行为和状态。
  5. 动画与画面更新

    • 使用 tu.tracer(0)tu.update() 调节动画更新频率,消除画面闪烁,确保动画流畅。
    • 在每次画面更新前调用 t.clear() 清除先前内容,实现动态变化效果。
  6. 无限循环与事件驱动

    • 采用 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.xself.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 在图形和动画编程中的能力。

写在后面

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

http://www.dtcms.com/a/273588.html

相关文章:

  • 【实时Linux实战系列】实时系统测试与合规认证指南
  • 二刷 黑马点评 商户查询缓存
  • <script>标签对HTML文件解析过程的影响以及async和defer属性的应用
  • 在 React Three Fiber 中实现 3D 模型点击扩散波效果
  • 车企战略投资项目管理的实践与思考︱中国第一汽车集团进出口有限公司战略部投资管理专家庞博
  • 台球 PCOL:极致物理还原的网页斯诺克引擎(附源码深度解析)
  • 软件设计师中级逻辑公式题
  • Ubuntu 24.04上安装 Intelligent Pinyin 中文输入法
  • Java算法 -蓝桥云课 -卖货
  • 【联合国国家指标 2025:HDI、GDP、POP、面积】数据集countries_metric - Sheet1.csv
  • C++迭代器失效
  • 深入剖析Spring Bean生命周期:从诞生到消亡的全过程
  • 羲和:一款诗词风格的摆件App
  • GitHub Copilot:产品经理提升工作效率的AI助手
  • 销售数据可视化分析项目
  • AI基建还能投多久?高盛:2-3年不是问题,回报窗口才刚开启
  • Lookahead:Trie 树(前缀树)
  • TCP详解——流量控制、滑动窗口
  • 【接口测试】07 Fiddler使用教程(图文详解)
  • Flutter、Vue 3 和 React 在 UI 布局比较
  • 20.缓存问题与解决方案详解教程
  • 【Java】【力扣】102.二叉树层序遍历
  • 前端抓包(不启动前端项目就能进行后端调试)--whistle
  • 什么是DOM存储
  • 05 rk3568 debian11 root用户 声音服务PulseAudio不正常
  • Typecho架构深度剖析:轻量级博客系统的设计哲学与实现原理
  • 前端性能与可靠性工程:我们度量什么?核心 Web 指标与工具入门
  • 【氮化镓】不同偏压应力下电荷俘获效应导致的P-GaN HEMT阈值电压不稳定性
  • Chromium 136 编译指南 - Android 篇:从Linux版切换到Android版(六)
  • 电子基石:硬件工程师的器件手册 (四) - 二极管:电流的单向阀与电路的守护神