系列文章
写在前面
Python绘制满天繁星动画的完整代码。
技术需求
- Python Turtle 图形库:用于绘制图形并控制画笔在屏幕上的移动。Turtle 提供了简洁直观的接口,支持通过命令调整画笔的移动、颜色和速度等属性,非常适合编程学习及图形动画制作。
- 面向对象编程 (OOP):通过定义
Star
类,将星星的属性(如大小、位置和颜色)及其行为(如绘制和大小变化)封装于单一对象中,从而提升代码的模块化与可维护性。 - 随机数生成 (Random 库):利用
random.randint()
和random.choice()
函数生成随机的位置、颜色及其他参数,为动画增添了多样性和动态效果。 - 动态绘图与屏幕更新:借助
tu.tracer(0)
和tu.update()
方法控制绘图更新的时间点,有效优化性能,避免每次绘制时出现屏幕闪烁现象。 - 动画效果:通过
change()
方法不断调整星星的大小,实现动态视觉效果,模拟星空中星星逐渐放大及重新分布的场景。
完整代码
import turtle as tu
import random as ra
tu.setup(1.0,1.0) #设置画板大小(小数表示比例,整数表示大小)
tu.screensize(1.0,1.0) #设置屏幕大小
tu.bgcolor('black') #设置画布背景颜色
t=tu.Pen() #设置画笔
t.ht() #隐藏画笔
colors=['yellow'] #星星的颜色列表,可以设置自己喜欢的颜色噢
class Star(): #星星类
def __init__(self): #初始化
self.r=1 #星星的初始大小
self.x=ra.randint(-1000,1000) #星星在画布中的x坐标位置
self.y=ra.randint(-500,500) #星星在画布中的y坐标位置
self.c=ra.choice(colors) #在星星的颜色列表中随机选择一个颜色
……
代码分析
这段代码利用 Python 的 Turtle 图形库和 Random 库,生成了一个动态的星星效果。星星的大小不断变化,位置随机分布。以下是对代码各部分的详细分析,涵盖模块功能、代码结构、作用及优化空间。
1. 导入库
import turtle as tu
import random as ra
turtle
库是 Python 内置的图形绘图库,通过控制“画笔”在画布上绘制图形,常用于教学和图形编程。random
库提供生成随机数的函数,在此用于随机生成星星的位置、颜色和大小。
2. 设置画布和画笔
tu.setup(1.0, 1.0) # 设置画板大小(小数表示比例,整数表示大小)
tu.screensize(1.0, 1.0) # 设置屏幕显示区域大小
tu.bgcolor('black') # 设置画布背景颜色为黑色
tu.setup(1.0, 1.0)
:设置画布占据整个屏幕。tu.screensize(1.0, 1.0)
:设置屏幕显示区域与窗口大小一致。tu.bgcolor('black')
:设置黑色背景,使星星更加突出。
接下来设置画笔:
t = tu.Pen() # 创建画笔对象
t.ht() # 隐藏画笔形状
t = tu.Pen()
:创建并初始化画笔对象t
。t.ht()
:隐藏画笔,避免影响图形效果。
3. 星星的颜色
colors = ['yellow'] # 定义星星颜色列表
colors = ['yellow']
:定义一个仅包含黄色的颜色列表,可扩展更多颜色。
4. 星星类的定义
class Star: # 定义星星类
def __init__(self): # 初始化方法
self.r = 1 # 初始大小
self.x = ra.randint(-1000, 1000) # 随机 x 坐标
self.y = ra.randint(-500, 500) # 随机 y 坐标
self.c = ra.choice(colors) # 随机选择颜色
Star
类定义星星对象,属性包括大小 (r
)、位置 (x
,y
) 和颜色 (c
)。self.r = 1
:初始大小设为 1。self.x
和self.y
:随机坐标范围分别为 -1000 到 1000 和 -500 到 500。self.c
:从颜色列表中随机选择颜色。
5. 星星绘制函数
star(self)
方法绘制星星:t.pensize(1)
:设置画笔宽度。t.penup()
和t.pendown()
:控制画笔移动和绘制。t.goto(self.x, self.y)
:移动到星星位置。t.speed(0)
:设置最快绘制速度。t.color(self.c)
:设置画笔颜色。t.begin_fill()
和t.fillcolor(self.c)
:设置填充颜色。- 循环
for i in range(5)
绘制五角星。 t.end_fill()
:结束填充。
6. 星星大小变化函数
change(self)
方法动态调整星星大小:- 若
self.r <= 10
,则self.r += 0.4
增大星星。 - 若
self.r > 10
,重新随机位置、大小和颜色。
- 若
7. 星星列表的创建与绘制
- 创建
Stars
列表存储星星对象。 for i in range(200)
循环创建 200 个星星对象并加入列表。
8. 动态绘制星星
while True
无限循环更新星星:tu.tracer(0)
:关闭自动更新,减少延迟。t.clear()
:清空画布。for i in range(100)
循环绘制前 100 个星星,并调用Stars[i].change()
更新大小。tu.update()
:手动更新画布。
9. 启动事件循环
tu.mainloop()
启动事件循环,保持窗口打开,等待用户交互。
写在后面
我是一只有趣的兔子,感谢你的喜欢!