VISUAL BASIC & EXCEL
TP 9
Chasse au trésor
1.1. Polygones réguliers
Deux méthodes sont possibles :
On peut dessiner successivement les n côtés du polygone. Dans ce cas, la figure dessinée ne peut pas être déplacée d'un seul coup avec la souris : il faut déplacer les segments un à un. Autre inconvénient : il n'est pas possible de colorier l'intérieur du polygone. Par contre, c'est la méthode la plus simple. On peut construire le polygone en utilisant la méthode BuildFreeForm. Dans ce cas, le polygone est considéré comme un seul objet et peut être déplacé à la souris. L'intérieur peut être colorié ...Voici ces 2 méthodes :
'Dessiner un polygone régulier 'TP 8 ICES année 2002 Const pi = 3.141592656 Sub DessinerPolygone() ActiveSheet.Lines.Delete x = Cells(1, 2) 'abscisse du centre du polygone y = Cells(2, 2) 'ordonnée du centre du polygone r = Cells(3, 2) 'rayon du cercle circonscrit au polygone n = Cells(4, 2) 'nombre de côtés du polygone x1 = x + r '(x1, y1) = point de départ du dessin y1 = y For k = 1 To n x2 = x + r * Cos(2 * k * pi / n) y2 = y + r * Sin(2 * k * pi / n) ActiveSheet.Lines.Add x1, y1, x2, y2 x1 = x2 y1 = y2 Next End Sub Sub DessinerPolygoneBis() x = Cells(1, 2) 'abscisse du centre du polygone y = Cells(2, 2) 'ordonnée du centre du polygone r = Cells(3, 2) 'rayon du cercle circonscrit au polygone n = Cells(4, 2) 'nombre de côtés du polygone With ActiveSheet.Shapes.BuildFreeform(msoEditingCorner, x + r, y) For k = 1 To n x2 = x + r * Cos(2 * k * pi / n) y2 = y + r * Sin(2 * k * pi / n) .AddNodes msoSegmentLine, msoEditingAuto, x2, y2 Next Set Polygone = .ConvertToShape End With Polygone.Line.ForeColor.SchemeColor = 4 Polygone.Fill.Transparency = 0 Polygone.Fill.ForeColor.SchemeColor = 5 Polygone.Fill.OneColorGradient msoGradientHorizontal, 1, 1 End Sub1.2. Triangle de Pascal
Pas de difficulté particulière. La solution avait été donnée en cours :
'Triangle de Pascal (15 premières lignes) 'Exercice du TP 8 - ICES année 2002 Sub Pascal() Cells(1, 1) = 1 For L = 2 To 15 For C = 1 To L If C = 1 Then Cells(L, C) = 1 Else Cells(L, C) = Cells(L - 1, C - 1) + Cells(L - 1, C) End If Next C Next L End Sub1.3. Nombres parfaits
Certains n'ont peut-être pas pu faire cet exercice car l'organigramme n'était pas donné. Voici donc d'abord l'organigramme d'une fonction qui retourne la somme des diviseurs d'un entier n donné :
Voici maintenant l'organigramme de la procédure permettant d'afficher tous les nombres parfaits compris entre 1 et 10000 :
1.4. Anneaux olympiques
Il faut commencer par définir une procédure permettant de dessiner un anneau dont on connaît les coordonnées du centre (x , y), le rayon intérieur (r1), le rayon extérieur (r2)et la couleur (couleur). Plusieurs techniques permettent d'obtenir ce résultat, mais la méthode la plus simple est la suivante :
On pourra se reporter au TP3 pour savoir comment utiliser la méthode AddShapeLe programme principal est alors très simple (attention, les codes des couleurs ne sont peut être pas les mêmes sur I-Mac) :
Sub AnneauOlympique() ActiveSheet.DrawingObjects.Delete Anneau 100, 100, 38, 47, 4 'anneau de couleur bleue Anneau 200, 100, 38, 47, 5 'anneau de couleur jaune Anneau 300, 100, 38, 47, 0 'anneau de couleur noire Anneau 150, 150, 38, 47, 3 'anneau de couleur verte Anneau 250, 150, 38, 47, 2 'anneau de couleur rouge End Sub1.5. Tableau " pointes et fils "
L'organigramme était donné et le programme qui en découle est très simple :
Sub PointesEtFils() ActiveWindow.DisplayGridlines = False x1 = 50 y1 = 50 x2 = 300 y2 = 250 dx = (x2 - x1) / 50 dy = (y2 - y1) / 50 For k = 0 To 50 ActiveSheet.Shapes.AddLine x1, y1 + k * dy, x1 + k * dx, y2 ActiveSheet.Shapes.AddLine x1 + k * dx, y2, x2, y2 - k * dy ActiveSheet.Shapes.AddLine x2, y2 - k * dy, x2 - k * dx, y1 ActiveSheet.Shapes.AddLine x2 - k * dx, y1, x1, y1 + k * dy Next End Sub
2.1. Règle du jeu
L'objectif est de réaliser un jeu simple :
Le terrain de jeu sera constitué d'une grille carrée de 100 cases. L'ordinateur devra disposer, de façon aléatoire, 6 trésors, dans 6 cases différentes. Le joueur devra, par essais successifs, trouver les 6 trésors en faisant le moins d'essais possible. Un essai du joueur consiste à indiquer les coordonnées de la case qu'il choisit. Si le joueur choisit une case où il y a un trésor, alors la case se met en rouge, sinon elle reste en vert. Si le joueur choisit une case où il n'y a pas de trésor, alors, l'ordinateur indique combien il y a de trésors au nord, au sud, à l'ouest et à l'est de la case visée. Le jeu s'arrête lorsque le joueur a trouvé les 6 trésors ou lorsqu'il abandonne.2.2. Préparation du jeu
Commencer par préparer la feuille de calcul de la façon suivante :
La grille de jeu est formée par les cellules A1 à J10.
Les colonnes K et L serviront à afficher les abscisses et ordonnées des cellules visées.
Les colonnes M, N, O et P afficheront, pour chacun des essais, le nombre de trésors situés respectivement au nord, au sud, à l'ouest et à l'est de la case visée.2.3. Initialisation du jeu
Écrire une procédure qui :
efface toutes les cellules de la plage A1 à P10 , écrit les données fixes de la ligne 1 (colonnes K, L, M, N, O et P) place 6 trésors dans 6 cellules différentes.Pour que les " trésors " ne soient pas visibles, on pourra considérer qu'il s'agit d'un caractère espace.
Dans un premier temps, on pourra mettre une étoile à la place de l'espace pour vérifier que la procédure se déroule bien.Placer un bouton qui servira à lancer la procédure d'initialisation (écrire d'abord la procédure d'initialisation). Les boutons OK et Abandon seront placés plus tard.
2.4. Calcul des réponses
Pour choisir une cellule, l'utilisateur peut simplement cliquer sur elle. Il appuie ensuite sur le bouton OK, et la procédure associée à ce bouton OK affiche dans les colonnes K et L les coordonnées de la cellule choisie puis calcule les réponses et les affiche dans les colonnes M, N, O et P.
Voici comment peut se présenter le début d'une partie :Le bouton OK sert à demander à l'ordinateur de calculer les réponses consernant les différentes cases visées. La procédure associée au bouton OK fera appel à 4 petites fonctions :
Fonction Nord(L) Fonction Sud(L) Fonction Ouest(C) Fonction Est(C).2.5. Procédure Abandon
La procédure Abandon sert à afficher les positions des trésors.