IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[Débutant] - Empêcher le tirage de chiffres identiques


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Par défaut [Débutant] - Empêcher le tirage de chiffres identiques
    Bonjour,

    Après de longues recherches sans un indice pouvant me guider vers la solution, je vous expose mon problème.

    Je suis entrain de créer un programme simulant un tirage de loto, il faut donc que je fasse en sorte que chaque numéro tiré soit différent, voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    Dim Des(4) As Button
     
    Private Sub btnJeu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSpel.Click
            Dim i, j As Integer
     
            For i = 0 To UBound(Des)
                Des(i).Text = CStr(Int(Rnd() * 10))
            Next i
     
        End Sub
     
     
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Randomize()
            Dim i, j, x, y, longueur, largeur As Integer
            x = 360
            y = 95
            longueur = 50
            largeur = 50
     
            For i = 0 To 4
                Des(i) = New Button()
                Des(i).Size = New Size(longueur, largeur)
                Des(i).Location = New Point(x, y)
     
                Me.Controls.Add(Des(i))
                x = x + 50
     
            Next i
     
        End Sub
     
    End Class
    Les boutons sont créés dans une matrice dynamique.

    J'ai essayé de résoudre ce problème avec diverses variantes de If-End If, mais sans succès. Merci d'avance pour vos précieux conseils!

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    391
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Décembre 2005
    Messages : 391
    Par défaut
    tu peux les stocker dans une arraylist


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
                ArrayList tab = new ArrayList();
                tab.Add(6);
                if (tab.Contains(6) = false)
                     tab.Add(6);
    tab.Contains renvoi true si la donnee qu on veut y inserer est deja presente

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Par défaut
    Merci pour ta réponse

    J'ai créé une array comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim tableau(4) As ArrayList
    Mais le problème c'est que mon VB.Net me dit que l'on ne peut utiliser ni .Add ni Contains avec Arraylist...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 68
    Par défaut
    Voilà une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     Public Class Boules
            Private TirageEnCours As Integer = 0
            Dim Val As Integer = CInt(DateTime.Now.Millisecond)
            Dim Nombre As New Random(Val)
     
            Public Function Tirage() As Integer
                TirageEnCours += 1
                Return Nombre.Next(1, 49 - TirageEnCours)
            End Function
     
          End Class
     
        Dim Des(4) As Button
     
        Private Sub btnJeu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim MonJeu As New Boules
            Dim i As Integer
            For i = 0 To UBound(Des)
                Des(i).Text = MonJeu.Tirage.ToString
            Next i
        End Sub

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Par défaut
    Merci beaucoup pour votre aide

    Malheureusement, j'obtiens toujours un tirage du type: 20-4-39-20-5 avec deux chiffres identiques.

    C'est vrai que je n'avais pas envisagé de carrément créer une classe et c'est une idée intéressante. Si j'ai bien compris cette partie du code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private TirageEnCours As Integer = 0
            Dim Val As Integer = CInt(DateTime.Now.Millisecond)
            Dim Nombre As New Random(Val)
    ...est pour calculer un chiffre aléatoire et celle ci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Public Function Tirage() As Integer
                Return Nombre.Next(1, 49 - TirageEnCours)
                TirageEnCours += 1
            End Function
    ...est chargée de détecter un numéro déjà sorti

    Est-ce que ça pourrait marcher si j'essaie de mettre les chiffres tirés au hasard dans un tableau de Nombre, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim i, Nombre(49) As Integer
    i = 50
    Nombre(49) = CStr(Int(Rnd() * i))
    Ce code ne fonctionne pas mais c'est pour préciser ma pensée.


  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 68
    Par défaut
    J'ai à tort simplifié ma première version que revoilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
       Public Class Boules
            Private TirageEnCours As Integer = 0 'Pour déterminer le nombre de boules tirées
            Private Boules As New List(Of Integer)
            Dim Val As Integer = CInt(DateTime.Now.Millisecond) 'Pour générer un nombre différent à chaque série
            Dim Nombre As New Random(Val)
     
            Public Sub New()
                For i As Integer = 1 To 49 'Création de la liste
                    Boules.Add(i)
                Next
            End Sub
     
            Public Function Tirage() As Integer
                Dim Aléatoire As Integer = Nombre.Next(1, 49 - TirageEnCours) '1 boule de moins à chaque tirage
                TirageEnCours += 1
                Dim Boule As Integer = Boules(Aléatoire - 1) '-1 (base 0)
                Boules.RemoveAt(Aléatoire - 1) 'Enlève la boule tirée de la liste
                Return Boule
            End Function
        End Class
        Dim Des(4) As Button
        Dim MyFont As New Font("Arial", 16, FontStyle.Bold)
     
        Private Sub btnJeu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim MonJeu As New Boules
            Dim i As Integer
            For i = 0 To UBound(Des)
                Des(i).Text = MonJeu.Tirage.ToString
                Des(i).Font = MyFont
            Next i
        End Sub

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Par défaut
    Voilà les modifs que j'ai essayé de faire mais ça ne marche toujours pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      For i = 0 To UBound(Des)
                For j = 0 To UBound(NbreDansArray)
                    Des(i).Text = CStr(Int(Rnd() * NbreDansArray(j)))
                Next j
            Next i
    Il faut noter que NbreDansArray(9) peut contenir 10 chiffres. J'ai donc donné une valeur à chaque couche du vecteur (ex: NbreDansArray(0) =0...NbreDansArray(9)=9).

    Par cette méthode j'ai essayé de mettre les chiffres aléatoires dans le tableau afin de mieux pouvoir les contrôler et ainsi éviter qu'ils se répètent lors du tirage .

    Qu'en pensez-vous ?


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. REcherche chiffre identique
    Par lg022 dans le forum Excel
    Réponses: 4
    Dernier message: 16/05/2008, 09h49
  2. [Débutant][XSLT] Gérer des tags XML identiques
    Par Michel_be dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 19/09/2007, 14h57
  3. [Débutant]empécher redimensionnement d'une fenètre
    Par yottatiger dans le forum GLUT
    Réponses: 1
    Dernier message: 11/06/2006, 01h43
  4. Réponses: 12
    Dernier message: 05/08/2005, 15h32
  5. [Débutant] Empêcher un process d'être "iconisé"
    Par kelebrindae dans le forum MFC
    Réponses: 10
    Dernier message: 03/03/2005, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo