Exemple #1
0
 def __init_ball(self):
     radius = 5
     middle_pos = self.win_x / 2, self.win_y / 2
     self.ball = Ball(middle_pos, radius)
Exemple #2
0
class Pong(object):
    def set_up_game(self):
        self.p1_score = 0
        self.p2_score = 0
        self.winning_score = 11
        self.tie_score = 10

    def set_up_round(self, screen_sz):
        self.volleys = 0
        self.win_x = screen_sz[0]
        self.win_y = screen_sz[1]
        self.__init_ball()
        self.__init_player_entities()

    def update_scores(self):
        if self.__ball_out_for_p1():
            self.p2_score += 1
        elif self.__ball_out_for_p2():
            self.p1_score += 1
        else:
            return False
        return True

    def is_won(self):
        if self.p1_score >= self.tie_score and self.p2_score >= self.tie_score:
            if self.p1_score - self.p2_score >= 2:
                self.winner = self.player1
                return True
            elif self.p2_score - self.p1_score >= 2:
                self.winner = self.player2
                return True
            else:
                return False
        if self.p1_score == self.winning_score:
            self.winner = self.player1
            return True
        elif self.p2_score == self.winning_score:
            self.winner = self.player2
            return True
        else:
            return False

    def move_entities(self, keys_pressed):
        for key in keys_pressed:
            if key == "down":
                self.player1.move_down(1)
            elif key == "up":
                self.player1.move_up(1)

        ai_move = self.p2_ai.get_move()
        if (ai_move == 1):
            self.player2.move_down(1)
        elif (ai_move == -1):
            self.player2.move_up(1)

    def move_ball(self):
        self.__check_ball_collisions()
        self.ball.move()

    def __check_ball_collisions(self):
        ball = self.ball.get_next_frame_hit_box()
        p1 = self.player1.get_area()
        p2 = self.player2.get_area()

        if p1.colliderect(ball):
            self.__handle_volley(self.player1)
        elif p2.colliderect(ball):
            self.__handle_volley(self.player2)
        elif ball.top <= 0 or ball.bottom >= self.win_y:
            self.ball.mirror_y_axis_movement()

    def __handle_volley(self, paddle):
        bounce = paddle.get_return_angle(self.ball)
        self.ball.set_movement_vector(bounce)
        self.volleys += 1
        if self.volleys == 4 or self.volleys == 12:
            self.ball.speed_up()

    def __init_player_entities(self):
        paddle_size = 10, 50
        y_pos = self.win_y / 2 - paddle_size[1] / 2
        p1_paddle_pos = 30, y_pos
        p2_paddle_pos = self.win_x - 30, y_pos
        self.player1 = Paddle(p1_paddle_pos, paddle_size, (0, self.win_y))
        self.player2 = Paddle(p2_paddle_pos, paddle_size, (0, self.win_y))
        self.p2_ai = AI(self.player2, self.ball, self.win_x / 2)

    def __init_ball(self):
        radius = 5
        middle_pos = self.win_x / 2, self.win_y / 2
        self.ball = Ball(middle_pos, radius)

    def __ball_out_for_p1(self):
        return self.ball.get_hit_box().right < 0

    def __ball_out_for_p2(self):
        return self.ball.get_hit_box().left > self.win_x