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

VB.NET Discussion :

Le jeu du Pendu !


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut Le jeu du Pendu !
    Wassup guys !


    Je voudrais quelques conseil concernant le jeu du Pendu.

    En effet je veux le faire avec plusieurs boutons : A Z E R etc...

    Je ne veux pas taper ma proposition dans une textbox !

    Voici le debut de 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
       Private Sub BtnA_Click(sender As Object, e As EventArgs) Handles BtnA.Click
            Lettre = "A"
            Touche()
        End Sub
     
        Private Sub BtnZ_Click(sender As Object, e As EventArgs) Handles BtnZ.Click
            Lettre = "Z"
            Touche()
        End Sub
     
        Private Sub BtnE_Click(sender As Object, e As EventArgs) Handles BtnE.Click
            Lettre = "E"
            Touche()
        End Sub
     
     
    CA CONTINUE POUR TOUTE LES LETTRES !
     
     
    ...
    ...
    ...
     
     
     
     Private Sub Touche()
            For i = 1 To Nbdelettre
                LettreChoisis = Mid(Motchoisis, i, 1)
                If (LettreChoisis = Lettre) Then
                    Mid(MotTiret, (i * 2) - 1, 1) = Lettre
                    lblLemot.Text = MotTiret
     
                End If
            Next
        End Sub

    Voila, ce que je voudrais savoir c'est comment faire pour éviter ce spam de commande, on m'a parler de panel, comme quoi je devrais mettre mes bouton a l'interieur et gerer ceux ci avec leur index et récuperer le txt.

    Mais je ne vois pas du tout comment faire !

    Si quelqu'un pouvait m'aider !

    Thx !
    (J'espere mettre fait comprendre )

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    tu vas pas gagner des masses.

    Mais dans les grandes lignes:
    tu crées un Panel myPanalKey
    tu lui crées un event MyKeyPress(Char c,object sender)
    tu ajoutes une propriété PanelLetter
    soit en utilisant la property Name du panel ou plus simple tu utilises la propriété tag que tu setteras via l'interface.
    avec le Name ca donnera quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char PanelLetter
    {
    get {
    int panelNumber
    bool succed=Integer.TryParse(this.Name.ToLower().Replace("panel",""),panelNumber);
    if(succed) char (Code Ascii de A + panelNumber);
    else char(0);
    }
    }
    a l'init du panel tu sets le text de ton bouton avec PanelLetter

    lors du clique du bouton, tu déclenches l'event MyKeyPress(PanelLetter, btn)

    et tu n'as plus "qu'à" ajouter 26x ton panel et a t'abonner au myKeyPress event de chacun d'eux
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    Un exemple où tous les contrôles (26 boutons et le label servant à contenir le mot) sont créés au moment de l'exécution :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    Public Class Form1
     
        Private pMotATrouve As String = "INFORMATIQUE"
        Private lblTexte As Label
     
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'On déclare les lettres
            Dim alphabet As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
            'On crée 2 rangées de 13 boutons (26 en tout) qui contiendront les lettres
            Dim positionDepart As New Point(10, 100)        'Position du 1er bouton
            Dim ecartEntreBoutons As Integer = 10           'Espace entre les boutons
            Dim dimensionBouton As New Size(40, 40)         'Taille des boutons
            Dim compteur As Integer = 0                     'Compte les boutons créés
            Dim positionActuelle As Point = positionDepart  'Position du bouton en cours de création (dans la boucle)
            'C'est parti...
            For Each lettre As Char In alphabet
                'On crée
                Dim bouton As New Button
                'On lui affecte les propriétés
                With bouton
                    .Text = lettre
                    .Size = dimensionBouton
                    .Location = positionActuelle
                    'L'évènement Click sera géré par la procédure BoutonEnfonce
                    AddHandler bouton.Click, AddressOf BoutonEnfonce
                    'On ajoute le bouton créé à la Form
                    Controls.Add(bouton)
                End With
                'Position suivante...
                compteur += 1
                If compteur = 13 Then
                    positionActuelle = positionDepart
                    positionActuelle.Offset(0, dimensionBouton.Height + ecartEntreBoutons)
                Else
                    positionActuelle.Offset(dimensionBouton.Width + ecartEntreBoutons, 0)
                End If
            Next
            'On crée le label pour la réponse
            lblTexte = New Label
            With lblTexte
                .AutoSize = False
                .Font = New Font("Courier", 18.0!, FontStyle.Bold)
                .BorderStyle = BorderStyle.FixedSingle
                .Size = New Size(dimensionBouton.Width * 5 + ecartEntreBoutons * 4, dimensionBouton.Height)
                .Location = New Point(positionDepart.X + dimensionBouton.Width * 4 + ecartEntreBoutons * 3, positionDepart.Y - dimensionBouton.Height * 2)
                .TextAlign = ContentAlignment.MiddleCenter
                'On remplace le texte par un nombre de points égal au nombre de lettres du mot à trouver
                .Text = "..........................................".Substring(0, pMotATrouve.Length)
            End With
            'On ajoute le label à la Form
            Controls.Add(lblTexte)
        End Sub
     
        Private Sub BoutonEnfonce(ByVal sender As System.Object, ByVal e As System.EventArgs)
            'On récupère le Sender (bouton qui a été cliqué)
            Dim bouton As Button = DirectCast(sender, Button)
            Dim lettreEnfoncee As String = bouton.Text
            'Traitement
            If pMotATrouve.Contains(lettreEnfoncee) = True Then
                'La lettre est présente dans le mot
                Dim nouveauTexte As String = ""
                For id As Integer = 0 To pMotATrouve.Length - 1
                    Dim lettre As String = pMotATrouve.Substring(id, 1)
                    If lettre = lettreEnfoncee Then
                        nouveauTexte &= lettreEnfoncee
                    Else
                        nouveauTexte &= lblTexte.Text.Substring(id, 1)
                    End If
                Next
                lblTexte.Text = nouveauTexte
            Else
                'La lettre n'est pas présente dans le mot
                Beep()
            End If
            'On inhibe le bouton 
            bouton.Enabled = False
        End Sub
     
    End Class

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    Euh j'ai un doute... L'auteur de ce post ne programmerait-il en VB 6 ???
    ... contrôles indexés + absence de Handle dans les procédures gérant les évènements.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut
    Yooo


    Donc merci a vous pour ces codes, mais je pensais a quelque chose d'encore plus simple, mais apparement c'est impossible oO !

    Je programme en vb.net sur Visual Studio 2012 !

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Points : 206
    Points
    206
    Par défaut
    Tu peux faire plus simple :
    1) En créant "à la main" tous tes contrôles (boutons) dans la partie design (création). Comme tu avais commencé à le faire.
    2) En affectant la même procédure à l'évènement click de tous les boutons créés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Private Sub btnA_Click(sender As Object, e As EventArgs) Handles btnA.Click, btnB.Click, btnC.Click, etc...
            'On récupère ensuite le bouton qui a été cliqué de cette façon
            Dim boutonClique As Button = DirectCast(sender, Button)
            'Et on traite en fonction de la lettre qu'il contient
            Dim lettreContenue As String = boutonClique.Text
            '
            '
            '
        End Sub
    Au final, c'est plus simple (mais plus long) à réaliser.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut
    je vais rester sur mon idée je pense

    Mais merci quand même !

    Par contre je voudrais savoir comment desactiver mon bouton si l'erreur intervient (Lettre n'est pas compris dans le mot)

    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
     Private Sub Touche()
     
            Erreur = True
     
            For i = 1 To Nbdelettre
                LettreChoisis = Mid(Motchoisis, i, 1)
     
                If (LettreChoisis = Lettre) Then
                    Mid(MotTiret, (i * 2) - 1, 1) = Lettre
                    lblLemot.Text = MotTiret
                    Erreur = False
                Else
                    If (LettreChoisis <> Lettre And i = Nbdelettre And Erreur = True) Then
                        MsgBox("fail")
                        .Enabled = False
                    End If
                End If
            Next
     
     
        End Sub

    J'ai mon msgbox("fail") qui s'active quand je ne retrouve pas la lettre dans mon mot, et je voudrais que mon bouton se desactive avec un enabled = False.

    J'ai essayer Me.enabled = False, sauf que c'est tout le form qui se desactive ^^


    Je voudrais que ca le fasse sur le bouton ou je viens de cliqué !

    Merci d'avance !

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub btn_Click(sender As Object, e As EventArgs) Handles
    sender = le bouton
    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Button) sender.Enabled = False
    logiquement tu devrais désactiver le bouton à chaque fois pour pas qu'on propose 2x la même lettre

    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
     
    Private Sub Touche(char lettre, Bouton btn)
     
            Bool found = False 
            string motAAfficher = ""
            For Each (c As Char in motADecouvrir)
                If (c = lettre)
                    found = true
                    motAAfficher += lettre
               Else
                   motAAfficher += "-"
           Next 
           If(Not found) 
             MsgBox("fail") 
             btn.Enabled = False
           End if
     
        End Sub
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub btn_Click(sender As Object, e As EventArgs) 
        Char lettre = (Button) sender.Text(0)
        //tjs désactivé
        Touche(lettre)
        Button (sender).Enabled= False temps
        //sinon
        Touche(lettre, (Button) sender)
    End Sub
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 46
    Points
    46
    Par défaut
    Ok sauf que je fais comment pour le mettre dans mon code de ma fonction ?


    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
     LblErreur.Text = ""
            Erreur = True
     
            For i = 1 To Nbdelettre
                LettreChoisis = Mid(Motchoisis, i, 1)
     
                If (LettreChoisis = Lettre) Then
                    Mid(MotTiret, (i * 2) - 1, 1) = Lettre
                    lblLemot.Text = MotTiret
                    Erreur = False
                Else
                    If (LettreChoisis <> Lettre And i = Nbdelettre And Erreur = True) Then
                        Vie = Vie - 1
                        LblErreur.Text = "Cette lettre ne se trouve pas dans le mot !"
                    End If
                End If
            Next
     
            If (Vie = 0) Then
                MsgBox("FAAAIIIILLL")
                BtnJouer.Enabled = True
            End If
     
            LblVie.Text = "Nombre de vie restantes : " & Vie
            lblLemot.Left = (Me.Width / 2) - (lblLemot.Width / 2)
    Dans mon :

    If (LettreChoisis <> Lettre And i = Nbdelettre And Erreur = True)

    Mettre un (sender).enabled = False.

Discussions similaires

  1. Code en bourne shell du jeu Le "PENDU"
    Par piment dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 20/07/2007, 14h17
  2. Jeu Bonhomme pendu
    Par yinyann86 dans le forum Delphi
    Réponses: 11
    Dernier message: 14/11/2006, 17h03
  3. Le jeu du pendu.
    Par giggs dans le forum C
    Réponses: 5
    Dernier message: 31/10/2006, 13h40
  4. jeu du pendu
    Par krachik dans le forum Langage
    Réponses: 5
    Dernier message: 24/10/2006, 12h48
  5. Réponses: 4
    Dernier message: 24/03/2006, 13h54

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