当前位置:首页>python>小学生Python进阶:turtle第8课·让海龟动起来

小学生Python进阶:turtle第8课·让海龟动起来

  • 2026-10-11 08:27:22
小学生Python进阶:turtle第8课·让海龟动起来

前面几节课画的都是静态图案。这节课开始,我们让海龟动起来!弹跳球、逐步画房子、增长圆——用代码"演动画"!

一、动画的原理:逐帧播放

动画其实是很多张"静态图片"快速切换。我们的眼睛以为画面在动。

# turtle 动画三步曲:
t.tracer(0)     # 第1步:关闭自动刷新(加快速度)
while True:
    画一帧内容   # 第2步:画这一帧
    t.update()   # 第3步:刷新屏幕,显示这一帧

把这3步放在一个循环里,海龟就会动起来!

二、实战:弹跳小球 🏀

import turtle

t = turtle.Turtle()
t.penup()
t.hideturtle()
t.tracer(0)              # 关闭自动刷新

ball_x, ball_y = 200, 100
dx, dy = 3, 2
RADIUS = 15

while True:
    # 更新位置(先算好,再画)
    ball_x += dx
    ball_y += dy

    # 清除上一帧,画这一帧
    t.clear()
    t.pencolor("red")
    t.fillcolor("orange")
    t.begin_fill()
    t.penup()
    t.goto(ball_x, ball_y)
    t.pendown()
    t.circle(RADIUS)
    t.end_fill()

    # 碰到边界就反弹(默认屏幕 800x600,x:±400, y:±300)
    if ball_x > 385 or ball_x < -385:
        dx = -dx
    if ball_y > 285 or ball_y < -285:
        dy = -dy

    t.update()            # 显示这一帧

turtle.mainloop()

三、实战:逐步画房子 🏠

import turtle

t = turtle.Turtle()
t.tracer(0)              # 加速画图
t.pensize(2)

frame = 0

# === 逐步画外墙 ===
for x in range(0, 151, 3):
    t.clear()
    t.color("navajowhite", "wheat")
    t.begin_fill()
    t.goto(x, 0)
    t.goto(x, 100)
    t.goto(0, 100)
    t.goto(0, 0)
    t.end_fill()
    frame += 1
    if frame >= 50:
        break
    t.update()

# === 逐步画屋顶 ===
for i in range(51):
    t.clear()
    t.color("firebrick", "tomato")
    t.begin_fill()
    t.goto(75, 160)    # 尖顶
    t.goto(i, 100)     # 逐渐变宽
    t.goto(150 - i, 100)
    t.end_fill()
    frame += 1
    if frame >= 100:
        break
    t.update()

# === 画门 ===
t.clear()
t.color("saddlebrown", "chocolate")
t.begin_fill()
t.goto(80, 0)
t.goto(80, 70)
t.goto(120, 70)
t.goto(120, 0)
t.end_fill()

# === 画两扇窗户 ===
for wx in [25, 115]:
    t.color("steelblue", "lightskyblue")
    t.begin_fill()
    t.goto(wx, 50)
    t.goto(wx, 80)
    t.goto(wx + 25, 80)
    t.goto(wx + 25, 50)
    t.end_fill()

t.update()
turtle.mainloop()

看着房子一点一点建起来,是不是很有成就感!🏗️

四、实战:不断增长的圆 📈

import turtle

t = turtle.Turtle()
t.penup()
t.hideturtle()
t.tracer(0)
t.pencolor("royalblue")
t.pensize(3)

for r in range(5, 200, 2):   # 半径从5增长到200
    t.clear()
    t.circle(r)
    t.update()

turtle.mainloop()

循环结束后,小圆变大圆,渐进动画效果!📈

五、tracer() 参数说明

命令效果
t.tracer(0)关闭自动刷新,最快速度(动画用)
t.tracer(1)每帧刷新一次(正常速度)
t.tracer(n)每 n 帧刷新一次(数字越大越慢)
t.update()手动刷新屏幕(配合 tracer(0) 使用)

六、小挑战

  • 🟢 简单:让弹跳球的颜色随位置变化(x越大越红,y越大越蓝)
  • 🟡 中等:画3个不同颜色的小球同时弹跳
  • 🔴 困难:画一个弹跳的彩色星星(用第6课的星星代码)

七、下期预告

动画基础已掌握!下节课学习按键交互——用键盘控制海龟移动,像玩游戏一样!

下期:《turtle第9课:键盘控制海龟》

有问题欢迎留言!

最新文章

随机文章