У вас правильная идея, но есть несколько редких случаев, когда мяч может пройти через весло.
Первый оператор if проверяет положение y мяча и ракетки. Это должно вернуть true, если любая часть мяча находится между paddle_pos[1]
и paddle_pos[3]
.
Второй оператор if проверяет положение x и имеет ту же логику. Вы должны проверить, находится ли ЛЕВАЯ сторона мяча в пределах досягаемости, поскольку это та часть мяча, которая ударяет в ЛЕВУЮ ракетку.
Попробуйте этот код:
def hit_paddle(self, pos):
""" pos(left, top, right, bottom)"""
paddle_pos = self.canvas.coords(self.shape)
if ball_pos[3] >= paddle_pos[1] and ball_pos[1] <= paddle_pos[3]:
if ball_pos[0] >= paddle_pos[0] and ball_pos[0] <= paddle_pos[2]:
return True
return False