您的位置:首页 > 健康 > 养生 > 天元建设集团有限公司设计研究院赵纪峰联系方式_公司网站搜索优化_西青seo_竞价托管公司排名

天元建设集团有限公司设计研究院赵纪峰联系方式_公司网站搜索优化_西青seo_竞价托管公司排名

2024/12/23 12:51:46 来源:https://blog.csdn.net/m0_68111267/article/details/143247780  浏览:    关键词:天元建设集团有限公司设计研究院赵纪峰联系方式_公司网站搜索优化_西青seo_竞价托管公司排名
天元建设集团有限公司设计研究院赵纪峰联系方式_公司网站搜索优化_西青seo_竞价托管公司排名

金色流星雨

系列目录

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

文章目录

  • 系列目录
  • 环境需求
  • 完整代码
  • 代码分析
      • 1. 导入库和窗口设置
      • 2. 创建画笔对象
      • 3. 流星的颜色
      • 4. 定义流星类`Meteor`
      • 5. `meteor`方法:绘制流星
      • 6. `move`方法:流星的运动
      • 7. 创建流星对象列表
      • 8. 动画循环
      • 总结
  • 写在后面

环境需求

  • python3.11.4
  • PyCharm Community Edition 2023.2.5
  • pyinstaller6.2.0可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)

【注】

  • python环境搭建请见:https://want595.blog.csdn.net/article/details/134586653
  • pyinstaller使用教程见:https://want595.blog.csdn.net/article/details/134106807

完整代码

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(50, 100)    # 随机生成流星的半径self.k = random.uniform(2, 4)   # 随机生成角度参数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(5, 10)  # 重新设置流星的速度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库绘制流星,结合random库生成流星的随机参数,实现动态的流星雨效果。下面对代码进行详细分析。

1. 导入库和窗口设置

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

代码首先导入了turtle库用于绘制图形、random库用于生成随机数和参数,math库用于数学计算。接下来进行窗口的设置:

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

这里设置了窗口大小为全屏,背景颜色为黑色,且窗口标题为“流星雨动画”,营造夜空效果。

2. 创建画笔对象

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

Turtle类的实例t用于绘制流星。通过t.hideturtle()隐藏画笔,使绘制过程更流畅不受画笔形状影响。pensize(1)设置了画笔的粗细为1。

3. 流星的颜色

colors = ['gold', 'yellow', 'orange']  # 金色

定义了流星的颜色列表colors,包含了金色、黄色和橙色,以便后续随机选择,模拟流星燃烧时的颜色。

4. 定义流星类Meteor

class Meteor:def __init__(self):self.r = random.randint(50, 100)    # 随机生成流星的半径self.k = random.uniform(2, 4)   # 随机生成角度参数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)  # 随机选择流星的颜色

Meteor类用于定义每个流星的属性和行为。初始化方法__init__()随机生成每颗流星的初始参数:

  • r:流星的半径,控制其大小,范围为50到100。
  • k:角度参数,随机选取的角度用于流星轨迹的倾斜。
  • xy:流星的起始位置坐标,范围为屏幕的水平和垂直方向上适合的区间。
  • speed:流星的速度控制其下落和横向运动的速度,值为5到10之间。
  • color:随机选取流星颜色,使流星颜色丰富多样。

5. meteor方法:绘制流星

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()

该方法绘制每个流星的形状和轨迹:

  • penup()goto(self.x, self.y):移动到流星的位置。
  • pendown():开始绘制。
  • begin_fill()fillcolor(self.color):设置填充颜色和开启填充模式。
  • setheading(-30):设置流星朝向的角度,模拟流星在天空中的倾斜。
  • right(self.k)left(self.k):根据随机角度参数k进行左右旋转,增加轨迹的多样性。
  • forward(self.r):沿直线前进,使流星呈现一个尾巴效果。
  • circle():绘制半圆弧形。
  • end_fill():结束填充,形成完整流星形状。

6. move方法:流星的运动

def move(self):if self.y >= -500:self.y -= self.speed  # 将画笔向下移动self.x += 2 * self.speed  # 向右移动else:self.r = random.randint(50, 100)self.k = random.uniform(2, 4)self.x = random.randint(-2000, 1000)self.y = 500self.speed = random.randint(5, 10)self.color = random.choice(colors)

该方法更新流星的位置,形成连续下落的动态效果。条件判断if self.y >= -500控制流星的位置更新,避免流星超出屏幕范围。

  • self.y -= self.speedself.x += 2 * self.speed:分别使流星向下和向右移动,模拟流星运动。
  • 否则,表示流星已出界,将其属性随机重置,使其从屏幕顶部重新出现。

7. 创建流星对象列表

Meteors = []
for i in range(100):Meteors.append(Meteor())

通过循环创建100个流星对象并存储在列表Meteors中,以便在后续的动画循环中调用,形成流星雨效果。

8. 动画循环

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

动画的主要逻辑在while True循环中实现:

  • turtle.tracer(0):关闭追踪,减少动画刷新,提高效率。
  • t.clear():每次循环清空画布,避免重影。
  • 循环遍历Meteors列表,调用movemeteor方法分别更新和绘制每颗流星的位置。
  • turtle.update():刷新屏幕,显示最新的流星位置和形状。

总结

该代码通过Meteor类定义了流星的随机属性、绘制方式和运动逻辑,利用turtle的动画特性生成了流星雨效果。每颗流星都有独立的颜色、尺寸和轨迹,使流星雨动画生动,营造出动态的夜空氛围。

写在后面

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com