def generate_group_missions(groupes, state, species, max_split_rate): nb_human_groups = len(state.getMembers(Species.human)) nb_enemy_groups = len(state.getMembers(species.inverse())) nb_my_groups = len(groupes) sub_missions_array = [] #on genere une liste de missions possibles par groupe (split et non split) for groupMe in groupes: possible_actions = enumerate_possible_actions(state, groupMe, species, nb_my_groups, max_split_rate) possible_simple_actions = possible_actions[0] possible_simple_rates = [] possible_split_actions = possible_actions[1] possible_split_rates = [] group_missions = [] for action in possible_simple_actions: #on calcule les notes des actions "simples": un groupe attaque un groupe d'humains action.calc_mark(state) possible_simple_rates.append(action.mark) for actions in possible_split_actions: #on calcule les notes des missions splittées actions[0].calc_mark(state) actions[1].calc_mark(state) possible_split_rates.append(actions[0].mark + actions[1].mark) #ensuite, on cree notre liste de missions possibles pour ce groupe for action in possible_simple_actions: group_missions.append(Mission([action])) for split_couple in possible_split_actions: group_missions.append(Mission([split_couple[0], split_couple[1]])) merged_rates = possible_simple_rates + possible_split_rates group_missions.sort(key=dict(zip(group_missions, merged_rates)).get, reverse=True) #on rajoute les missions possibles de ce groupe (déjà pré-tronquée) à la liste de sous-missions globales sub_missions_array.append(group_missions[:(nb_human_groups + nb_enemy_groups)]) return sub_missions_array
def generate_group_missions (groupes, state, species, max_split_rate): nb_human_groups=len(state.getMembers(Species.human)) nb_enemy_groups=len(state.getMembers(species.inverse())) nb_my_groups = len(groupes) sub_missions_array=[] #on genere une liste de missions possibles par groupe (split et non split) for groupMe in groupes: possible_actions = enumerate_possible_actions(state, groupMe, species,nb_my_groups, max_split_rate) possible_simple_actions = possible_actions[0] possible_simple_rates = [] possible_split_actions = possible_actions[1] possible_split_rates = [] group_missions = [] for action in possible_simple_actions: #on calcule les notes des actions "simples": un groupe attaque un groupe d'humains action.calc_mark(state) possible_simple_rates.append(action.mark) for actions in possible_split_actions: #on calcule les notes des missions splittées actions[0].calc_mark(state) actions[1].calc_mark(state) possible_split_rates.append(actions[0].mark + actions[1].mark) #ensuite, on cree notre liste de missions possibles pour ce groupe for action in possible_simple_actions: group_missions.append(Mission([action])) for split_couple in possible_split_actions: group_missions.append(Mission([split_couple[0], split_couple[1]])) merged_rates = possible_simple_rates + possible_split_rates group_missions.sort(key=dict(zip(group_missions, merged_rates)).get, reverse=True) #on rajoute les missions possibles de ce groupe (déjà pré-tronquée) à la liste de sous-missions globales sub_missions_array.append(group_missions[:(nb_human_groups+nb_enemy_groups)]) return sub_missions_array
from species import Species from Plateau import PlateauDeJeu from group import Group from actions_generator import enumerate_possible_actions plateau = PlateauDeJeu(10, 5) myGroup = Group(4,4,1,Species.werewolf) plateau.addGroup(2,2,4,Species.human) plateau.addGroup(9,0,2,Species.human) plateau.addGroup(9,2,1, Species.human) plateau.addGroup(9,4,2, Species.human) plateau.addGroup(1,3,4,Species.vampire) plateau.addThisGroup(myGroup) plateau.print_plateau() print("Enumeration actions ...\n") actions = enumerate_possible_actions(plateau, myGroup, Species.werewolf) for actionSimple in actions[0]: action_type = actionSimple.action_type assigned = actionSimple.assignedGroup target = actionSimple.target_group print("Action de type " + str(action_type) + " : " + str(assigned) + " vers " + str(target) + ", note : " + str(actionSimple.calc_mark(plateau))) for twoActions in actions[1]: group0 = twoActions[0].assignedGroup group1 = twoActions[1].assignedGroup print("split " + str(group0.eff) + ", " + str(group1.eff)) print(" " + str(twoActions[0]) + " : " + str(twoActions[0].calc_mark(plateau))) print(" " + str(twoActions[1]) + " : " + str(twoActions[1].calc_mark(plateau)))