1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
private ArrayList<ArrayList<Integer>> newActionList( ArrayList<ArrayList<Integer>> PlayersActions,List<Integer> actionsToDelete) {
ArrayList<ArrayList<Integer>> NewPlayersActions = (ArrayList<ArrayList<Integer>>) new ArrayList<ArrayList<Integer>>(PlayersActions).clone();
for(int k = 0; k < PlayersActions.size(); k++){
NewPlayersActions.get(k).removeAll(actionsToDelete);
}
return NewPlayersActions;
}
public TreeNode buildTree( ArrayList<Integer>Players, ArrayList<ArrayList<Integer>> PlayersActions) {
// on créé une racine pour l'acteur 1
DefaultMutableTreeNode racine = createNode(Players.get(0), null); // on créé la racine
// on créé les branches et les sous noeuds
buildTree(racine,Players,PlayersActions , Trace1, Trace2, new StringBuilder(), 0);
return racine;
}
// création des sous-noeuds d'un noeud parent
private void buildTree(DefaultMutableTreeNode parent,ArrayList<Integer>Players, ArrayList<ArrayList<Integer>> PlayersActions, Stack<ArrayList<Integer>>Trace1, Stack<ArrayList<Integer>> Trace2, StringBuilder sb, int i) {
// actions choisies par chacun des acteurs, au fur et à mesure
List<Integer> choixActions1 = new ArrayList<Integer>();
for(Integer action1 : PlayersActions.get(i)) {
choixActions1.add(action1);
Trace1.push((ArrayList<Integer>) choixActions1);
// on créé les sous-noeuds
// on créé les listes d'actions disponibles sans les choix faits pour cette itération
ArrayList<ArrayList<Integer>> NewPlayersActions = newActionList(PlayersActions,choixActions1);
StringBuilder sbf = new StringBuilder(sb);
sbf.append(parent.getChildCount()+1); // on ajoute un fils à chaque itération
if (NewPlayersActions.isEmpty() || i == Players.size()-1) {
// on créé une feuille si les 2 listes d'actions sont vides
parent.add(createLeaf("leaf ", Players.get(i), sbf));
}
else {
i++;
DefaultMutableTreeNode nodeActeur1 = createNode(Players.get(i), choixActions1);
parent.add(nodeActeur1);
// appel récursif
buildTree(nodeActeur1, Players,NewPlayersActions, Trace2, Trace1, sbf, i);
Trace1.pop();
}
}
} |
Partager