Python满天星

满天星

系列文章

写在前面

Python绘制满天繁星动画的完整代码。

技术需求

  1. Python Turtle 图形库:用于绘制图形并控制画笔在屏幕上的移动。Turtle 提供了简洁直观的接口,支持通过命令调整画笔的移动、颜色和速度等属性,非常适合编程学习及图形动画制作。
  2. 面向对象编程 (OOP):通过定义 Star 类,将星星的属性(如大小、位置和颜色)及其行为(如绘制和大小变化)封装于单一对象中,从而提升代码的模块化与可维护性。
  3. 随机数生成 (Random 库):利用 random.randint()random.choice() 函数生成随机的位置、颜色及其他参数,为动画增添了多样性和动态效果。
  4. 动态绘图与屏幕更新:借助 tu.tracer(0)tu.update() 方法控制绘图更新的时间点,有效优化性能,避免每次绘制时出现屏幕闪烁现象。
  5. 动画效果:通过 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.xself.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() 启动事件循环,保持窗口打开,等待用户交互。

写在后面

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Want595

感谢小伙伴的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值