当前位置:首页>python>小学生Python进阶:turtle第9课·键盘控制海龟

小学生Python进阶:turtle第9课·键盘控制海龟

  • 2026-10-11 08:20:49
小学生Python进阶:turtle第9课·键盘控制海龟

上节课我们用循环让海龟自己画图。这节课反过来——用键盘控制海龟,想让它去哪就去哪,像玩游戏一样!

一、顺序执行 vs 事件驱动

之前的代码都是顺序执行:从上到下,代码跑完程序就结束了。

键盘控制用的是事件驱动:程序启动后不停"监听"按键,有按键才动,没按键就等着。

# 事件驱动模型:
screen.onkey(函数名, 'Up')   # 把"按Up键"绑定到一个函数
screen.listen()               # 开始监听键盘!
screen.exitonclick()          # 点击窗口才退出
# 程序停在这里,等你按键盘...

二、实战:方向键控制海龟 🚀

import turtle

screen = turtle.Screen()
t = turtle.Turtle()
t.speed(3)
t.shape("turtle")              # 换成小海龟形状
t.pencolor("green")

def go_forward():
    t.forward(20)

def go_back():
    t.backward(20)

def turn_left():
    t.left(30)

def turn_right():
    t.right(30)

# 绑定方向键
screen.onkey(go_forward, 'Up')
screen.onkey(go_back, 'Down')
screen.onkey(turn_left, 'Left')
screen.onkey(turn_right, 'Right')

screen.listen()                 # 开始监听键盘
screen.exitonclick()            # 点击窗口退出

# 按住方向键不放,海龟一直跑!

三、实战:画画程序(完整版) 🎨

import turtle

screen = turtle.Screen()
screen.setup(800, 600)
t = turtle.Turtle()
t.speed(5)
t.pensize(3)
is_drawing = True

colors = ["red", "green", "blue", "gold", "purple", "orange"]
color_index = 0

def move_forward():
    t.forward(15)

def move_back():
    t.backward(15)

def turn_left():
    t.left(30)

def turn_right():
    t.right(30)

def toggle_pen():
    global is_drawing
    if is_drawing:
        t.penup()
        is_drawing = False
    else:
        t.pendown()
        is_drawing = True

def clear_screen():
    t.clear()

def next_color():
    global color_index
    color_index = (color_index + 1) % len(colors)
    t.pencolor(colors[color_index])

# 绑定所有按键
screen.onkey(move_forward, 'Up')
screen.onkey(move_back, 'Down')
screen.onkey(turn_left, 'Left')
screen.onkey(turn_right, 'Right')
screen.onkey(toggle_pen, 'space')    # 空格:提笔/落笔
screen.onkey(clear_screen, 'c')       # C:清空屏幕
screen.onkey(next_color, 'f')         # F:换颜色

screen.listen()
screen.exitonclick()

按键说明:

按键功能
↑ ↓ ← →前进 / 后退 / 左转 / 右转
空格(space)提笔 / 落笔切换(拿笔 / 放笔)
C清空画布,重新画
F换下一个颜色

四、实战:龟龟赛跑 🐢🏁

import turtle, random

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

# 5只龟龟并排站在起点
turtles = []
for i in range(5):
    t = turtle.Turtle()
    t.penup()
    t.shape("turtle")
    t.goto(-150, 100 - i * 50)
    t.pendown()
    turtles.append(t)

# 每按一次空格,所有龟龟随机移动
def step_forward():
    for t in turtles:
        t.forward(random.randint(10, 40))
    # 检测谁先到终点
    for t in turtles:
        if t.xcor() > 300:
            print("🏆 获胜!")
            return

screen.onkey(step_forward, 'space')
screen.listen()

print("按空格键让龟龟跑起来!先到红线赢!")

按空格键一次,所有龟龟跑一段距离,比比谁先到终点!🎲

五、onkey 和 listen 详解

# screen.onkey 的规律:
screen.onkey(函数名, 'Up')       # 函数名不要加括号!
screen.onkey(函数名, 'Down')
screen.onkey(函数名, 'Left')
screen.onkey(函数名, 'Right')
screen.onkey(函数名, 'space')   # 空格键
screen.onkey(函数名, 'Return')  # 回车键
screen.onkey(函数名, 'a')       # 字母键

screen.listen()                  # 这句必须写!开始监听
screen.exitonclick()              # 点击鼠标退出程序

⚠️ 注意:绑定的函数不要加括号(),写成 screen.onkey(go, 'Up') 而不是 screen.onkey(go(), 'Up')

六、小挑战

  • 🟢 简单:在画画程序里加一个 "画正方形" 按钮(按Q键画正方形)
  • 🟡 中等:把龟龟赛跑改成"猜拳游戏"——按空格随机出拳
  • 🔴 困难:做一个"贪食蛇"——方向键控制蛇移动,碰到边界游戏结束

七、下期预告

键盘控制已掌握!下节课学习鼠标控制——用鼠标点击画图,想画哪点哪!

下期:《turtle第10课:鼠标画笔》

有问题欢迎留言!

最新文章

随机文章