def check_paddle_collision(self, obj: GameObject): ball_x, ball_y, _, _, _ = obj.get_dim() paddle_x, paddle_y, paddle_show, _, _ = self.paddle.get_dim() paddle_center = paddle_x + len(paddle_show) / 2 for i in range(len(paddle_show)): paddle_part_x = paddle_x + i dist_x = ball_x - paddle_part_x dist_y = ball_y - paddle_y if dist_x == 0 and dist_y == -1: if isinstance(obj, Ball): if obj.get_speed()[1] < 0: continue paddle_dist_center = ball_x - paddle_center ratio_dist = abs(2 * paddle_dist_center / len(paddle_show)) new_x_speed = speed_x.flat[np.abs(speed_x - ratio_dist).argmin()] if ball_x < paddle_center: new_x_speed = -new_x_speed obj.set_speed_x(new_x_speed) obj.reverse_y_speed() if self.grab_ball: self.ball_on_paddle = True if self.time_attack and not self.final_boss: for idd, _ in enumerate(self.bricks): self.bricks[idd].y += 1 if self.final_boss: if (self.ufo.health == 5 or self.ufo.health == 8) and self.pending_defense: self.bricks += self.ufo.spawn_defense( self.ufo.health // 3) self.pending_defense = False # log(str(new_x_speed)) return if isinstance(obj, PowerUp): return -1