Example #1
0
 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