当前位置:首页>python>小学生Python进阶:turtle第11课·多角色动画

小学生Python进阶:turtle第11课·多角色动画

  • 2026-10-11 08:16:28
小学生Python进阶:turtle第11课·多角色动画

上节课学了鼠标画笔。这节课进阶:让多个角色同时动起来!就像游戏里的多个小人物同时跑动一样。

一、创建多个Turtle对象

每调用一次 turtle.Turtle(),就创建一个独立的角色,各自有自己的位置、颜色、方向!

import turtle

screen = turtle.Screen()
screen.setup(700, 500)

# 创建三个独立的角色
t1 = turtle.Turtle()
t1.color("red")
t1.shape("turtle")
t1.penup()
t1.goto(-200, 0)
t1.pendown()

t2 = turtle.Turtle()
t2.color("blue")
t2.shape("turtle")
t2.penup()
t2.goto(0, 0)
t2.pendown()

t3 = turtle.Turtle()
t3.color("green")
t3.shape("turtle")
t3.penup()
t3.goto(200, 0)
t3.pendown()

# 三个角色各画一个正方形
for _ in range(4):
    t1.forward(80)
    t1.right(90)
    t2.forward(80)
    t2.right(90)
    t3.forward(80)
    t3.right(90)

screen.exitonclick()

三个角色同时画正方形!每个都有自己的轨迹。

二、tracer(0) + update():流畅动画的秘密

默认情况下,每步都会刷新屏幕,多个角色同时动会卡顿。用 tracer(0) 关闭自动刷新,手动调用 update() 一次性刷新,动画就丝滑了!

import turtle, time

screen = turtle.Screen()
screen.setup(700, 500)
screen.tracer(0)          # 关闭自动刷新

t1 = turtle.Turtle()
t1.color("red")
t1.shape("turtle")
t1.penup()
t1.goto(-200, 0)
t1.pendown()

t2 = turtle.Turtle()
t2.color("blue")
t2.shape("turtle")
t2.penup()
t2.goto(0, 0)
t2.pendown()

# 动画循环:两个角色同时转圈
for _ in range(360):
    t1.forward(1)
    t1.right(1)
    t2.forward(1)
    t2.left(1)
    screen.update()       # 每循环刷新一次屏幕
    time.sleep(0.01)      # 控制速度

screen.exitonclick()

tracer(0) + update() 是多角色动画的标配组合!

三、实战:小行星追逐游戏 ⭐

import turtle, time, random

screen = turtle.Screen()
screen.setup(700, 500)
screen.bgcolor("black")
screen.tracer(0)

# 创建5个小行星
stars = []
colors = ["red", "orange", "yellow", "cyan", "magenta"]
for i in range(5):
    t = turtle.Turtle()
    t.shape("circle")
    t.color(colors[i])
    t.penup()
    t.goto(random.randint(-300, 300), random.randint(-200, 200))
    t.pendown()
    t.speed(0)
    stars.append(t)

# 动画循环:每个行星随机运动
for _ in range(200):
    for s in stars:
        angle = random.randint(-30, 30)
        s.right(angle)
        s.forward(random.randint(5, 15))
    screen.update()
    time.sleep(0.05)

screen.exitonclick()

四、实战:多角色赛跑 ️

import turtle, time, random

screen = turtle.Screen()
screen.setup(700, 400)
screen.bgcolor("#1a1a2e")
screen.tracer(0)

colors = ["red", "orange", "yellow", "green", "cyan"]
racers = []

# 创建5只赛跑的海龟
for i in range(5):
    t = turtle.Turtle()
    t.shape("turtle")
    t.color(colors[i])
    t.penup()
    t.goto(-300, 150 - i * 60)   # 各自起始位置
    t.pendown()
    racers.append(t)

# 画终点线
finish = turtle.Turtle()
finish.hideturtle()
finish.penup()
finish.goto(280, 180)
finish.pendown()
finish.pencolor("white")
finish.pensize(3)
finish.goto(280, -120)

# 开始比赛
winner = None
while winner is None:
    for t in racers:
        t.forward(random.randint(1, 10))
        if t.xcor() >= 280:
            winner = t
            break
    screen.update()
    time.sleep(0.02)

# 显示胜利者
msg = turtle.Turtle()
msg.hideturtle()
msg.penup()
msg.goto(0, 0)
msg.color(winner.pencolor())
msg.write(f"冠军:{winner.pencolor()}", align="center",
          font=("Arial", 24, "bold"))

screen.exitonclick()

五、实战:地球绕太阳转

import turtle, time, math

screen = turtle.Screen()
screen.setup(700, 500)
screen.bgcolor("black")
screen.tracer(0)

# 太阳
sun = turtle.Turtle()
sun.shape("circle")
sun.color("yellow")
sun.shapesize(3)
sun.penup()

# 地球
earth = turtle.Turtle()
earth.shape("circle")
earth.color("deepskyblue")
earth.shapesize(1.5)
earth.penup()

# 月亮
moon = turtle.Turtle()
moon.shape("circle")
moon.color("lightgray")
moon.shapesize(0.8)
moon.penup()

angle = 0
while True:
    # 地球绕太阳转
    ex = 200 * math.cos(math.radians(angle))
    ey = 100 * math.sin(math.radians(angle))
    earth.goto(ex, ey)

    # 月亮绕地球转(速度是地球的4倍)
    mx = ex + 40 * math.cos(math.radians(angle * 4))
    my = ey + 20 * math.sin(math.radians(angle * 4))
    moon.goto(mx, my)

    screen.update()
    time.sleep(0.02)
    angle += 1
    if angle >= 360:
        angle = 0

三个对象同时运动,地球绕太阳转,月亮绕地球转!

六、小技巧总结

# 多角色动画三大要素:
# 1. 多个 Turtle() 对象 —— 每个独立控制
# 2. screen.tracer(0) —— 关闭自动刷新,防屏闪
# 3. screen.update() —— 手动刷新,控制帧率

# 常用模式:
screen.tracer(0)
while True:
    # 更新所有角色位置
    screen.update()
    time.sleep(0.02)   # 大约50fps

七、小挑战

  • 简单:创建3只不同颜色的海龟,让它们各自画一个圆
  • 中等:在赛跑游戏里加一个计数器,显示每只海龟跑了多少步
  • 困难:实现太阳系,加入火星和木星,让它们也绕太阳转

八、下期预告

turtle系列即将收尾!下节课我们做一个综合小项目:用学过的所有知识,做一个完整的小游戏或动画场景!

下期:《turtleturtle第12课:综合小项目》

有问题欢迎留言!

最新文章

随机文章