Réinitialiser une boucle for en cours d'exécution
Bonjour à tous,J'essaye de programmer à titre d'exo le pb des 8 reines. euh comme je débute c'est du lourd du point de vue algo :)
Voici mon pb qui n'est pas un problème d'algo mais de pile
Le code est un test de détection d'une reine sur le même ligne
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
'test de la présence d'une reine dans une même ligne
'==========================================================
''Calcul du numéro de la première case de la ligne. occup est le numéro de la case occupée par la reine
result = occup - (occup Mod 8) + 1
For x = result To result + 7
'on ne teste pas la case ou on est
If x = occup Then GoTo Xplus
' Test si une case est occupée.si oui on change de ligne
If Not (Not pic(x).Picture) Then
MsgBox (" Reine ligne!!!!")
'on enlève l'image
pic(occup).Picture = Nothing 'on change de ligne
occup = occup + 8: result = occup - (occup Mod 8) + 1 ICI LE PB J'ai besoin de relancer la boucle avec de nouveaux paramètres
pic(occup).Picture = LoadPicture(App.Path & "\Reine.jpg") 'Affichage
GoTo Xplus ' on reteste
Else
End If
Xplus:
Next |
Suite au test ligne 7 si une reine est détectée on change de ligne.A ce moment là il faut de nouveau retester mais les paramètres qui définissent le for x de la boucle ont changé.
J'ai essayé de mettre l'étiquette Xplus avant la boucle en faisant un set x =nothing mais cela crée une erreur d'incompatibilité et cela ne décharge pas la pile du next.
Ma question est
Y a-t-il un moyen technique de réinitialiser la boucle.
En espérant ne pas avoir été trop brumeux et en vous remerciant de m'avoir consacré de votre temps.
Réinitialiser une boucle for en cours d'exécution
Merci de ta réponse DarkVader,
Effectivement j'ai modifié mon code et la nouvelle valeur x du compteur suite au test if est bien prise en compte
sauf que le nombre d'incrémentations détenu par Next ne change pas,
or dans mon test non seulement x est modifié mais aussi la valeur du nombre de boucles par la variable result .Comme tu as dit que la condition for n'est évaluée qu'une fois , je suppose que le pb vient de là.
Dois je revoir mon algo ou y a-t-il un moyen d'annuler la pile dans next ou de forcer la valeur de result dans la boucle.
Encore merci de ton aide
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 'test de la présence d'une reine dans une même ligne
'==========================================================
''Calcul du numéro de la première case de la ligne
result = occup - (occup Mod 8) + 1
For x = result To result + 7
Xplus:
'on ne teste pas la case ou on est
If x = occup Then GoTo Xplusplus
' Test si une case est occupée.si oui on change de ligne
If Not (Not pic(x).Picture) Then
MsgBox (" Reine ligne!!!!")
'on enlève l'image
pic(occup).Picture = Nothing 'on change de ligne ,on annule l'index
occup = occup + 8: result = occup - (occup Mod 8) + 1: x = occup - (occup Mod 8) + 1:
pic(occup).Picture = LoadPicture(App.Path & "\Reine.jpg") 'Affichage
GoTo Xplus ' on reteste
Else
End If
Xplusplus:
Next |
Réinitialiser une boucle for
Parfait
merci à tous les deux pour ces éclaircissements :D