formateur informatique

Jeu du casse briques en Visual Basic Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Jeu du casse briques en Visual Basic Excel
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux, voici son url absolue :

Pour l'intégrer sur votre site internet ou blog, vous pouvez l'embarquer :

Sujets et formations similaires :


Jeu du casse brique en VBA Excel

Ce support est destiné à présenter le code Visual Basic Excel ayant permis de construire le jeu du casse brique assimilé, un casse brique Like. Il ne s'agit pas d'une formation en pas à pas présentant toutes les étapes de la fabrication. Le code VBA est offert au téléchargement. Libre à vous de l'adapter. Et vous le constaterez, il est agrémenté de riches commentaires.

Jeu du casse briques programmé en Visual Basic Excel



Source et présentation du jeu
Nous devons commencer par récupérer le classeur Excel offrant tout le développement de ce jeu du casse-brique. Un message d'erreur peut apparaître lors de la première ouverture. Cette sécurité, constatant qu'il s'agit d'une source externe, neutralise le code VBA dans un premier temps. Mais, si après avoir validé le message, vous fermez Excel et rouvrez le classeur, plus aucune alerte n'apparaît.

Ce classeur offre donc une feuille de jeu avec quelques boutons et deux tableaux de synthèse.

Tableaux de synthèse des scores et résultats pour le jeu du casse brique VBA Excel

Le tableau sur la gauche résume les scores du dernier participant. Le tableau sur la droite affiche la synthèse du meilleur joueur.
  • Cliquer sur le bouton But du jeu,
Boîte de message VBA Excel pour expliquer le principe du jeu

Une boîte de message apparaît. Elle renseigne sur le fonctionnement et l'objectif de ce jeu du casse brique. Pour débuter le jeu, il s'agit tout d'abord de cliquer sur le bouton Nouvelle partie. Ensuite, il faut supprimer le plus rapidement possible l'ensemble des couleurs du plateau. Et pour ce faire, le joueur doit cliquer sur une cellule de couleur. Toutes celles qui l'entourent et qui possèdent la même couleur, sont automatiquement éliminées.
  • Cliquer sur le bouton Voir les scores,
Boîte de message VBA Excel pour afficher les meilleurs scores de parties de casse brique

Une nouvelle boîte de message apparaît. Elle résume les dix meilleurs scores dans un tableau. A ce titre, quelques défauts d'alignement contrarient la présentation. Voilà déjà l'une des adaptations à envisager par le code VBA pour corriger ce défaut. A la lecture des dates, vous constatez que nous avons écrit ce code il y a de nombreuses années déjà.
  • Cliquer sur le bouton Nouvelle partie,
Inscrire nom joueur pour nouvelle partie casse brique VBA Excel

Une boîte de dialogue surgit. Il s'agit d'un InputBox. Elle propose en effet une zone de saisie pour enregistrer le nom du participant.
  • Taper votre prénom et cliquer sur le bouton Ok,
Plateau de jeu avec cellules de couleurs aléatoires pour simuler les briques à casser



Le plateau de jeu se remplit de cases de couleur. Ces couleurs sont générées aléatoirement par le code VBA. Ainsi, chaque partie est différente. Parfois, il est nécessaire de réaliser des coups intermédiaires pour supprimer certaines petites zones de couleur, permettant de regrouper de nombreuses cases de la même couleur. Cette méthode permet d'optimiser les coups comptabilisés. De plus, le temps est compté à partir du moment où les cases de couleur apparaissent.
  • Cliquer sur l'une des cases de couleur,
Comme vous le remarquez, toutes les cellules adjacentes possédant le même fond sont éliminées. Les cellules du dessus tombent pour remplir l'espace laissé vacant. Ce principe doit être reproduit jusqu'à ce que plus aucune cellule de couleur ne subsiste.

Une fois la dernière case éliminée, une boîte de dialogue se déclenche en effet. Elle propose de visualiser le tableau des scores. Le code VBA est donc en mesure de détecter automatiquement l'aspect des cellules au fil de la partie. Votre score est déjà résumé dans le tableau de gauche, au-dessus du plateau de jeu.

Boîte de message VBA en fin de partie du jeu du casse brique Excel

Cette boîte de dialogue est initiée par la fonction VBA MsgBox avec des paramètres. Ces paramètres permettent de choisir les boutons de réponse proposés au joueur. Bien sûr, la valeur de retour est stockée dans une variable. C'est ainsi que le traitement se poursuit.

Présentation du code
Nous le disions, ici nous proposons de présenter la structure du code afin de comprendre le mécanisme du jeu.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur de code VBA,
  • Dans l'explorateur de projet sur la gauche, double cliquer sur l'élement ThisWorkbook,
Objet ThisWorkbook pour déclencher partie sur évènement ouverture classeur par code VBA

Nous affichons ainsi sa feuille de code au centre de l'écran. Et nous constatons qu'un évènement est géré. Comme nous l'avons déjà appris, cette procédure évènementielle Workbook_Open permet de déclencher un code VBA à l'ouverture du classeur.

Ce code réalise un réglage sur la feuille Horloge afin de réinitialiser l'indicateur de temps. Ensuite, il active la feuille plateau, celle du jeu. A ce titre et vous l'avez sans doute constaté, les onglets ne sont pas disponibles dans le classeur Excel. Ils sont neutralisés par des paramétrages afin d'empêcher les joueurs de naviguer au travers des feuilles.

Private Sub Workbook_Open()
On Error GoTo pb
Sheets('Horloge').Range('G2').Value = 'non'
Sheets('plateau').Activate
Exit Sub
pb:
gestion_Erreur
End Sub

Sub gestion_Erreur()
MsgBox Err.Description, vbExclamation, Err.Number
End Sub
  • Revenir sur la feuille Excel du plateau de jeu (ALT + F11),
  • Cliquer droit sur le bouton Nouvelle partie,
  • Dans le menu contextuel, choisir Affecter une macro,
Afficher les macros pour atteindre le code VBA associé au bouton de la feuille Excel



La boîte de dialogue qui suit résume les macros existantes et celle associée au bouton désigné.
  • Cliquer sur le bouton Modifier,
Cette méthode permet de basculer dans l'éditeur de code VBA entre les bornes de la procédure associée au bouton. Elle se nomme donc nouvelle_partie :

Sub nouvelle_partie()
On Error GoTo pb
infos_utilisateur

Sheets('Horloge').Range('G2').Value = 'oui'

'Supprime les couleurs de remplissage des cellules du plateau
Range('B21:K41').Interior.ColorIndex = xlNone

'L'indice de ligne varie de 4 à 14
'L'indice de colonne varie de 3 à 6
Dim ligne As Byte, colonne As Byte

'Initialisation de la génération de nb aléatoire sur l'horloge système
Randomize

For ligne = 21 To 41
For colonne = 2 To 11
'Remplit aléatoirement la cellule d'une couleur dont l'index est compris
'entre 3 et 6.
Cells(ligne, colonne).Interior.ColorIndex = Int((6 - 3 + 1) * Rnd + 3)
Next colonne
Next ligne

Exit Sub
pb:
gestion_Erreur
End Sub


Vous notez la présence de nombreux commentaires. Tout d'abord, la procédure infos_utilisateur est appelée. Elle est située juste en dessous de la procédure nouvelle_partie. C'est elle qui permet de mémoriser le nom du participant :

le_nom = InputBox('Veuillez saisir votre prénom :', 'Votre prénom')

Cette information est inscrite dans la cellule dédiée. Puis, les variables sur le temps, la durée ou encore le meilleur score sont mémorisées. C'est une boucle Do While qui scrute le tableau des archives dans la feuille Score. Le compteur de temps est enclenché grâce à la fonction VBA Timer.

debut = Timer

Suite à cela, la procédure nouvelle_partie reprend le fil de son traitement. L'indicateur sur l'horloge est tout à bord modifié. Comme le commentaire l'explique, nous exploitons la fonction VBA Randomize pour initialiser la gestion des nombres aléatoires.

'Initialisation de la génération de nb aléatoire sur l'horloge système
Randomize


Ensuite, c'est une double boucle For qui permet de passer en revue chacune des cellules du plateau de jeu, pour les remplir d'une couleur générée aléatoirement.

...
For ligne = 21 To 41
For colonne = 2 To 11
'Remplit aléatoirement la cellule d'une couleur dont l'index est compris
'entre 3 et 6.
Cells(ligne, colonne).Interior.ColorIndex = Int((6 - 3 + 1) * Rnd + 3)
Next colonne
Next ligne
...


La suite du traitement attend les actions du joueur. C'est donc l'évènement du clic utilisateur sur une case de couleur qui est géré par le code VBA Excel.
  • Dans l'explorateur de projet, double cliquer sur l'élément Feuil2 (plateau),
L'essentiel du code du jeu réside dans la procédure évènementielle Worksheet_SelectionChange de cette feuille. C'est elle qui permet d'intercepter et de traiter les clics du joueur. Son paramètre Target déclaré comme un objet Excel de type Range est essentiel. C'est lui qui identifie la cellule cliquée. Il permet donc d'en connaître les coordonnées, grâce aux propriétés Row et Column.

PrivateSub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Tout d'abord, si la cellule cliquée ne fait pas partie du plateau de jeu, l'action est ignorée. Le traitement est avorté :

...
If Target.Row = 21 And Target.Column = 1 Then Exit Sub
If Target.Row < 21 Or Target.Row > 41 Then
Range('A1').Select
Exit Sub
End If
If Target.Column < 2 Or Target.Column > 11 Then
Range('A1').Select
Exit Sub
End If
...


Il en va de même si plusieurs cellules sont sélectionnées ensemble :

If Selection.Count > 1 Then Exit Sub

Puis, les variables nécessaires au traitement sont déclarées :

...
Dim ligne As Integer, colonne As Integer
Dim ligne_ref As Integer, colonne_ref As Integer
Dim couleur_Index As Byte
Dim nouvelle_Ligne_bas As Byte, nouvelle_Ligne_haut As Byte
Dim nb_Ligne As Byte
...


Les attributs de la cellule cliquée sont prélevés et mémorisés :

...
'Réceptionne l'index de couleur de la cellule cliquée pour comparaison
'avec les cellules adjacentes
couleur_Index = Target.Interior.ColorIndex
'Remplissage de la cellule cliquée avec un motif
Target.Interior.Pattern = xlGray50
...


Ensuite, ce sont quatre boucles qui sont enclenchées, les unes à la suite des autres. La première analyse les cellules situées en-dessous (ligne = ligne + 1) pour les comparer. Si elles ont la même couleur, elles sont effacées. En réalité, elles sont repérées et marquées d'un motif (Cells(ligne, colonne).Interior.Pattern = xlGray50). La deuxième boucle progresse vers le haut (ligne = ligne - 1). La troisième analyse les cellules situées sur sa droite (colonne = colonne + 1). La dernière boucle repère les cellules situées sur sa gauche (colonne = colonne - 1).

Pour n'oublier aucune case, plusieurs passes sont engagées sur l'ensemble des cellules du plateau de jeu :

...
For compteur = 0 To 4
...
For i = 21 To 41
For j = 2 To 11
...


Si elles possèdent la couleur identifiée et que le motif de remplissage n'est pas encore en vigueur, le code l'applique :

...
Do While Cells(ligne, colonne).Interior.ColorIndex = couleur_Index And _
Cells(ligne, colonne).Interior.Pattern <> xlGray50
Cells(ligne, colonne).Interior.Pattern = xlGray50
ligne = ligne + 1
Loop
...


Enfin, une dernière double boucle est enclenchée pour parcourir toutes les cases du plateau de jeu. Cette double boucle part des cellules du bas et remonte dans le plateau (Step - 1).

...
For j = 2 To 11
For i = 41 To 21 Step -1
...


Elle recherche toutes les cellules possédant un motif :

Do WhileCells(i, j).Interior.Pattern = xlGray50

Et donc la double boucle devient une triple boucle et bientôt une quadruple. En effet, la boucle qui suit consiste à ne pas traiter les cellules vides :

Do While Cells(ligne, colonne).Interior.ColorIndex <> -4142

A chaque fois qu'un motif est rencontré, la ligne en cours est affectée du motif et de la couleur de la case du dessus. Cette astuce donne l'impression que les briques descendent lorsqu'un jeu de couleur a été éliminé.

...
Cells(ligne, colonne).Interior.Pattern = Cells(ligne - 1, colonne).Interior.Pattern
Cells(ligne, colonne).Interior.ColorIndex = Cells(ligne - 1, colonne).Interior.ColorIndex
...


Voilà donc pour l'explication et l'articulation de ce jeu. Désormais, vous possédez toutes les armes pour l'adapter et le faire évoluer à votre guise.

 
Sur Facebook
Sur G+
Sur Youtube
Les livres
Contact
Mentions légales



Partager la formation
Partager sur Facebook
Partager sur Google+
Partager sur Twitter
Partager sur LinkedIn