示例#1
0
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
示例#3
0
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)))