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