编程之美:Python让你领略浪漫星空下的流星雨奇观

简介: 这段代码使用 Python 的 `turtle` 库实现了一个流星雨动画。程序通过创建 `Meteor` 类来生成具有随机属性的流星,包括大小、颜色、位置和速度。在无限循环中,流星不断移动并重新绘制,营造出流星雨的效果。环境需求为 Python 3.11.4 和 PyCharm 2023.2.5。

流星雨

环境需求

  • python3.11.4
  • PyCharm Community Edition 2023.2.5

源码如下:

import turtle  # 导入turtle库,用于图形绘制
import random  # 导入random库,生成随机数
import math  # 导入math库,进行数学计算

turtle.setup(1.0, 1.0)  # 设置窗口大小为屏幕大小
turtle.title("流星雨动画")   # 设置窗口标题
turtle.bgcolor('black')  # 设置背景颜色为黑色

t = turtle.Turtle()  # 创建一个画笔对象
t.hideturtle()  # 隐藏画笔,不显示画布的形状
t.pensize(1)    # 设置画笔的大小

# 定义流星的颜色列表
colors = ['gold', 'yellow', 'orange']  # 金色


class Meteor:  # 定义流星类
    def __init__(self):  # 初始化方法,创建每颗流星时调用
        self.r = random.randint(20, 80)    # 随机生成流星的半径
        self.k = random.uniform(4, 6)   # 随机生成角度参数
        self.x = random.randint(-1000, 1000)  # 随机生成流星的x坐标
        self.y = random.randint(-500, 500)  # 随机生成流星的y坐标
        self.speed = random.randint(5, 10)  # 随机生成流星的移动速度
        self.color = random.choice(colors)  # 随机选择流星的颜色

    def meteor(self):  # 绘制流星的方法
        # 移动画笔到指定的坐标位置处
        t.penup()
        t.goto(self.x, self.y)
        t.pendown()
        # 设置流星的颜色
        t.begin_fill()
        t.fillcolor(self.color)
        # 开始绘制流星
        t.setheading(-30)  # 设置流星的朝向
        t.right(self.k)  # 根据随机角度右转
        t.forward(self.r)  # 沿直线前进一定长度
        t.left(self.k)  # 左转回到垂直方向
        t.circle(self.r * math.sin(math.radians(self.k)), 180)  # 绘制半圆弧
        t.left(self.k)  # 再次左转恢复角度
        t.forward(self.r)  # 沿直线前进相同长度以闭合流星形状
        t.end_fill()  # 结束填充

    def move(self):  # 更新流星位置的方法
        if self.y >= -500:  # 当流星的y坐标大于等于-500时
            self.y -= self.speed  # 减小流星y坐标的大小,将画笔向下移动
            self.x += 2 * self.speed  # 增加流星x坐标的大小,将画笔向右移动
        else:  # 当流星的y坐标小于-500时
            self.r = random.randint(50, 100)  # 重新设置流星的半径
            self.k = random.uniform(2, 4)  # 重新设置角度参数
            self.x = random.randint(-2000, 1000)  # 重新设置流星的x坐标
            self.y = 500  # 重新设置流星的y坐标
            self.speed = random.randint(2, 7)  # 重新设置流星的速度
            self.color = random.choice(colors)  # 重新设置流星的颜色


# 创建一个流星列表,用来存储流星实例
Meteors = []
for i in range(100):
    Meteors.append(Meteor())

# 进行无限循环,模拟流星雨动画
while True:
    turtle.tracer(0)  # 关闭tracer,提高性能
    t.clear()  # 清除画布内容
    for i in range(100):
        Meteors[i].move()  # 更新每颗流星的位置
        Meteors[i].meteor()  # 重新绘制每颗流星
    turtle.update()  # 更新屏幕显示内容

代码分析

这段代码实现了一个使用Python的turtle库来模拟流星雨动画的小程序。通过创建一个名为Meteor的类,该程序能够生成具有随机属性(如大小、颜色、位置和速度)的流星,并让它们在屏幕上移动,从而营造出流星雨的效果。下面是对代码主要部分的分析:

  1. 环境设置:首先设置了绘图窗口的背景为黑色,并调整了窗口大小以适应屏幕尺寸。此外还定义了画笔的基本属性,比如隐藏画笔形状、设定画笔宽度等。
  2. 流星类的设计
    • __init__() 方法初始化每个流星实例时,会随机分配给它不同的属性值,包括半径、角度参数、坐标位置、速度以及颜色。
    • meteor() 方法负责绘制单个流星。它先将画笔移动到指定位置,然后根据计算好的路径绘制出带有尾迹效果的流星形状。
    • move() 方法更新流星的位置。如果一颗流星完全移出了屏幕底部,则会重置其所有属性,使其从屏幕顶部重新开始下落。
  3. 动画循环:在无限循环中,不断清除旧的图像并调用每颗流星的move()meteor()方法来更新它们的位置及外观。通过关闭跟踪功能并批量处理后一次性更新显示内容,可以有效地提高渲染效率。

欢迎大家体验、试用阿里云百炼大模型和阿里云服务产品,链接如下:

阿里云百炼大模型

https://bailian.console.aliyun.com/

通义灵码_智能编码助手面向用户上线个人和企业版产品

https://tongyi.aliyun.com/lingma/pricing?userCode=jl9als0w

云工开物_阿里云高校计划助力高校科研与教育加速。

https://university.aliyun.com/mobile?userCode=jl9als0w

无影云电脑个人版简单易用、安全高效的云上桌面服务

https://www.aliyun.com/product/wuying/gws/personal_edition?userCode=jl9als0w

云服务器ECS省钱攻略五种权益,限时发放,不容错过

https://www.aliyun.com/daily-act/ecs/ecs_trial_benefits?userCode=jl9als0w

相关文章
|
13天前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
187 102
|
13天前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
187 104
|
13天前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
180 103
|
13天前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
126 82
|
13天前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的多面手
Python:现代编程的多面手
30 0
|
22天前
|
存储 人工智能 算法
Python实现简易成语接龙小游戏:从零开始的趣味编程实践
本项目将中国传统文化与编程思维相结合,通过Python实现成语接龙游戏,涵盖数据结构、算法设计与简单AI逻辑,帮助学习者在趣味实践中掌握编程技能。
83 0
|
2月前
|
安全 测试技术 数据处理
Python列表推导式进阶:从简洁代码到高效编程的10个核心技巧
列表推导式是Python中高效的数据处理工具,能将多行循环代码压缩为一行,提升代码可读性与执行效率。本文详解其基础语法、嵌套循环、条件表达式、函数融合、性能优化等进阶技巧,并结合实战案例与边界条件处理,帮助开发者写出更优雅、高效的Python代码。
116 0
|
2月前
|
机器学习/深度学习 人工智能 运维
Python:简洁高效的万能编程胶水
Python:简洁高效的万能编程胶水
|
4月前
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
227 33
|
3月前
|
数据采集 分布式计算 大数据
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
96 1

推荐镜像

更多