Логотипы верхней и нижней границы c, кажется, работают, но это сбой:
if ball.ycor() < -390 :
ball.goto(0, 0)
ball.dx *= -1
Вы проверяете координату y относительно границы x. Это должно быть ball.xcor()
. Переделка вашего кода:
from turtle import Screen, Turtle
# Function for paddle a
def paddle_a_up():
paddle_a.sety(paddle_a.ycor() + 20)
def paddle_a_down():
paddle_a.sety(paddle_a.ycor() - 20)
# Function for paddle b
def paddle_b_up():
paddle_b.sety(paddle_b.ycor() + 20)
def paddle_b_down():
paddle_b.sety(paddle_b.ycor() - 20)
screen = Screen()
screen.title("Pong game")
screen.bgcolor('black')
screen.setup(width=800, height=600)
screen.tracer(0)
# Paddle a
paddle_a = Turtle()
paddle_a.shape('square')
paddle_a.color('white')
paddle_a.shapesize(stretch_wid=5, stretch_len=1)
paddle_a.penup()
paddle_a.setx(-350)
# Keyboard binding for paddle a
screen.onkeypress(paddle_a_up, 'w')
screen.onkeypress(paddle_a_down, 's')
# Paddle b
paddle_b = Turtle()
paddle_b.shape('square')
paddle_b.color('white')
paddle_b.shapesize(stretch_wid=5, stretch_len=1)
paddle_b.penup()
paddle_b.setx(350)
# Keyboard binding for paddle b
screen.onkeypress(paddle_b_up, 'Up')
screen.onkeypress(paddle_b_down, 'Down')
# ball
ball = Turtle()
ball.shape('square')
ball.color('white')
ball.penup()
ball.dx = 2
ball.dy = 2
screen.listen()
# Main game loop
while True:
x, y = ball.position()
x += ball.dx
y += ball.dy
# Border checking
if y > 290:
y = 290
ball.dy *= -1
elif y < -290:
y = -290
ball.dy *= -1
if not -390 <= x <= 390:
x, y = (0, 0)
ball.dx *= -1
# Move the ball
ball.setposition(x, y)
screen.update()
После того, как вы получите весла, чтобы бить по мячу взад-вперед, вы можете подумать о переключении этого с while True:
, которому нет места в управляемых событиями мир как черепаха, к событию таймера через ontimer()
.