Esempio n. 1
0
    def render(self, screen):
        screen.blit(media['img.main_bg'], (0, 0))

        mouse_x, mouse_y = pygame.mouse.get_pos()
        current_color = RED_TILE if gamestate.board.current_player == gamestate.RED else YELLOW_TILE

        # about button
        rect = self.about_rect()
        if rect.collidepoint(mouse_x, mouse_y):
            about = media['img.about_down']
        else:
            about = media['img.about']
        screen.blit(about, rect)

        winner = gamestate.board.winner
        if winner:
            center = utils.center(self.winner_text)
            screen.blit(self.winner_text, (center[0], 50))
            screen.blit(self.esc_for_menu, (20, 10))
        elif gamestate.board.full():
            center = utils.center(self.stalemate)
            screen.blit(self.stalemate, (center[0], 50))
            screen.blit(self.esc_for_menu, (20, 10))
        elif self.drop_info:
            # we're dropping a tile
            pos = self.board_pos(self.drop_info['col'], TILES_DOWN - self.drop_info['row'] - 1)
            self.drop_info['offset'] += TILE_DROP_SPEED
            y = self.drop_info['offset'] + BOARD_TOP - TILE_SIZE
            if y >= pos[1]:
                self.play_tile()
            else:
                x = BOARD_LEFT + TILE_SPACING + TILE_SIZE + self.drop_info['col'] * (TILE_SIZE * 2 + TILE_SPACING)
                self.draw_tile(screen, current_color, (x, y))
        else:
            # current player
            screen.blit(self.current_player, (20, 10))
            pygame.draw.circle(screen, current_color, (35 + self.current_player.get_width(), TILE_SIZE), 10)

            # current tile
            tile_x = mouse_x
            if tile_x  < BOARD_LEFT + TILE_SPACING:
                tile_x  = BOARD_LEFT + TILE_SPACING
            if (tile_x + TILE_SIZE + TILE_SPACING) > BOARD_RIGHT:
                tile_x = BOARD_RIGHT - (TILE_SIZE + TILE_SPACING)
            self.draw_tile(screen, current_color, (tile_x + TILE_SIZE/2, 75))

            # figure out which column is closest to the mouse position
            self.current_column = max(0, min(int((tile_x - BOARD_LEFT) / (TILE_SIZE * 2 + TILE_SPACING)), TILES_ACROSS - 1))
            y = gamestate.board.next_spot(self.current_column)
            if y is not None:
                pos = self.board_pos(self.current_column, TILES_DOWN - y - 1)
                pygame.draw.circle(screen, utils.lighten(current_color), pos, TILE_SIZE / 2)

        # board
        self.draw_board(screen)
Esempio n. 2
0
 def do_starting(self, screen):
     seconds = self.starting_ticks / 60 + 1
     font = self.timer_fonts[(self.starting_ticks % 60)]
     countdown = font.render(str(seconds), True, WHITE)
     screen.blit(countdown, center(countdown))
     #TODO: base this on FPS
     self.starting_ticks -= 2
     if self.starting_ticks <= 0:
         self.set_state('status', self.PLAYING)
Esempio n. 3
0
    def render(self, screen):
        screen.fill(BLACK)

        self.maze.render(screen)

        if self.get_state('status') == self.DEAD:
            screen.blit(self.dead_print, center(self.dead_print))
        elif self.get_state('status') == self.WIN:
            screen.blit(self.win_print, center(self.win_print))

        status = self.get_state('status')
        if status == self.PLAYING:
            self.maze.player.update()
        elif status == self.STARTING:
            self.do_starting(screen)

        cur_pixel = screen.get_at(self.maze.player.current)
        if cur_pixel == self.maze.wall_color:
            self.set_state('status', self.DEAD)
        elif cur_pixel == END_COLOR:
            #TODO: there's a 1 in 17 million chance for this to falsely win because
            # maze color matches winning marker color
            self.set_state('status', self.WIN)