Exemplo n.º 1
0
    def __init__(self, screen, event_manager, names, finish_cb):
        super(BoardPage, self).__init__(screen, CORNSILK, event_manager)

        def game_end_listener(winner):
            self.suspended = True
            self.score_board.update(winner)
            if not any(score == BoardPage.WINNING_SCORE
                       for score in self.score_board.scores):
                event_manager.add_timer(1, self.reset)
            else:
                self.declare_winner()
                event_manager.add_timer(3, finish_cb)

        event_manager.add_game_end_listener(game_end_listener)
        event_manager.add_tick_listener(self.run)
        self.event_manager = event_manager

        self.paddle_1 = Paddle(30, RED, pygame.K_w, pygame.K_s, event_manager)
        self.paddle_2 = Paddle(1160, RED, pygame.K_UP, pygame.K_DOWN,
                               event_manager)
        self.paddles = pygame.sprite.RenderUpdates()
        self.paddles.add(self.paddle_1, self.paddle_2)

        self.ball = Ball(RED, (self.paddle_1, self.paddle_2), event_manager)
        self.ball_group = pygame.sprite.RenderUpdates()
        self.ball_group.add(self.ball)

        self.suspended = True
        self.score_board = ScoreBoard(names, screen, event_manager)
Exemplo n.º 2
0
 def createWinBalls(self):
     for i in range(1, random.randint(2, 5)):
         ball = Ball(self, self.renderer, self.world, self.display, self.middle)
         picList = [Ball.pic, Mine.leftPic, Mine.rightPic, RedBall.pic, Tower.pic] + Ghost.pics.values() + Bonus.pics.values()
         ball.setPic(random.choice(picList))
         self.balls.append(ball)     
     if len(self.balls) <= 60: 
         self.keepPushingBalls = g_player.setTimeout(1000, self.createWinBalls)
Exemplo n.º 3
0
class BoardPage(Page):
    LINE_THICKNESS = 2
    ARENA = ARENA
    WINNING_SCORE = 3

    def __init__(self, screen, event_manager, names, finish_cb):
        super(BoardPage, self).__init__(screen, CORNSILK, event_manager)

        def game_end_listener(winner):
            self.suspended = True
            self.score_board.update(winner)
            if not any(score == BoardPage.WINNING_SCORE
                       for score in self.score_board.scores):
                event_manager.add_timer(1, self.reset)
            else:
                self.declare_winner()
                event_manager.add_timer(3, finish_cb)

        event_manager.add_game_end_listener(game_end_listener)
        event_manager.add_tick_listener(self.run)
        self.event_manager = event_manager

        self.paddle_1 = Paddle(30, RED, pygame.K_w, pygame.K_s, event_manager)
        self.paddle_2 = Paddle(1160, RED, pygame.K_UP, pygame.K_DOWN,
                               event_manager)
        self.paddles = pygame.sprite.RenderUpdates()
        self.paddles.add(self.paddle_1, self.paddle_2)

        self.ball = Ball(RED, (self.paddle_1, self.paddle_2), event_manager)
        self.ball_group = pygame.sprite.RenderUpdates()
        self.ball_group.add(self.ball)

        self.suspended = True
        self.score_board = ScoreBoard(names, screen, event_manager)

    def declare_winner(self):
        self.score_board.store_result()
        winner = 0 if self.score_board.scores[
            0] == BoardPage.WINNING_SCORE else 1
        name = MEDLARGE.render(self.score_board.names[winner], True, BLACK)
        name_rect = name.get_rect()
        name_rect.center = (HALF_WIDTH, HALF_HEIGHT - 80)

        wins = MEDLARGE.render("Wins!!!", True, BLACK)
        wins_rect = wins.get_rect()
        wins_rect.center = (HALF_WIDTH, HALF_HEIGHT + 10)

        self.screen.blit(name, name_rect)
        self.screen.blit(wins, wins_rect)
        pygame.display.update((name_rect, wins_rect))

    def display(self):
        super(BoardPage, self).display()
        self.score_board.render()
        self.reset(2)

    def start(self):
        self.suspended = False

    def reset(self, delay=0):
        self.screen.blit(ARENA, (0, 0))

        self.paddle_1.reset()
        self.paddle_2.reset()
        self.ball.reset()

        self.paddles.clear(self.screen, ARENA)
        self.ball_group.clear(self.screen, ARENA)

        self.paddles.draw(self.screen)
        self.ball_group.draw(self.screen)

        pygame.display.flip()
        self.event_manager.add_timer(delay, self.start)

    def clean(self):
        super(BoardPage, self).clean()
        self.event_manager.remove_tick_listener(self.run)
        self.paddle_1.clean()
        self.paddle_2.clean()

    def run(self):
        if not self.suspended:
            self.paddles.clear(self.screen, ARENA)
            self.ball_group.clear(self.screen, ARENA)

            self.ball_group.update()

            pygame.display.update(self.paddles.draw(self.screen))
            pygame.display.update(self.ball_group.draw(self.screen))
Exemplo n.º 4
0
    def __init__(self):
        if not glfw.init():
            return

        glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 3)
        glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 2)
        glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)
        glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, GL_TRUE)

        window = glfw.create_window(self.WIDTH, self.HEIGHT, self.TITLE, None, None)
        glfw.set_window_size_limits(window, 320, 480, glfw.DONT_CARE, glfw.DONT_CARE)
        if not window:
            glfw.terminate()
            return

        glfw.make_context_current(window)
        glfw.set_key_callback(window, self.key_callback)
        glfw.set_window_size_callback(window, self.reshape)

        width, height = glfw.get_framebuffer_size(window)
        glViewport(0, 0, width, height)
        aspect_ratio = width / height

        glClearColor(0.2, 0.3, 0.2, 1.0)
        glEnable(GL_DEPTH_TEST)

        self.ball = Ball(TEXTILE_TEXTURE)
        ball_shader = Shader(BASE_VS, BASE_FS)
        self.ball.prep(ball_shader, aspect_ratio, 0.5, 85)

        self.platform = Platform(BUCKET_TEXTURE)
        shader = Shader(BASE_VS, BASE_FS)
        self.platform.prep(shader, aspect_ratio, 1.0, 85)

        self.hearts = []
        for i in range(0, self.MAX_FAIL):
            heart = LiveHeart([-3.0 + i * 0.5, 5.5, 0.0])
            heart_shader = Shader(HEART_VS, HEART_FS)
            heart.prep(heart_shader, aspect_ratio, 0.3, 85)
            self.hearts.append(heart)

        self.bg = Background(WOOD_TEXTURE)
        bg_shader = Shader(BASE_VS, BASE_FS)
        self.bg.prep(bg_shader, aspect_ratio, 11.0, 85)

        while not glfw.window_should_close(window):
            glClearColor(0.0, 0.3, 0.3, 1.0)
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

            glDisable(GL_DEPTH_TEST)
            self.bg.draw()
            glEnable(GL_DEPTH_TEST)

            self.platform.draw(self.game_status_play)
            self.ball.draw(self.game_status_play)

            if self.collision_detect():
                if self.fails == self.MAX_FAIL:
                    self.game_status_play = False

            for heart in self.hearts:
                heart.draw()

            glfw.swap_buffers(window)
            glfw.poll_events()

        glfw.terminate()
Exemplo n.º 5
0
class Window:
    TITLE = 'Catch the ball'
    WIDTH = 1280
    HEIGHT = 720
    MAX_FAIL = 5
    game_status_play = True
    fails = 0
    score = 0

    def reshape(self, window):
        """Window size callback. Redraw game objects"""
        angle = 85
        width, height = glfw.get_framebuffer_size(window)
        aspect_ratio = width / height
        self.ball.shader.use()
        self.ball.prep(self.ball.shader, aspect_ratio, 0.5, angle)

        self.platform.shader.use()
        self.platform.prep(self.platform.shader, aspect_ratio, 1.0, angle)

        for i in range(0, self.MAX_FAIL):
            self.hearts[i].shader.use()
            self.hearts[i].prep(self.hearts[i].shader, aspect_ratio, 0.3, angle)

        self.bg.shader.use()
        self.bg.prep(self.bg.shader, aspect_ratio, 11.0, angle)
        glViewport(0, 0, width, height)

    def __init__(self):
        if not glfw.init():
            return

        glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 3)
        glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 2)
        glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)
        glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, GL_TRUE)

        window = glfw.create_window(self.WIDTH, self.HEIGHT, self.TITLE, None, None)
        glfw.set_window_size_limits(window, 320, 480, glfw.DONT_CARE, glfw.DONT_CARE)
        if not window:
            glfw.terminate()
            return

        glfw.make_context_current(window)
        glfw.set_key_callback(window, self.key_callback)
        glfw.set_window_size_callback(window, self.reshape)

        width, height = glfw.get_framebuffer_size(window)
        glViewport(0, 0, width, height)
        aspect_ratio = width / height

        glClearColor(0.2, 0.3, 0.2, 1.0)
        glEnable(GL_DEPTH_TEST)

        self.ball = Ball(TEXTILE_TEXTURE)
        ball_shader = Shader(BASE_VS, BASE_FS)
        self.ball.prep(ball_shader, aspect_ratio, 0.5, 85)

        self.platform = Platform(BUCKET_TEXTURE)
        shader = Shader(BASE_VS, BASE_FS)
        self.platform.prep(shader, aspect_ratio, 1.0, 85)

        self.hearts = []
        for i in range(0, self.MAX_FAIL):
            heart = LiveHeart([-3.0 + i * 0.5, 5.5, 0.0])
            heart_shader = Shader(HEART_VS, HEART_FS)
            heart.prep(heart_shader, aspect_ratio, 0.3, 85)
            self.hearts.append(heart)

        self.bg = Background(WOOD_TEXTURE)
        bg_shader = Shader(BASE_VS, BASE_FS)
        self.bg.prep(bg_shader, aspect_ratio, 11.0, 85)

        while not glfw.window_should_close(window):
            glClearColor(0.0, 0.3, 0.3, 1.0)
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

            glDisable(GL_DEPTH_TEST)
            self.bg.draw()
            glEnable(GL_DEPTH_TEST)

            self.platform.draw(self.game_status_play)
            self.ball.draw(self.game_status_play)

            if self.collision_detect():
                if self.fails == self.MAX_FAIL:
                    self.game_status_play = False

            for heart in self.hearts:
                heart.draw()

            glfw.swap_buffers(window)
            glfw.poll_events()

        glfw.terminate()

    def key_callback(self, window, key, scancode, action, mode):
        if key == glfw.KEY_ESCAPE and action == glfw.PRESS:
            glfw.set_window_should_close(window, GL_TRUE)

        if key == glfw.KEY_SPACE and action == glfw.PRESS:
            self.reset_game(self.ball)

        if key == glfw.KEY_A or key == glfw.KEY_D:
            if action == glfw.PRESS:
                glfw.set_time(0)
                self.platform.curr_movement = self.platform.LEFT if key == glfw.KEY_A else self.platform.LEFT
            elif action == glfw.RELEASE:
                self.platform.curr_movement = self.platform.STOP

    def reset_game(self, item):
        self.score = 0
        self.fails = 0
        self.game_status_play = True
        item.random_pos()
        item.speed = item.INITIAL_SPEED
        for heart in self.hearts:
            heart.pos[1] = 5.5

    def collision_detect(self):
        platform_edges = [self.platform.pos[0] - 0.5 * self.platform.scale, self.platform.pos[0] + 0.5 * self.platform.scale]
        item_edges = [self.ball.pos[0] - 0.5 * self.ball.scale, self.ball.pos[0] + 0.5 * self.ball.scale]
        if self.ball.pos[1]-0.5*self.ball.scale < self.platform.pos[1]+0.5*self.platform.scale:
            self.ball.random_pos()
            self.ball.speed = self.ball.speed * 1.1
            if item_edges[0] >= platform_edges[0] and item_edges[1] <= platform_edges[1]:
                self.score += 1
            else:
                self.fails += 1
                self.hearts[self.MAX_FAIL - self.fails].pos[1] = 20.0
            return True
        return False
Exemplo n.º 6
0
 def addBall(self):
     if len(self.balls) < maxBalls:
         self.balls.append(Ball(self, self.renderer, self.world, self.display, self.middle))
Exemplo n.º 7
0
 def startBall(self):
     ball = Ball(self, self.renderer, self.world, self.display, self.middle)
     self.balls.append(ball)
     if self.tutorialMode:
         BallTutorial(self).start()