kill0157
Messages postés3Date d'inscriptionjeudi 8 décembre 2011StatutMembreDernière intervention29 décembre 2011
-
28 déc. 2011 à 21:18
kill0157
Messages postés3Date d'inscriptionjeudi 8 décembre 2011StatutMembreDernière intervention29 décembre 2011
-
29 déc. 2011 à 12:27
Bonjour à tous !
Voilà mon premier message sur le forum et malheureusement c'est pour demander de l'aide.
J'écris un algorithme de pathfinding (algorithme A* pour trouver un schéma). Dans mon algorithme je créé un tableau d'un type personnalisé.
Description du type personnalisé:
Public Class Casecarte
Public DistanceDépart, DistanceArrivée, SommeDistance As Integer
Public Position As Point 'La position du point actuel étudié
Public Parent As Casecarte 'Son parent
End Class
Je créé un tableau succ(3) de Casecarte et je le remplie de cette façon:
Dim succ(3) As Casecarte
For i As Integer = 0 To 3
succ(i) = New Casecarte
succ(i) = pointActuel
Next
succ(0).Position.X = pointActuel.Position.X
succ(0).Position.Y = pointActuel.Position.Y - 1
succ(1).Position.X = pointActuel.Position.X + 1
succ(1).Position.Y = pointActuel.Position.Y
succ(2).Position.X = pointActuel.Position.X
succ(2).Position.Y = pointActuel.Position.Y + 1
succ(3).Position.X = pointActuel.Position.X - 1
succ(3).Position.Y = pointActuel.Position.Y
Le pointActuel étant un Casecarte
Mon problème c'est que l'affectation des positions pose problème ! Si j'affecte, par exemple 2 à succ(0).Position.X, tous les autres succ(i).Position.X (pour i variant de 0 à 3) vont avoir la même valeur.
Je ne vois pas ce qui cloche !
Si vous pouvez me venir en aide, je vous remercie d'avance !
kill0157
Messages postés3Date d'inscriptionjeudi 8 décembre 2011StatutMembreDernière intervention29 décembre 2011 29 déc. 2011 à 00:20
Salut et tout d'abord merci d'avoir pris le temps de me lire et de me répondre.
pointActuel est déclaré dans ma fonction Recherche chemin. Quoi qu'il en soit, pointActuel est bien défini comme un type Casecarte et possède ainsi une position etc...
Il reste le même pendant toute la phase d'affectation des variables succ(i).position.x et y.
Pour moi ce problème n'est pas logique, car il ne devrait pas y avoir d'influence entre chaque affectation.
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 29 déc. 2011 à 11:47
Salut
quand tu écris
For i As Integer = 0 To 3
succ(i) = New Casecarte
succ(i) = pointActuel
Next
tous les succ(i) ont le meme pointActuel
parce que quand tu écris
succ(i) = pointActuel ,succ(i) obtient l'addresse(pointer) de pointActuel
donc tous les succ(i) recoivent la meme addresse
donc peut etre écrire
For i As Integer = 0 To 3
succ(i) = New Casecarte
succ(i).DistanceDépart = pointActuel.DistanceDépart
' et la meme chose pour tous les autres membres de casecarte
Next
evite d'utiliser les accents dans les noms des
variables fonctions etc
kill0157
Messages postés3Date d'inscriptionjeudi 8 décembre 2011StatutMembreDernière intervention29 décembre 2011 29 déc. 2011 à 12:27
Bonjour !
Le problème venait bien de "succ(i) = pointActuel".
Visiblement, je n'avais pas besoin de le mettre, en l'enlevant j'ai résolu le problème. Merci de l'explication ShayW !
banana32 je préférais trouver la solution à ce problème en gardant les mêmes notations (pour ne pas changer toutes la suite) et je voulais surtout savoir ce qui posait problème ! Mais ta solution paraît intéressante. Je retiendrais ça si jamais un problème se présente !