def init(): screen = pygame.display.set_mode((1600, 900), pygame.DOUBLEBUF) board = GameBoard.GameBoard(screen, (8, 8)) game_objects.menu = Menu.Menu(["Player vs Player", "Player vs Computer", "Quit"], screen) game_objects.board = board game_objects.overlay = Overlay.Overlay(screen, game_objects.board, False) game_objects.state = BoardState.BoardState(board, game_objects.overlay) for i in range(3): for j in range(8): if (i % 2) == 0: if not (j % 2) == 1: add_checker(Teams.black(), (j, i + 5)) continue if not (i % 2) == 0: if (j % 2) == 1: add_checker(Teams.black(), (j, i + 5)) continue add_checker(Teams.red(), (j, i)) game_objects.game = Game.Game(game_objects.state, game_objects.board) game_objects.game.new_game(GameMode.player_v_player()) run()
def _draw_team_sidebar(self, team): text_title = None text_title_rendered = None stats = None if team == Teams.red(): text_title = "Red Team" stats = self._red_stats start_x = self._board.get_padding()[0] + self._board.get_dimentions()[0] else: text_title = "Black Team" stats = self._black_stats start_x = 0 text = ["Men {}".format(stats[0]), "Kings {}".format(stats[1]), "Score {}".format(stats[2])] # Render ALL the things black = (0x00, 0x00, 0x00) grey = (0x44, 0x44, 0x44) title_rendered = self._sidebar_font_large.render(text_title, 1, black) text_rendered = [] for item in text: text_rendered.append(self._sidebar_font.render(item, 1, grey)) # Calculate the coordinates for everything text_padding = 10 title_text_size = self._sidebar_font_large.size(text_title) total_height = sum(map(get_second, map(self._sidebar_font.size, text))) total_height += title_text_size[1] total_height += text_padding * (len(text) + 1) total_width = title_text_size[0] top_x = start_x + int(0.1 * self._board.get_padding()[0]) top_y = (self._board.get_dimentions()[1] - total_height) / 2 self._screen.blit(title_rendered, (top_x, top_y)) curr_y = top_y + title_text_size[1] + text_padding height = self._sidebar_font.size("aa")[1] for item in text_rendered: self._screen.blit(item, (top_x, curr_y)) curr_y += text_padding + height
def add_checker(team, location): if location == (4, 0) or location == (7, 0): return red_checker = Resource.Resource("res/checker_red.png") black_checker = Resource.Resource("res/checker_black.png") res = None if team == Teams.red(): res = red_checker else: res = black_checker checker = Checker.Checker(pygame.display.get_surface(), game_objects.board, res) checker.location = location checker.team = team checker.type = CheckerType.men() game_objects.state.add_checker(checker)
def king_checker(self, location): index = self._get_checker_index_from_location(location) checker = self.get_checker_from_location(location) if not checker: raise ValueError('No checker exists at given location') if checker.type == CheckerType.king(): return if checker.team == Teams.red(): self.red_kings += 1 else: self.black_kings += 1 checker.type = CheckerType.king() current_res = checker.res.res new_res = Resource.Resource(current_res.replace(".png", "_king.png")) checker.res = new_res checker._load_resource() self.checkers[index] = checker
def _run_event(self, event): if not event.delete_pos: checker = self.get_checker_from_location(event.start) checker.animation_done_callback = self.event_completed if not event.start or not event.end: raise InvalidGameEventError("Event must be a delete event or move event") checker = self.get_checker_from_location(event.start) checker.animate_move(event.end) self.event_running = True else: index = self._get_checker_index_from_location(event.delete_pos) if self.checkers[index].team == Teams.red(): self.red_checkers -= 1 else: self.black_checkers -= 1 del self.checkers[index] self.event_completed() self.update_stats()
def render(self): self._draw_current_team() self._draw_team_sidebar(Teams.red()) self._draw_team_sidebar(Teams.black())
def update_stats(self): self.overlay.set_stats(Teams.red(), [self.red_checkers, self.red_kings, self.max_checkers_per_side - self.black_checkers]) self.overlay.set_stats(Teams.black(), [self.black_checkers, self.black_kings, self.max_checkers_per_side - self.red_checkers])
def team(self, team): if team != Teams.red() and team != Teams.black(): raise ValueError('Team must be provided') self.team = team