Problème affectation variable

kill0157 Messages postés 3 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 29 décembre 2011 - 28 déc. 2011 à 21:18
kill0157 Messages postés 3 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 29 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 !

5 réponses

cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
28 déc. 2011 à 22:15
Salut
Ou est déclaré pointActuel ?
0
kill0157 Messages postés 3 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 29 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.
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
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
0
Utilisateur anonyme
29 déc. 2011 à 12:18
Bonjour,

Pourquoi ne pas utiliser une List(Of casecarte) ?
dim maliste as new list(of casecarte)

Plus d'index à gérer, recherches, ajouts, modifs facilités etc...

Pourquoi ne pas renseigner ton 'pointActuel' dans le constructeur de la classe :
Public Class Casecarte
    sub new(ptact as point)
       position = ptact
    end sub
    ...


Tu aurais juste à écrire :
maliste.add(new casecarte(pointActuel)))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kill0157 Messages postés 3 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 29 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 !

Quoi qu'il en soit, mon algo marche maintenant.

Merci de votre aide !
0