Python 挑战版 · Day 7

键盘控制:让程序回应输入

从“代码画完就结束”进入交互程序:按键触发函数,函数改变角色坐标。

节奏分配(45 分钟)

01

复习判断

边界限制就是 if:还没到边界,才允许继续移动。

02

创建玩家角色

让 turtle 变成玩家,不再是画线的笔。

03

写移动函数

用 xcor/ycor 读取位置,用 setx/sety 设置新位置。

04

绑定方向键

listen 接收按键,onkey 把按键和函数绑定。

05

加入边界判断

用 if 防止角色跑出窗口。

教师话术

"按键不是直接移动角色,按键会调用一个函数。"

"onkey 里写 move_up,不写 move_up(),因为不是现在调用。"

"x 负责左右,y 负责上下。加号往正方向,减号往反方向。"

"边界判断就是:如果还没到边缘,才允许继续走。"

键盘知识卡

screen.listen()

让窗口开始接收键盘输入。

screen.onkey(move_up, "Up")

按 Up 键时调用 move_up。

player.ycor()

读取角色现在的 y 坐标。

player.sety(new_y)

把角色移动到新的 y 坐标。

课堂代码

创建角色

python
screen = turtle.Screen()
screen.setup(700, 500)
 
player = turtle.Turtle()
player.shape("circle")
player.color("red")
player.penup()
player.goto(0, 0)

四个移动函数

python
step = 20
 
def move_up():
    player.sety(player.ycor() + step)
 
def move_down():
    player.sety(player.ycor() - step)
 
def move_left():
    player.setx(player.xcor() - step)
 
def move_right():
    player.setx(player.xcor() + step)

绑定方向键

python
screen.listen()
screen.onkey(move_up, "Up")
screen.onkey(move_down, "Down")
screen.onkey(move_left, "Left")
screen.onkey(move_right, "Right")

边界判断

python
top_edge = 220
 
def move_up():
    if player.ycor() < top_edge:
        player.sety(player.ycor() + step)

完整版本

python
import turtle
 
screen = turtle.Screen()
screen.title("第 7 课:键盘控制")
screen.setup(700, 500)
 
player = turtle.Turtle()
player.shape("circle")
player.color("red")
player.penup()
player.goto(0, 0)
 
step = 20
left_edge = -320
right_edge = 320
top_edge = 220
bottom_edge = -220
 
def move_up():
    if player.ycor() < top_edge:
        player.sety(player.ycor() + step)
 
def move_down():
    if player.ycor() > bottom_edge:
        player.sety(player.ycor() - step)
 
def move_left():
    if player.xcor() > left_edge:
        player.setx(player.xcor() - step)
 
def move_right():
    if player.xcor() < right_edge:
        player.setx(player.xcor() + step)
 
def go_home():
    player.goto(0, 0)
 
screen.listen()
screen.onkey(move_up, "Up")
screen.onkey(move_down, "Down")
screen.onkey(move_left, "Left")
screen.onkey(move_right, "Right")
screen.onkey(go_home, "space")
 
turtle.done()

分层挑战

基础

改角色颜色、形状和 step。

进阶

绑定 space,让角色回到原点。

挑战

加边界提示:碰到边界时写出“到边了”。

完成标准

能解释按键如何调用函数。

能用四个方向键移动角色。

能解释 x/y 和加减号对应的方向。

能用 if 限制角色不跑出屏幕。

关键风险是把 move_up 写成 move_up()。这里是交给键盘调用,不是立即执行。

做完之后

收尾问题:角色能动了。如果碰到一个目标就加分,这就是 Day 8 的小游戏。