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;
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
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.

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

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
Merci
Amuny,