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
def add_object(self, obj: GameObject): object_x, object_y, object_show, object_color, object_len = obj.get_dim( ) # log(f"{object_x} !! {object_y} \n") for i in range(object_len): self.mat[object_y][min( object_x + i, self.width - 1)] = object_color + object_show[i] + Back.RESET