コード例 #1
0
    def test_reflect_vertical(
        self,
        ball_top_left: Point,
        ball_angle: float,
        ball_result_top_left: Point,
        ball_result_angle: float,
        hit_objects_count: int,
    ):
        ball = Ball(
            top_left=ball_top_left,
            width=2.5,
            height=3.0,
            velocity=1.0,
            angle=Angle(deg2rad(ball_angle)),
        )

        bricks = [
            Brick(top_left=Point(1.0, 3.0), width=4.0, height=4.0),
            Brick(top_left=Point(5.0, 3.0), width=4.0, height=4.0),
            Brick(top_left=Point(9.0, 3.0), width=4.0, height=4.0),
        ]

        hit_objects = reflect_from_game_objects(ball, bricks)

        assert len(hit_objects) == hit_objects_count
        assert ball.top_left.x == ball_result_top_left.x
        assert ball.top_left.y == ball_result_top_left.y
        assert ball.angle.value == approx(deg2rad(ball_result_angle))
コード例 #2
0
    def test_reflect_from_three_objects_in_corner(
        self,
        brick1_top_left: Point,
        brick2_top_left: Point,
        brick3_top_left: Point,
        ball_top_left: Point,
        ball_angle: float,
        ball_result_top_left: Point,
        ball_result_angle: float,
    ):
        ball = Ball(
            top_left=ball_top_left,
            width=2.0,
            height=2.0,
            velocity=1.0,
            angle=Angle(deg2rad(ball_angle)),
        )

        bricks = [
            Brick(top_left=brick1_top_left, width=3.0, height=3.0),
            Brick(top_left=brick2_top_left, width=3.0, height=3.0),
            Brick(top_left=brick3_top_left, width=3.0, height=3.0),
        ]

        hit_objects = reflect_from_game_objects(ball, bricks)

        assert len(hit_objects) == 3
        assert ball.top_left.x == ball_result_top_left.x
        assert ball.top_left.y == ball_result_top_left.y
        assert ball.angle.value == approx(deg2rad(ball_result_angle))
コード例 #3
0
    def _handle_ball_collisions(self):
        hit_objects = reflect_from_game_objects(
            ball=self._level.ball,
            game_objects=[self._level.left_wall] + [self._level.right_wall] +
            [self._level.top_wall] + self._level.bricks +
            self._level.indestructible_bricks,
        )

        for hit_object in hit_objects:
            if not isinstance(hit_object, Brick):
                continue
            if hit_object.is_destroyed():
                play_destroy_brick(self._audio_device)
                self._score += self._get_brick_score(hit_object)
                self._award_extra_life_it_threshold_reached()
                self._update_values_in_title_bar()
            else:
                play_hit_brick(self._audio_device)

        if reflect_from_platform(self._level.ball, self._level.platform):
            play_hit_platform(self._audio_device)