系列目录
序号 | 直达链接 |
爱心系列 | |
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萌萌的蜡笔小新 |
21 | Python罗小黑 |
22 | Python猪猪侠 |
炫酷系列 | |
1 | Python张万森下雪了 |
2 | Python一闪一闪亮晶晶 |
3 | Python黑客帝国代码雨 |
4 | Python七彩花朵 |
5 | Python模拟3D星空 |
6 | Python金榜题名 |
7 | Python满天星 |
文章目录
- 系列目录
- 环境需求
- 完整代码
- 代码分析
- 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
:角度参数,随机选取的角度用于流星轨迹的倾斜。x
、y
:流星的起始位置坐标,范围为屏幕的水平和垂直方向上适合的区间。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.speed
和self.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
列表,调用move
和meteor
方法分别更新和绘制每颗流星的位置。 turtle.update()
:刷新屏幕,显示最新的流星位置和形状。
总结
该代码通过Meteor
类定义了流星的随机属性、绘制方式和运动逻辑,利用turtle
的动画特性生成了流星雨效果。每颗流星都有独立的颜色、尺寸和轨迹,使流星雨动画生动,营造出动态的夜空氛围。
写在后面
我是一只有趣的兔子,感谢你的喜欢!