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)
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)
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)