Python流星雨


文章目录

  • 系列文章
  • 写在前面
  • 技术需求
  • 完整代码
  • 代码分析
    • 1. 模块导入
    • 2. 画布设置
    • 3. 画笔设置
    • 4. 颜色列表
    • 5. 流星类 (Star)
    • 6. 流星对象创建
    • 7. 主循环
    • 8. 流星运动逻辑
    • 9. 视觉效果
    • 10. 总结
  • 写在后面

系列文章

序号 直达链接
表白系列
1 Python制作一个无法拒绝的表白界面
2 Python满屏飘字表白代码
3 Python无限弹窗满屏表白代码
4 Python李峋同款可写字版跳动的爱心
5 Python流星雨代码
6 Python漂浮爱心代码
7 Python爱心光波代码
8 Python普通的玫瑰花代码
9 Python炫酷的玫瑰花代码
10 Python多彩的玫瑰花代码
节日系列
1 Python动漫风烟花秀代码
2 Python新年烟花秀代码
3 Python圣诞礼物代码
4 Python画圣诞树代码
5 Python可爱版圣诞树丨绿色
6 Python可爱版圣诞树丨粉色
7 Python大雪纷飞代码
8 Python生日蛋糕代码
9 Python五彩气球代码
10 Python国庆祝福代码
11 Python万圣礼物代码
12 Python愚人节礼物代码
13 Python浪漫星空代码
14 Python樱花树代码
动漫系列
1 Python名侦探柯南
2 Python喜羊羊
3 Python懒羊羊
4 Python灰太狼
5 Python小灰灰
6 Python小香香
7 Python沸羊羊
8 Python海绵宝宝
9 Python哆啦A梦
10 Python凯蒂猫
11 Python汤姆与杰瑞
12 Python草莓熊
13 Python迷你皮卡丘
14 Python高级皮卡丘
15 Python豪华皮卡丘
16 Python史迪仔
17 Python小熊猫
18 Python蜘蛛侠
19 Python可爱版蜡笔小新
20 Python萌萌的蜡笔小新
炫酷系列
1   Python张万森下雪了
2 Python一闪一闪亮晶晶
3 Python黑客帝国代码雨
4 Python七彩花朵
5 Python模拟3D星空
6 Python金榜题名
7 Python满天星

写在前面

Python实现蓝色炫酷流星雨动画的完整代码。

技术需求

  1. Python 编程语言:本项目采用 Python 编写,充分利用其简洁的语法和强大的库支持,实现图形绘制与动画模拟。

  2. Turtle 库turtle 是 Python 内置的图形绘制库,广泛应用于教学与动画制作。在此代码中,它负责流星的绘制及动画更新控制,提供屏幕绘图、画笔移动、颜色设置与填充等功能。

  3. 面向对象编程 (OOP):通过定义 Star 类,代码体现了 OOP 的核心理念。每个流星作为独立对象,拥有位置、大小、颜色、速度等属性,并具备绘制与移动等方法,从而提升代码的模块化与可扩展性。

  4. 随机数生成:借助 random 库生成流星的位置、颜色、速度等随机属性,确保每颗流星的独特性,进而构建出多姿多彩的流星雨效果。

  5. 数学运算:运用 math 库中的 sinradians 函数,代码实现了流星尾巴的弯曲效果,增强了视觉上的真实感。

  6. 动画与帧更新:利用 turtle 库的 tracer(0)update() 方法,代码有效控制了动画帧的更新,使流星运动更加流畅。其中,tracer(0) 禁用自动更新,而 update() 在每帧绘制完毕后手动刷新画面。

  7. 无限循环:通过 while True 循环确保程序持续运行,不断更新流星动画,直至程序终止。

完整代码

import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
tu.screensize(1.0, 1.0)    #设置画布大小
tu.bgcolor('black')  #设置画布颜色
t = tu.Pen()
t.ht()               #隐藏画笔
colors = ['skyblue','white','cyan','aqua']   #流星的颜色列表
class Star():    #流星类
    def __init__(self):
        self.r = ra.randint(50,100)
        self.t = ra.randint(1,3)
        self.x = ra.randint(-1500,1000)   #流星的横坐标
        self.y = ra.randint(0,500)     #流星的纵坐标
        self.speed = ra.randint(10,15)     #流星移动速度
        self.color = ra.choice(colors)    #流星的颜色
        self.outline = 1                 #流星的大小
……

代码分析

1. 模块导入

  • turtle 模块:用于绘制图形,模拟流星效果。
  • random 模块:用于生成随机数,如流星的随机位置、速度和颜色等。
  • math 模块:用于数学计算,例如将角度转换为弧度,以绘制流星轨迹的圆弧。

2. 画布设置

  • tu.setup(1.0, 1.0)tu.screensize(1.0, 1.0)
    • 设置画布大小为全屏。
  • tu.bgcolor('black')
    • 设置画布背景为黑色,模拟夜空环境。

3. 画笔设置

  • t = tu.Pen()
    • 创建一个画笔对象,用于绘制流星。
  • t.ht()
    • 隐藏画笔箭头,仅显示绘制的轨迹。

4. 颜色列表

  • colors = ['skyblue', 'white', 'cyan', 'aqua']
    • 定义流星可能使用的颜色列表,模拟不同颜色的流星效果。

5. 流星类 (Star)

  • 定义一个 Star 类,表示每颗流星的属性和行为。

属性

  • self.r
    • 流星的大小,影响轨迹长度和圆弧半径。
  • self.t
    • 流星轨迹的偏转角度,用于绘制弯曲部分。
  • self.xself.y
    • 流星的初始位置,随机生成。
  • self.speed
    • 流星移动的速度,随机生成。
  • self.color
    • 流星的颜色,从 colors 列表中随机选择。
  • self.outline
    • 流星画笔的粗细,固定为 1。

方法

  • star()
    • 绘制流星,通过设置画笔位置、颜色和方向,绘制带有弯曲的流星轨迹。
    • 使用 t.circle() 方法绘制弯曲部分,模拟流星划过夜空的效果。
  • move()
    • 更新流星的位置,使其以一定速度向斜下方移动。
    • 如果流星移出画布(self.y < -500),则重置其属性(位置、大小、速度、颜色等),模拟新流星的出现。

6. 流星对象创建

  • Stars = []
    • 创建一个空列表,存储所有流星对象。
  • for i in range(100)
    • 循环创建 100 个 Star 对象,并将其添加到 Stars 列表中。

7. 主循环

  • while True
    • 无限循环,持续绘制和更新流星效果。
  • tu.tracer(0)
    • 关闭自动刷新,手动控制刷新频率,提高绘制效率。
  • t.clear()
    • 清除上一帧的绘制内容,避免重影。
  • for i in range(100)
    • 遍历所有流星对象,调用它们的 move()star() 方法,更新位置并绘制流星。
  • tu.update()
    • 手动刷新画布,显示最新一帧的绘制内容。

8. 流星运动逻辑

  • 每颗流星的初始位置、颜色、大小和速度均为随机。
  • 每帧调用 move() 方法,流星以固定速度向斜下方移动。
  • 如果流星移出画布,则重置其所有属性,模拟新的流星出现。

9. 视觉效果

  • 流星以不同颜色、大小和速度划过黑色背景,形成动态流星雨效果。
  • 每颗流星的轨迹带有弯曲,模拟真实流星划过夜空的视觉效果。
  • 流星移出画布后重新生成,保持画面中始终有 100 颗流星。

10. 总结

这段代码通过 turtle 模块实现了一个动态的流星雨效果。每颗流星由 Star 类表示,具有随机属性(位置、速度、颜色等)和行为(移动、绘制)。主循环不断更新流星的位置并重绘,形成连续的流星雨动画。

写在后面

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

你可能感兴趣的:(Python流星雨)