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 :

Jeu de Memoire


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut Jeu de Memoire
    Bonjour à tous,
    Voila je suis débutant et j'ai entrepris de réaliser un jeu de mémoire. Mon problème et d'écrire un algorithme qui contrôlera les cases des tableaux:
    il faudrait que lorsque je clique une première fois, puis une seconde fois et que quand les deux cases soit de la même couleurs , ces deux cases restent activent et quand les couleurs ne sont pas pareils que les cases se désactives. Après plusieurs jours de recherchent je n'arrive pas à avancer.
    Merci à vous.
    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    Public Class Form1
    Dim tableau1(5, 5) As Button
    Dim tableau2(5, 5) As Button
    Dim i As Integer
    Dim j As Integer
     
     
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.Size = New Size(700, 600)
     
    For i As Integer = 0 To 5
    For j As Integer = 0 To 5
    tableau1(i, j) = New Button
    tableau1(i, j).Visible = True
    Me.Controls.Add(tableau1(i, j))
     
    tableau1(i, j).Tag = i.ToString + ";" + j.ToString
     
    AddHandler tableau1(i, j).Click, AddressOf tableau_Click
     
    tableau1(i, j).Top = i * 100
    tableau1(i, j).Left = j * 100
    tableau1(i, j).Width = 90
    tableau1(i, j).Height = 90
    tableau1(i, j).BackColor = Color.Transparent
    Next
    Next
     
    For i As Integer = 0 To 5
    For j As Integer = 0 To 5
     
    tableau2(i, j) = New Button
     
    tableau2(i, j).Visible = True
    Me.Controls.Add(tableau2(i, j))
     
    tableau2(i, j).Top = i * 100
    tableau2(i, j).Left = j * 100
    tableau2(i, j).Width = 90
    tableau2(i, j).Height = 90
     
     
    Next
    Next
    tableau2(0, 0).BackColor = Color.Yellow
    tableau2(0, 1).BackColor = Color.Yellow
    tableau2(0, 2).BackColor = Color.DarkBlue
    tableau2(0, 3).BackColor = Color.DarkBlue
    tableau2(0, 4).BackColor = Color.AliceBlue
    tableau2(1, 0).BackColor = Color.DarkMagenta
    tableau2(1, 1).BackColor = Color.DarkMagenta
    tableau2(1, 2).BackColor = Color.Indigo
    tableau2(1, 3).BackColor = Color.Indigo
    tableau2(1, 4).BackColor = Color.AliceBlue
    tableau2(1, 5).BackColor = Color.DarkTurquoise
    tableau2(2, 0).BackColor = Color.Maroon
    tableau2(2, 1).BackColor = Color.Maroon
    tableau2(2, 2).BackColor = Color.Orange
    tableau2(2, 3).BackColor = Color.Orange
    tableau2(2, 4).BackColor = Color.Azure
    tableau2(2, 5).BackColor = Color.DarkSeaGreen
    tableau2(3, 0).BackColor = Color.Black
    tableau2(3, 1).BackColor = Color.Black
    tableau2(3, 2).BackColor = Color.Turquoise
    tableau2(3, 3).BackColor = Color.Turquoise
    tableau2(3, 4).BackColor = Color.Azure
    tableau2(3, 5).BackColor = Color.DarkTurquoise
    tableau2(4, 0).BackColor = Color.Beige
    tableau2(4, 1).BackColor = Color.Beige
    tableau2(4, 2).BackColor = Color.BlanchedAlmond
    tableau2(4, 3).BackColor = Color.BlanchedAlmond
    tableau2(4, 4).BackColor = Color.DarkTurquoise
    tableau2(4, 5).BackColor = Color.AliceBlue
    tableau2(5, 0).BackColor = Color.DarkSalmon
    tableau2(5, 1).BackColor = Color.DarkSalmon
    tableau2(5, 2).BackColor = Color.DeepSkyBlue
    tableau2(5, 3).BackColor = Color.DeepSkyBlue
    tableau2(5, 4).BackColor = Color.Goldenrod
    tableau2(5, 5).BackColor = Color.Goldenrod
     
    For i As Integer = 0 To 5
    For j As Integer = 0 To 5
    Randomize()
    Dim value1 As Integer = CInt(Int((6 * Rnd())))
    Dim value2 As Integer = CInt(Int((6 * Rnd())))
     
    Dim button1 As Color = tableau2(i, j).BackColor
    tableau2(i, j).BackColor = tableau2(value1, value2).BackColor
    tableau2(value1, value2).BackColor = button1
     
    Next
    Next
     
    End Sub
    Private Sub tableau_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim coord() As String
     
    coord = Split(sender.tag, ";")
     
    i = CType(coord(0), Integer)
    j = CType(coord(1), Integer)
     
     
    'Debug.WriteLine("Touche activée" )
     
    If tableau1(i, j).BackColor.Equals(Color.Transparent) Then
     
    tableau1(i, j).Visible = False
    End If
     
    End Sub
     
    Private Sub JOUER_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles JOUER.Click
    For i As Integer = 0 To 5
    For j As Integer = 0 To 5
    Randomize()
    Dim value1 As Integer = CInt(Int((6 * Rnd())))
    Dim value2 As Integer = CInt(Int((6 * Rnd())))
     
    Dim button1 As Color = tableau2(i, j).BackColor
    tableau2(i, j).BackColor = tableau2(value1, value2).BackColor
    tableau2(value1, value2).BackColor = button1
     
    Next
    Next
     
    End Sub
    End Class

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    quel est le problème exactement ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    En faites le joueur click une première fois sur une case du tableau pour afficher la couleur de celle-ci, puis une deuxième fois sur une autres case. Mon problème réside après ceci. Je n'arrive pas à créer une opération qui me permetrai de vérifier si les couleurs des deux cases sont identique, pour ensuite les laissés afficher ou les rendrent de nouveaux invisibles dans le cas contraire. Merci pour vos réponses.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    il faut enregistrer où était le premier clic
    soit en gardant une référence vers le bouton (variable as Button)
    soit en gardant les coordonnées (system.Drawing.point par exemple)

    il faut aussi avoir une variable pour savoir si on en a cliqué 0 ou 1
    et dans ta sub de clic, si on est à 0, on passe à 1 et on affiche la couleur
    si on est à 1, on test si la couleur est bonne ou non puis on remet à 0
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    merci je vais essayer.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut jeu
    Bonjour, je rencontre quelques problèmes dans mon programme car quelques lignes de codes ne semble pas être juste. J'essaye de rendre invisible mon bouton JOUER tant que toutes les couleurs du jeu ne sont pas toutes trouvés. Aussi je n'arrive pas à rendre visible le tableau1 (gris) quand j'appuie sur le bouton JOUER (c'est à dire réinitialiser le jeu). Merci pour vôtre aide.

    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    Public Class Form1
        Inherits System.Windows.Forms.Form
        Dim tableau1(5, 5) As Button
        Dim tableau2(5, 5) As Button
        Dim i, j, k, l As Integer
        Dim ibouton1, jbouton1, ibouton2, jbouton2 As Integer
        Dim clicbouton2 As Boolean = False
        Dim couleur As Boolean = True
    
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Size = New Size(850, 700)
            Me.StartPosition = FormStartPosition.CenterScreen
    
            For i As Integer = 0 To 5
                For j As Integer = 0 To 5
                    tableau1(i, j) = New Button
                    tableau1(i, j).Visible = True
                    Me.Controls.Add(tableau1(i, j))
    
                    tableau1(i, j).Tag = i.ToString + ";" + j.ToString
    
                    AddHandler tableau1(i, j).Click, AddressOf tableau_Click
    
                    tableau1(i, j).Top = i * 100
                    tableau1(i, j).Left = j * 100
                    tableau1(i, j).Width = 90
                    tableau1(i, j).Height = 90
                    tableau1(i, j).BackColor = Color.Gray
                Next
            Next
    
            For i As Integer = 0 To 5
                For j As Integer = 0 To 5
    
                    tableau2(i, j) = New Button
    
                    tableau2(i, j).Visible = True
                    Me.Controls.Add(tableau2(i, j))
    
                    tableau2(i, j).Top = i * 100
                    tableau2(i, j).Left = j * 100
                    tableau2(i, j).Width = 90
                    tableau2(i, j).Height = 90
    
    
                Next
            Next
            tableau2(0, 0).BackColor = Color.Yellow
            tableau2(0, 1).BackColor = Color.Yellow
            tableau2(0, 2).BackColor = Color.Blue
            tableau2(0, 3).BackColor = Color.Blue
            tableau2(0, 4).BackColor = Color.Red
            tableau2(0, 5).BackColor = Color.Red
            tableau2(1, 0).BackColor = Color.White
            tableau2(1, 1).BackColor = Color.White
            tableau2(1, 2).BackColor = Color.Black
            tableau2(1, 3).BackColor = Color.Black
            tableau2(1, 4).BackColor = Color.DarkMagenta
            tableau2(1, 5).BackColor = Color.DarkMagenta
            tableau2(2, 0).BackColor = Color.Maroon
            tableau2(2, 1).BackColor = Color.Maroon
            tableau2(2, 2).BackColor = Color.Orange
            tableau2(2, 3).BackColor = Color.Orange
            tableau2(2, 4).BackColor = Color.Cyan
            tableau2(2, 5).BackColor = Color.Cyan
            tableau2(3, 0).BackColor = Color.Green
            tableau2(3, 1).BackColor = Color.Green
            tableau2(3, 2).BackColor = Color.HotPink
            tableau2(3, 3).BackColor = Color.HotPink
            tableau2(3, 4).BackColor = Color.DarkKhaki
            tableau2(3, 5).BackColor = Color.DarkKhaki
            tableau2(4, 0).BackColor = Color.Violet
            tableau2(4, 1).BackColor = Color.Violet
            tableau2(4, 2).BackColor = Color.DarkGray
            tableau2(4, 3).BackColor = Color.DarkGray
            tableau2(4, 4).BackColor = Color.DarkRed
            tableau2(4, 5).BackColor = Color.DarkRed
            tableau2(5, 0).BackColor = Color.Honeydew
            tableau2(5, 1).BackColor = Color.Honeydew
            tableau2(5, 2).BackColor = Color.DeepSkyBlue
            tableau2(5, 3).BackColor = Color.DeepSkyBlue
            tableau2(5, 4).BackColor = Color.Fuchsia
            tableau2(5, 5).BackColor = Color.Fuchsia
            For i As Integer = 0 To 5
                For j As Integer = 0 To 5
                    Randomize()
                    Dim value1 As Integer = CInt(Int((6 * Rnd())))
                    Dim value2 As Integer = CInt(Int((6 * Rnd())))
    
                    Dim button1 As Color = tableau2(i, j).BackColor
                    tableau2(i, j).BackColor = tableau2(value1, value2).BackColor
                    tableau2(value1, value2).BackColor = button1
    
                Next
            Next
            JOUER.Visible = False
            If couleur = True Then
                JOUER.Visible = True
            End If
        End Sub
    
        Private Sub tableau_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim coord() As String
            ' Variable que restera à True si toutes
            ' les couleurs ont été trouvées
    
    
            coord = Split(sender.tag, ";")
    
            ' Si c'est le premier bouton qu'on clic
            If clicbouton2 = False Then
                ' On récupère les coordonnées
                ibouton1 = CInt(coord(0))
                jbouton1 = CInt(coord(1))
    
                ' On rend invisible le bouton gris
                tableau1(ibouton1, jbouton1).Visible = False
    
                ' On met cette variable à True pour dire que le
                ' prochain clic sera celui du 2° bouton
                clicbouton2 = True
    
                ' C'est le clic sur le deuxième bouton
            ElseIf clicbouton2 = True Then
    
                ' Avec les 2 boucles For, on désactive
                ' le clic sur un autre bouton jusqu'à ce
                ' que les boutons soit vérifiés et correct
                ' soit qu'ils sont pas correct et remis en
                ' gris
                For nb1 As Integer = 0 To 5
                    For nb2 As Integer = 0 To 5
                        tableau1(nb1, nb2).Enabled = False
                    Next
                Next
                ' On récupère les coordonnées
                ibouton2 = CInt(coord(0))
                jbouton2 = CInt(coord(1))
    
                ' On rend invisible le bouton gris
                tableau1(ibouton2, jbouton2).Visible = False
    
                ' Si les couleurs entre le 1° bouton cliqué et le 2° bouton sont identiques
                If tableau2(ibouton1, jbouton1).BackColor = tableau2(ibouton2, jbouton2).BackColor Then
                    ' On ne fait rien
                    ' On remet juste clicbouton2 à False
                    ' pour dire que le prochain clic sera de
                    ' nouveau le 1° bouton
                    clicbouton2 = False
                Else
                    ' Les couleurs ne sont pas identiques
    
                    ' Création d'une attente de 2 secondes
                    hbwait(500)
    
                    ' On affiche de nouveau les 2 boutons gris
                    tableau1(ibouton1, jbouton1).Visible = True
                    tableau1(ibouton2, jbouton2).Visible = True
    
                    ' On remet juste clicbouton2 à False
                    ' pour dire que le prochain clic sera de
                    ' nouveau le 1° bouton
                    clicbouton2 = False
                End If
            End If
    
            ' Avec les 2 boucles For, on réactive
            ' le clic sur un autre bouton
            For nb1 As Integer = 0 To 5
                For nb2 As Integer = 0 To 5
                    tableau1(nb1, nb2).Enabled = True
                Next
            Next
    
            ' Avec ces 2 boucles, on teste si toutes les couleurs
            ' ont été trouvées si ce n'est pas le cas, la variable
            ' colorsfound passe à False
            For nb1 As Integer = 0 To 3
                For nb2 As Integer = 0 To 3
                    If tableau1(nb1, nb2).Visible = True Then
                        couleur = False
                    End If
                Next
            Next
    
            If couleur = True Then
                MsgBox("Félicitation, vous avez gagné!")
            End If
    
        End Sub
    
        Friend Sub hbwait(ByVal ms_to_wait As Long)
            Dim endwait As Double
            endwait = Environment.TickCount + ms_to_wait
            While Environment.TickCount < endwait
                System.Threading.Thread.Sleep(1)
                Application.DoEvents()
            End While
        End Sub
    
        Private Sub JOUER_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles JOUER.Click
            For i As Integer = 0 To 5
                For j As Integer = 0 To 5
                    Randomize()
                    Dim value1 As Integer = CInt(Int((6 * Rnd())))
                    Dim value2 As Integer = CInt(Int((6 * Rnd())))
    
                    Dim button1 As Color = tableau2(i, j).BackColor
                    tableau2(i, j).BackColor = tableau2(value1, value2).BackColor
                    tableau2(value1, value2).BackColor = button1
    
                Next
            Next
            If couleur = True Then
                tableau2(i, j).Visible = False
            End If
        End Sub
    End Class

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    un peu de mal à m'y retrouver dans ton code, pourtant c'est pas trop mal, y a des commentaires

    un conseil au passage, les controles, il vaut mieux les préfixer pour savoir ce que c'est
    en l'occurence JOUER, il serait de l'appeler BTNjouer, comme ca on sait que c'est un bouton (LBL pour les labels, TXT CHK LST etc...)



    sinon je te propose à peu près la même chose mais ca utilise un peu plus le framework, et les avantages de la programmation orientée objet :


    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
     
    Public Class Form1
     
    ' variables de la classe
     
        Private _TLP As New TableLayoutPanel ' un tableau 
        Private _ButtonCollection As New System.Collections.Generic.List(Of ButtonMemory)
        Private _b1 As ButtonMemory
        Private _nbTrouves As Integer
     
     
    ' au chargement de la fenêtre
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Randomize() ' mélange les nombres "aléatoires"
     
            ' on place le TLP pour qu'il prenne toute la page en laissant le haut vide pour les boutons
            _TLP.Top = 100
            _TLP.Left = 10
            _TLP.Width = Me.Width - 30
            _TLP.Height = Me.Height - 150
     
     
            ' on ancre le TLP (agrandir la fenetre fait s'agrandir tout ce qui est dessus)
            _TLP.Anchor = AnchorStyles.Top Or AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.Right
     
            _TLP.Visible = False ' on attend qu'on demande de démarrer la partie pour l'afficher
     
            ' on pose le TLP sur la fenetre
            Me.Controls.Add(_TLP)
        End Sub
     
     
     
    ' sert à créer le nombre de case et les boutons dedans
        Public Sub CreerBoutonsCouleurs(ByVal NombreLargeur As Integer, ByVal NombreHauteur As Integer)
            _ButtonCollection.Clear()
     
           ' _TLP.ColumnCount = NombreLargeur
            For i As Integer = 0 To NombreLargeur - 1
                _TLP.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(SizeType.Percent, 100))
            Next
            _TLP.RowCount = NombreHauteur
            For i As Integer = 0 To NombreHauteur - 1
                _TLP.RowStyles.Add(New System.Windows.Forms.RowStyle(SizeType.Percent, 100))
            Next
     
            For x As Integer = 0 To NombreLargeur - 1 '  ici on va créer x boutons, qu'on mets dans 
                For y As Integer = 0 To NombreHauteur - 1
                    Dim b As New ButtonMemory
                    _ButtonCollection.Add(b)
                    AddHandler b.Click, AddressOf GestionRetournement
                    _TLP.SetColumn(b, x)
                    _TLP.SetRow(b, y)
                    _TLP.Controls.Add(b)
                Next
            Next
     
     
            _TLP.Visible = True
        End Sub
     
     
     
     
        Private Sub JOUER_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNJouer.Click
            CreerBoutonsCouleurs(6, 4)
            AttribuerCouleurs()
            _nbTrouves = 0
            _b1 = Nothing
            BTNJouer.Visible = False
        End Sub
     
     
     
        Private Sub AttribuerCouleurs()
            Dim nbAlteatoire As Integer
            Dim b As ButtonMemory
            'on mélange la collection de boutons
            For i As Integer = 0 To 1000 'on fait 1000 déplacement d'ordre
                nbAlteatoire = CInt(Rnd() * (_ButtonCollection.Count - 1))
     
                b = _ButtonCollection(nbAlteatoire)
                _ButtonCollection.Remove(b) ' on retire le bouton de la collection à l'index où il est
                _ButtonCollection.Add(b) ' et on le remets dans la collection mais à la fin
            Next
     
     
            'et on attribue les couleurs
            For i As Integer = 0 To _ButtonCollection.Count - 1 Step 2
                _ButtonCollection(i).CouleurAssociée = Couleurs.GetListeDesCouleurs(i \ 2)
                _ButtonCollection(i + 1).CouleurAssociée = Couleurs.GetListeDesCouleurs(i \ 2)
            Next
        End Sub
     
     
     
     
     
        Private Sub GestionRetournement(ByVal sender As Object, ByVal e As System.EventArgs)
            If _b1 Is Nothing Then ' si b1 y a rien dedans, ca veut dire que 0 sont retournés, on en retourne donc un et on garde un lien vers lui
                _b1 = DirectCast(sender, ButtonMemory)
                _b1.Etat = ButtonMemory.EtatCase.retourné
                Exit Sub
            End If
     
            'à partir de là, ca veut dire que un bouton est retourné
            Dim b2 As ButtonMemory = DirectCast(sender, ButtonMemory)
            b2.Etat = ButtonMemory.EtatCase.retourné
     
            'on montre pendant 1 seconde et on gèle l'appli au passage
            System.Windows.Forms.Application.DoEvents() ' pour éviter le problème d'affichage que b2 est pas retourné et qu'on freeze avec .sleep
            System.Threading.Thread.Sleep(1000)
     
            If b2.CouleurAssociée = _b1.CouleurAssociée Then
                _b1.Enabled = False
                b2.Enabled = False
                _nbTrouves += 2
                If _nbTrouves = _ButtonCollection.Count Then
                    Me.BTNJouer.Visible = True
                End If
            Else
                _b1.Etat = ButtonMemory.EtatCase.caché
                b2.Etat = ButtonMemory.EtatCase.caché
            End If
     
            _b1 = Nothing
        End Sub
     
    End Class
     
     
     
     
     
     
     
     
     
     
     
     
    Public Class ButtonMemory
        Inherits Button
     
        Public Sub New()
            Me.Text = ""
            Me.BackColor = Color.Gray
            Me.Dock = DockStyle.Fill
        End Sub
     
        Public Enum EtatCase
            caché = 0
            retourné = 1
        End Enum
     
        Private _CouleurAssociée As System.Drawing.Color
        Public Property CouleurAssociée() As System.Drawing.Color
            Get
                Return _CouleurAssociée
            End Get
            Set(ByVal value As System.Drawing.Color)
                _CouleurAssociée = value
            End Set
        End Property
     
        Private _Etat As EtatCase
        Public Property Etat() As EtatCase
            Get
                Return _Etat
            End Get
            Set(ByVal value As EtatCase)
                _Etat = value
                Select Case _Etat
                    Case EtatCase.caché
                        Me.BackColor = Color.Gray
                    Case EtatCase.retourné
                        Me.BackColor = _CouleurAssociée
                End Select
            End Set
        End Property
     
    End Class
     
     
     
     
     
     
     
     
    Public Class Couleurs
     
     
        Private Shared _ListeDesCouleurs As New System.Collections.Generic.List(Of System.Drawing.Color)
     
        Shared Sub New()
            _ListeDesCouleurs.Add(Color.Blue)
            _ListeDesCouleurs.Add(Color.Red)
            _ListeDesCouleurs.Add(Color.Green)
            _ListeDesCouleurs.Add(Color.Yellow)
            _ListeDesCouleurs.Add(Color.White)
            _ListeDesCouleurs.Add(Color.Black)
            _ListeDesCouleurs.Add(Color.Orange)
            _ListeDesCouleurs.Add(Color.Cyan)
            _ListeDesCouleurs.Add(Color.DarkBlue)
            _ListeDesCouleurs.Add(Color.Pink)
            _ListeDesCouleurs.Add(Color.Maroon)
            _ListeDesCouleurs.Add(Color.DarkGreen)
            _ListeDesCouleurs.Add(Color.DarkOrange)
            _ListeDesCouleurs.Add(Color.Wheat)
            _ListeDesCouleurs.Add(Color.Gold)
        End Sub
     
        Public Shared Function GetListeDesCouleurs() As System.Collections.Generic.List(Of System.Drawing.Color)
            Return _ListeDesCouleurs
        End Function
     
     
     
     
    End Class


    ce code n'est pas totalement fini, il manque des vérifications, et il y a plusieurs choses qui peuvent être améliorées ou ajoutées
    comme un compteur de tentatives

    la sub CreerBoutonsCouleurs demande en paramètre le nombre de cases, il serait donc par exemple bien de mettre 2 NumericUpDown sur la fenetre pour que l'utilisateur choisissent
    il faudrait aussi que cette sub vérifie que le nombre de cases est pair ^^

    je n'ai mis que 15 couleurs donc ca peut gérer 30 cases, il faudrait donc vérifier qu'on en demande pas plus à la sub CreerBoutonsCouleurs


    pour les cases, on ne s'embetent pas à calculer des coordonnées, ca peut se faire tout seul, le TLP, les ancrages, le dockage c'est bien pratique tout ca


    j'ai aussi créé une classe ButtonMemory qui permet de rajouter des propriétés à un controle existant, en l'occurence la couleur cachée

    System.Threading.Thread.Sleep(1000) arrete l'appli pendant 1000ms (=1s)
    un timer serait peut etre plus adapté, mais demande aussi plus de code (par exemple une variable _b2, si _b1 et 2 ne valent pas nothing, on ne retourne rien, on exit sub, et à la fin du timer, on cache b1 et 2 et on les remets à nothing

    quand tout est trouvé, normalement ca ré-affiche bien le bouton de start, donc ca pourrait aussi te donner une idée ce qu'il te manquait, par contre il manque un peu de code ici et là pour qu'on puisse refaire une partie (détruire les boutons, les cases avant de les reconstruires par exemple)

    j'espère que tu vas comprendre le code et qu'il t'aideras à assimiler certaines choses en .NET, et si t'as des questions n'hésite pas


    (et au passage, le forum a une balise pour que le code soit lisible)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    Merci beaucoup pour vôtre aide et désolé pour les balises (je n'ai pas fais attention).

Discussions similaires

  1. Gestion de la memoire pour un petit jeu
    Par franck06 dans le forum Langage
    Réponses: 15
    Dernier message: 11/07/2008, 11h25
  2. [debutant] jeu avec creation de processus et partage memoire
    Par cbv38 dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 01/12/2005, 17h39
  3. gestionnaire de memoire
    Par elone dans le forum C
    Réponses: 2
    Dernier message: 23/01/2003, 00h31
  4. récupérer la memoire et tableau dynamique
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 06/01/2003, 08h02
  5. Une déclaration pour la survie du jeu vidéo en France
    Par Freakazoid dans le forum DirectX
    Réponses: 1
    Dernier message: 30/10/2002, 14h31

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