You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python基于turtle开发Pong游戏时paddle无法响应按键移动问题

问题原因
  • 按键绑定逻辑错误:wn.onkeypress()的第一个参数需要传入未执行的函数引用,你写的paddle(paddleA, 1)属于直接调用函数,会在代码运行到绑定逻辑时直接执行一次,返回的None会被绑定给按键事件,所以按下按键时没有对应逻辑执行。
  • 窗口方法调用错误:
    • wn.tracer是控制窗口刷新的方法,不能直接赋值为0,正确写法是wn.tracer(0),你的赋值操作相当于给窗口对象新增了一个无关属性,没有生效关闭自动刷新的逻辑
    • wn.title是设置窗口标题的方法,直接赋值无法修改标题,需要写成wn.title("Main Test")
修正代码

我们可以用lambda匿名函数封装移动逻辑,实现给回调函数传参的需求,同时把函数名和参数名做区分避免语义混淆,完整可运行代码如下:

import turtle

# 窗口初始化
wn = turtle.Screen()
wn.title("Main Test")
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer(0)

# 左侧 paddleA
paddleA = turtle.Turtle()
paddleA.speed(0)
paddleA.shape("square")
paddleA.color("white")
paddleA.shapesize(stretch_wid=5, stretch_len= 1)
paddleA.penup()
paddleA.goto(-350,0)

# 右侧 paddleB
paddleB = turtle.Turtle()
paddleB.speed(0)
paddleB.shape("square")
paddleB.color("white")
paddleB.shapesize(stretch_wid=5, stretch_len= 1)
paddleB.penup()
paddleB.goto(350,0)

# 球
ball = turtle.Turtle()
ball.speed(0)
ball.shape("circle")
ball.color("white")
ball.penup()
ball.goto(0,0)

# paddle移动通用函数
def paddle_move(paddle, dir):
    y = paddle.ycor()
    y += 20 * dir
    paddle.sety(y)

# 按键绑定
wn.listen()
wn.onkeypress(lambda: paddle_move(paddleA, 1), "w")
wn.onkeypress(lambda: paddle_move(paddleA, -1), "s")
wn.onkeypress(lambda: paddle_move(paddleB, 1), "a")
wn.onkeypress(lambda: paddle_move(paddleB, -1), "d")

# 游戏主循环
while True:
    wn.update()

内容的提问来源于stack exchange,提问作者whensocksplay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:39:05