Bonjour
Je sais pas trop comment formulé le problème mais allons-y.
En gros, j'ai un petit logiciel dont l'objectif est de trouver la solution optimale a un jeu. J'ai donc une liste de Solutions, qui chacune on des Pions, qui peuvent Bouger() dans la Grille
Je démarre donc la chose avec une Solution principale.
Ensuite;
Donc je génère une "SubSolution", soit un embranchement dans l'arbre des possibilitées, a partir du mouvement précédent (La fonction Resoudre(solution) appelée plus bas est celle dans laquelle nous sommes, et donc récursive). La SubSolution prend donc la liste des mouvements et la position actuelle des pions de la Solution "maitre" que nous tentons de résoudre en ce moment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 For Each pion As Pion In Solution.Pions For Each poss As Possibilitee In Jeu.Possibilitees If pion.PossibiliteeFaisable(Possibilitee, Solution.Grille) Then Dim subSolution As New Solution(solution) subSolution.Deplacement(subpion, poss) If subSolution.Mouvement < Jeu.MouvementMax Then Resoudre(subSolution) Else subSolution.Finaliser() End If End If Next Next
Mon problème c'est qu'avec trace/espion, lorsque je tente d'effectuer un mouvement dans ma SubSolution(.Deplacer()), ma Solution "maître" est aussi affectée. Donc dès que je passe au mouvement suivant tout foire, et il fonce droit dans le mur en quelques millièmes de secondes.
Ce que je ne comprend pas, c'est d'où il tire sa référence, ou pourquoi Solution est affecté par une modification dans SubSolution!?
j'ai pensé au "byref", mais il s'agit bien d'un byval. et j'ai beau chercher, je ne comprend toujours pas pourquoi la seconde ou je modifie quelque chose sur la SubSolution, la Solution est aussi affectée????
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Class Solution Public sub New(ByVAL solution as Solution) _pions = solution.Pions _moves = solutions.Moves ..... End sub
Amuny,
Partager