Python Turtle开发Pong游戏如何实现paddle_a跟随鼠标Y轴移动
实现步骤
要实现左侧挡板跟随鼠标Y轴移动,仅需新增鼠标事件绑定逻辑,无需修改现有游戏核心代码:
- 新增挡板位置更新函数,固定X轴坐标,仅同步鼠标Y轴位置,同时增加边界校验避免挡板移出屏幕
- 将该函数绑定到窗口的鼠标移动事件
完整修改后代码
import turtle wn = turtle.Screen() wn.title("Pong") wn.bgcolor("black") wn.setup(width=800, height=600) wn.tracer(0) # Paddle A paddle_a = turtle.Turtle() paddle_a.speed(0) paddle_a.shape("square") paddle_a.color("white") paddle_a.shapesize(stretch_wid=5, stretch_len=0.5) paddle_a.penup() paddle_a.goto(-380, 0) # Ball ball = turtle.Turtle() ball.speed(0) ball.shape("square") ball.color("white") ball.shapesize(stretch_len=0.75, stretch_wid=0.75) ball.penup() ball.goto(0, 0) ball.dx = 0.3 ball.dy = 0.3 # Functions def paddle_a_up(): y = paddle_a.ycor() y += 10 paddle_a.sety(y) def paddle_a_down(): y = paddle_a.ycor() y -= 10 paddle_a.sety(y) # 新增:鼠标控制挡板函数 def update_paddle_a(mouse_x, mouse_y): # 限制挡板上下边界,避免超出游戏窗口 target_y = max(min(mouse_y, 250), -250) # 固定X坐标不变,仅更新Y坐标 paddle_a.sety(target_y) # 事件绑定 wn.listen() # 原有键盘绑定可保留,实现键盘+鼠标双控制,不需要可以注释掉 wn.onkeypress(paddle_a_up, "w") wn.onkeypress(paddle_a_down, "s") # 新增:绑定鼠标移动事件 wn.onmotion(update_paddle_a) # Main game loop while True: wn.update() # Move the ball ball.setx(ball.xcor() + ball.dx) ball.sety(ball.ycor() + ball.dy) # Border checking if ball.ycor() > 290: ball.sety(290) ball.dy *= -1 if ball.ycor() < -290: ball.sety(-290) ball.dy *= -1 if ball.xcor() > 390: ball.goto(0, 0) ball.dx *= -1 if ball.xcor() < -390: ball.goto(0, 0) ball.dx *= -1
逻辑说明
turtle内置的onmotion()方法会监听窗口内的鼠标移动动作,每次鼠标移动时会自动将当前鼠标的坐标作为参数传入绑定的回调函数。我们在回调函数中忽略鼠标X轴坐标,仅同步Y轴坐标到挡板即可,增加边界限制是为了避免挡板移出可视区域,边界值250是根据挡板高度(拉伸后为100px)和窗口高度(600px,上下边界为±300)计算得出的合理值。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

