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

Macros et VBA Excel Discussion :

Création d'un jeu Memory en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut Création d'un jeu Memory en VBA
    Bonjour à tous,

    Je suis étudiant et notre professeur d'informatique nous a donné un travail à faire comme indiqué dans l'intitulé, nous devons créer un jeux "MEMORY".

    Le but du jeu est de mémoriser un carré (6x6) comportant des cases de couleurs (Jaune, Vert, Bleu et Rouge) qui sont générées aléatoirement, qui apparaissent 5 secondes; après ces 5 secondes un grille neuve apparaît et il faut reconstituer la grille en utilisant des boutons qui rempliront la ou les cases sélectionnées.

    Règles du jeu:
    - Pour commencer à jouer cliquez sur le bouton "JOUER", puis sur le bouton oui.
    - Les cases de la grille se remplissent avec les 4 couleurs
    - Elles restent affichées 5 secondes, à vous de les mémoriser, après ces 5 secondes elle redeviennent blanches.
    - Vous devez alors vous positionner dans une case ou plusieurs puis cliquer sur le bouton de la couleur qui vous semble être la bonne.
    - Une fois que vous avez finit (toutes les cases ne doivent pas forcement être remplies si la difficulté est trop grande pour vous) vous devez cliquer sur le bouton "RÉSULTATS" pour afficher votre score et le comparer au meilleur résultat qui reste toujours affiché


    AIDES/CONTRAINTES:
    - Un bouton "JOUER" genère une grille de 36 cases colorées aléatoirement de 4 couleurs (ROUGE, BLEU, VERT et JAUNE)
    - La grille reste visible 5 secondes, il faut la re-créer avec les boutons de chaque couleur qui recolore la ou les cases.
    - Le meilleur score du fichier reste afficher au fil des parties
    - Le bouton jouer doit déclancher une alerte de type "Voulez vous commencer une nouvelle partie?" avec un bouton oui qui recommence une nouvelle partie aléatoire et un bouton non qui laisse la partie en cour se dérouler
    - Un bouton résultat doit être présent
    - Le joueur ne peut modifier que les 36 cellules à l'aide des boutons, tout le reste doit être protégé.
    - Le score de la partie doit être présent (en début de partie la cellule est vide)
    - La présentation du jeux est libre (fond forme taille des cases de la grille, taille des boutons)
    - Les règles du jeu doivent être affichées en bas du jeu.

    Après une semaine de panique devant ma fenêtre Excel un ami m'a conseillé de demander de l'aide sur un forum, je m'en remet donc à vos connaissances

    Je précise que mon niveau de VBA est celui d'un novice.


    Si mon post n'est pas complet et que vous souhaitez avoir des informations complémentaires je me tiens à votre disposition dans la limite de mes connaissances.
    Je vous remercie d'avance

    Cordialement.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Inscris ce que tu as fait et où ça coince.
    On n'a aucune raison de faire ton devoir.
    Ce serait nuire à ton apprentissage.

    Personnellement, j'opterais pour une 2e feuille masquée dans laquelle tu crées le jeu (voir Rnd et Randomize) et que tu copies dans la 1ere.
    Ce serait plus facile de valider (Range("A1").Interior.Color vs Range("A1").Interior.Color)
    Autrement, tu pourrais utiliser un tableau à 2 dimensions.

    Pour le temps, il y a OnTime ou encore Timer

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    Merci de votre réponse. J'ai oublié de préciser mais effectivement j'attends une aide de votre part et non un travail final.

    J'ai bien avancé, j'ai réussi à générer la grille avec les 4 couleurs aléatoirement (rouge, jaune, bleu, vert) et à la faire disparaître au bout de 5 secondes (cases blanches).

    - Il me manque principalement le code pour indiquer mon score sur la partie venant d'être effectuée et aussi un autre code pour qu'il y ai le meilleur score de noter (celui-ci ne doit pas changer dès l'ouverture d'Excel)

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Pour tes 2 questions, il faudrait voir comment tu as procédé:
    Ta grille est dans quel plage de cellules.
    Est-ce que tu as l'original dans une feuille (si oui, où?) ou dans un tableau ou autre ?

    Pour le score, tu devras faire une double-boucle, j'imagine, pour balayer de gauche à droite en descendant et en validant avec l'original.

    Pour le meilleur score, tu pourrais stocker dans une feuille tous les scores et utiliser la formule MAX() pour retrouver le plus haut.
    Tu pourrais ajouter le username.
    Ça te donnerait la possibilité de sortir le meilleur score du joueur ainsi que le meilleur score de tous les joueurs.

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    Ma grille est en cellule C3;H8.

    Quelle serait la formule pour faire une double boucle pour afficher le résultat ?

    Enfin, est-il possible d'envoyer une pièce jointe en message privé ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Je ne sais pas si tu peux joindre un fichier en message privé, mais si tu le mets ici, tu auras plus d'idées, éventuellement.
    Si ton fichier est en xlsm, compresse-le en zip avant de le joindre.

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    D'accord je vais le joindre ici mais je vais le laisser juste le temps que y jetez un oeil, je n'ai pas envie que tout le monde puisse le voir.
    Fichiers attachés Fichiers attachés

  8. #8
    Invité
    Invité(e)
    Par défaut Bonjour,
    la solution que je te propose est peut-être au dessus de tes compétence, car encore faut il pouvoir l’expliquer, mais tu peux t'en inspirer!
    Fichiers attachés Fichiers attachés

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    Oui votre memory est très bien réussi mais beaucoup trop au dessus de mes compétences.

    Donc comme hier, j'en suis au même problème pour afficher le résultat, j'ai demandé à des amis comment faire et ils m'ont dit de créer une macro pour vérifier :
    - par exemple si la case de couleur verte est identique à la case de la grille précédente (qui a disparue après 5 secondes) : alors +1
    - si la couleur choisie est fausse : alors 0
    Pour arriver à un résultat sur 36, comme il y a 36 cases (6x6)

    Je suis donc toujours à votre écoute et je vous remercie par avance de votre aide

  10. #10
    Invité
    Invité(e)
    Par défaut
    pour le résulta; au démarrage du jeu
    pour compter les poins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Range("A1") >= 36 Then
    MsgBox "Predu"
    Else
    Range("A1") = Range("A1") + 1
    End If

  11. #11
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    Je ne comprends pas votre code, j'ai crée une macro Resultat mais ça ne me met que 1 /36 peu importe si la case est juste ou fausse.

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Ajoute Int quand tu utilises Rnd, sinon tu te retrouves avec des nombres réels et tu ne pourras pas comparer avec tes nombres de couleurs qui, eux, sont entiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cache(i, j) = Int(Rnd * 3)
    Et tu peux changer la dimension de tes tableaux à 5,5 plutôt que 6,6

  13. #13
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    Quand j'écris " Cache(i, j) = Int(Rnd * 3) " , je perds la couleur rouge, je dois donc écrire " Cache(i, j) = Int(Rnd * 4) " ?

    Ensuite je dois creér la macro Resultat avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Resultat ()
    If Range("A1") >= 36 Then
    MsgBox "Perdu"
    Else
    Range("A1") = Range("A1") + 1
    End If
    End Sub
    Mais ça me met qu'une simple addition quand j'appuie sur le bouton résultat

  14. #14
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Si tu veux que le résultat augmente à chaque coup, tu peux inclure la macro Résultats dans le BeforeDoubleClick, sinon mets-la dans le code du bouton

    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
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        If Target.Cells.Count <> 1 Then Exit Sub
        J = Target.Column
        I = Target.Row
     
        If I > 2 And I < 9 Then
            If J > 2 And J < 9 Then
                I = I - 3
                J = J - 3
                Courant(I, J) = Selection_Couleur
                AfficheCourant
                Resultats
     
            End If
        End If
    End Sub
     
    Sub Resultats()
        Dim I As Integer, J As Integer
     
        For I = 0 To 5
            For J = 0 To 5
                If Cache(I, J) = Courant(I, J) Then
                    Total = Total + 1
                End If
            Next
        Next
        Range("G11") = Total
    End Sub

  15. #15
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    Donc ça m'indique les cases justes mais lorsque que je clique quand il y a la grille blanche alors que je veux la solution quand je vais cliquer sur le bouton Resultat (par exemple 14 /36)

    Je voulais savoir aussi quel été le code pour pouvoir entrer les couleurs dans la grille sans faire un double clic , je pense qu'il y ai un rapport avec " Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) " mais je ne trouve pas

    Je tiens une fois de plus à vous remercier pour votre aide

    PS : Je me suis peut être mal exprimé du début mais ce que je veux c'est le nombre de cases identiques à la grille précédente (avant les 5 secondes)

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    La macro Résultats que je t'ai mise affiche le nombre de cases identiques à la grille de départ.
    Par contre, je l'ai appelée dans la procédure DoubleClick.

    Si tu veux l'utiliser seulement sur action du bouton, enlève l'appel dans le double-click et lie la macro à ton bouton.

  17. #17
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Je pense que le double-click est une bonne idée.
    Autrement, tu pourrais te positionner avec la souris ou les flèches puis colorer quand tu presses le bouton de la couleur voulue. Mais je ne pense pas que ce soit une bonne idée...

  18. #18
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    Très bien, je vais donc garder le double clic

    Je voulais aussi savoir si il était possible que dès que l'on appuie sur le bouton "JOUER' la case "votre score" en G11 redeviennent vide

    Et pour le meilleur score, je dois utiliser cette formule " range("G13")=0 " pour qu'il reste marqué dès l'ouverture du jeu ?

  19. #19
    Invité
    Invité(e)
    Par défaut
    Code Bouton Résultat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Resultat()
    Dim S As Integer
    For i = 0 To 5
        For j = 0 To 5
       If CLng(Courant(i, j)) = CLng(Cache(i, j)) Then S = S + 1
        Next
    Next
    [h11] = "'" & S & "/36"
    t = Split("0" & [h13], "/")
    If Int(t(0)) < Int(S) Then [h13] = "'" & S & "/36"
    End Sub

  20. #20
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Par défaut
    Merci mais j'ai déjà réussi à mettre le résultat :

    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
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Cells.Count <> 1 Then Exit Sub
    J = Target.Column
    I = Target.Row
    If I > 2 And I < 9 Then
    If J > 2 And J < 9 Then
    I = I - 3
    J = J - 3
    Courant(I, J) = Selection_Couleur
    AfficheCourant
    End If
    End If
    End Sub
     
    Sub Resultats()
    Dim I As Integer, J As Integer
    For I = 0 To 5
    For J = 0 To 5
    If Cache(I, J) = Courant(I, J) Then
    Total = Total + 1
    End If
    Next
    Next
    Range("G11") = Total
    End Sub


    Il me manque plus qu'à mettre un code pour afficher le meilleur score en G13 et qu'il ne s'efface jamais sauf si meilleur score venant d'être fait
    et un autre pour dès que je clique sur le bouton JOUER la case votre score en G11 redevienne vide

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [LG] Jeu mémory : initialisation de tableau
    Par DarkLords dans le forum Langage
    Réponses: 1
    Dernier message: 19/10/2005, 16h13
  2. Topic - La création d'un jeu avec opengl.
    Par AsmCode dans le forum OpenGL
    Réponses: 2
    Dernier message: 18/10/2005, 17h19
  3. Création liste dans cellules Excel en VBA
    Par yazoo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/04/2005, 15h46
  4. Réponses: 19
    Dernier message: 15/03/2005, 10h05

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