Exemple #1
0
class StrategyPhase:
    """
    Handling the Strategy Phase of the game
    """
    def __init__(self, screen, player_list):
        """
        Initializing the Strategy Cards
        """

        # Generating the cards
        self.player_list = player_list
        self.player_list_cycle = cycle(player_list)
        self.current_player = next(self.player_list_cycle)
        self.user_interface = UserInterface(self.current_player)
        self.available_strategy_cards = pygame.sprite.Group()
        for SC in StrategyCardSet:
            strategy_card_sprite = StrategyCard(SC)
            self.available_strategy_cards.add(strategy_card_sprite)

        # Locating them
        x_size, y_size = screen.get_size()
        y_pos = [y_size / 3, 2 * y_size / 3]
        x_pos = [x_size / 8, 3 * x_size / 8, 5 * x_size / 8, 7 * x_size / 8]
        locs = iter([(x, y) for x in x_pos for y in y_pos])
        for SC in self.available_strategy_cards:
            x_sc, y_sc = SC.image.get_size()
            SC.image = pygame.transform.smoothscale(
                SC.image, (int(x_size / 8), int(x_size / 8 * y_sc / x_sc)))
            loc = next(locs)
            SC.update(rect=SC.image.get_rect(center=loc), image=SC.image)

    def handle_event(self, event, screen):
        # Have we clicked a tile
        if event.type == pygame.MOUSEBUTTONUP:
            for SC in self.available_strategy_cards:
                if SC.rect.collidepoint(event.pos):
                    self.current_player.add_strategy_card(SC)
                    self.move_to_next_player()
                    SC.kill()
            phase_over = False
            if NB_OF_STRATEGY_CARD_DISTRIBUTED[len(
                    self.player_list)] == 8 - len(
                        self.available_strategy_cards):
                phase_over = True
            return phase_over

    def move_to_next_player(self):
        self.current_player = next(self.player_list_cycle)
        self.user_interface.change_main_color(self.current_player.color)

    def update(self, screen):
        self.available_strategy_cards.draw(screen)
        self.user_interface.draw(screen)

    def cleaning(self):
        for SC in self.available_strategy_cards:
            SC.kill()
        return self.player_list
Exemple #2
0
class ActionPhase:
    """
    Handling the Action Phase of the game
    """
    def __init__(self, screen, player_list):
        self.player_list = player_list
        self.map = Map(player_list, size=3)
        self.map.create_map()
        self.map.draw_tiles(screen)
        self.map.draw_hex_positions(screen)

        # Make sure initiative order is up to date
        agenda_order = []
        for player in player_list:
            player.update_initiative_order()
            agenda_order.append(player.get_initiative_order())

        # Reorganizing the player iteration in initiative (absolute bloodbath)
        iterable = self.player_list.sprites()
        player_list = pygame.sprite.Group()
        for i in np.argsort(agenda_order):
            player_list.add(iterable[i])
            # iterable[i].remove(self.player_list) # the sprite is in two groups i dont know what that means
        self.player_list = player_list
        self.player_list_cycle = cycle(self.player_list)
        self.current_player = next(self.player_list_cycle)
        self.turn_controller = TurnController(
            current_player=self.current_player)
        self.user_interface = UserInterface(current_player=self.current_player)

    def move_to_next_player(self):
        self.current_player = next(self.player_list_cycle)
        self.user_interface.change_main_color(self.current_player.color)

    def handle_event(self, screen, event):
        pass

    def update(self, screen):
        # Updating MAP on hover
        for tile in self.map.tiles:
            r_hex = tile.image.get_rect(topleft=tile.pos)
            if r_hex.collidepoint(pygame.mouse.get_pos()):
                tile.update(pos=tile.pos, image=tile.image, color=BLACK)
            else:
                tile.update(pos=tile.pos, image=tile.image, color=WHITE)
        self.map.tiles.draw(screen)
        self.map.draw_players(screen)
        self.draw_units(screen)
        self.map.draw_hex_positions(screen)
        self.user_interface.draw(screen)

    def erase(self, screen):
        pass

    def draw_units(self, screen):
        for this_player in self.player_list:
            this_player.draw_units(screen)