Randomize
Dans visual studio.En n VB
J'utilise la fonction Randomize comme suit :
Or il arrive que TT prenne la même valeur 2 fois de Suite
Donc il ne ne se passe rien : les labels ne change pas.
Comment évité cela et que TT prenne une valeur différetente de la précédente à chaque clic sur command1.
Merci de m'éclairer !
J'utilise la fonction Randomize comme suit :
Sub command1_click Dim TT As Byte Randomize TT = Int((6 * Rnd) + 1) If TT = 1 Then Label1 = a + T1 + a2 + T2 Label2 = b + T3 + b2 + T2 Label3 = c + T3 + c2 + T1 + d Label4 = e + T2 + d2 + T3 Label5 = f + T2 + e2 + T1 Label6 = g + T1 + g + T3 ElseIf TT = 2 Then Label1 = a + T3 + a2 + T2 Label2 = b + T3 + b2 + T1 Label3 = c + T2 + c2 + T3 + d Label4 = e + T2 + d2 + T1 Label5 = f + T1 + e2 + T3 Label6 = g + T1 + g + T2 ETC..Jusquà TT=6 (T1,T2,T3,a,b,c,d,e,f a2,b2,c2,d2,e2,g sont des variables string)
Or il arrive que TT prenne la même valeur 2 fois de Suite
Donc il ne ne se passe rien : les labels ne change pas.
Comment évité cela et que TT prenne une valeur différetente de la précédente à chaque clic sur command1.
Merci de m'éclairer !
5 réponses
-
je ne prendrais pas le chiffre répéter en compte
mais en vb ça donne quoi ?-
ModérateurEt comment ferais pour ne pas le prendre en compte ?
En gros...
1 - Tu jettes le Dé....
2 - Tu mémorise sa valeur...
3 - Tu jettes à nouveau le Dé ... tu le compares à la valeur précédente...
Si identique.. .... et retour à l'étape 1
Si différent.. tu fais ce que tu as à faire... et retour à l'étape 1 -
-
-
1 Dim TT As Byte
Randomize ' La ligne if.....1 n'est pas appliquée au premier click sur command1
( ' Le Form vient d'apparaitre avec des labels prédéterminés)
' Z n'a donc pas encore de valeur
TT = Int((6 * Rnd) + 1) ' Cette ligne n'est donc appliquée qu'au deuxième click.
If TT = Z Then GoTo 1 'Z a pris alors une valeur.
Z = TT
Je pense que c'est l'explication.
En tout cas ça marche
Qu'en penses-tu ?! -
ModérateurBonjour,
Comme on connais les valeurs, c'est simple.
Exemple vite fait :Sub essaialea() Dim List(1 To 6) As Integer, Resultat(1 To 6) Dim Count As Integer Dim i As Integer, n As Integer, j As Integer 'INITIALISATION VARIABLES For i = 1 To 6 List(i) = i Next Count = 6 Randomize Timer 'TRAITEMENT For n = 0 To Count - 1 i = Int(1 + (Count - n) * Rnd) j = j + 1 Resultat(j) = List(i) List(i) = List(Count - n) Next 'RESTITUTION Dim msg As String For i = 1 To 6 msg = msg & " Résultat(" & i & ") : " & Resultat(i) & vbCrLf Next MsgBox msg End Sub
-
Contributeurbonjour,
c'est un peu comme quand tu lances un dé: comment éviter de retomber sur une face où il est déjà tombé?
dans quel contexte fais-tu ce travail? que veux-tu réellement obtenir?
ne suffit-il pas de cliquer quelques fois de plus? -
Il s'agit de modifier des labels ( contenant chacun un vers) en fonction du tirage aléatoire.
Evidemment je peux clicker plusieurs fois mais ça donne un sentiment de blocage et d'imperfection.(Il s'agit de "poésies")
C'est pas possible de repatrir à chaque click sur une valeur différente de la précédente ?