Cours-Gratuit
  • Accueil
  • Blog
  • Cours informatique
home icon Cours gratuits » Cours informatique » Cours programmation » Cours visual basic » Exercices VB »

Articles similaires

  • Exercice VB: Manipulation de Tableau à une seul dimension
  • Exercice VB: Éditeur simplifié d'une matrice
  • Exercice VB: Tableau à une seul dimension
  • Tutoriel Word : appliquer et enlever le surlignage
  • Comment mettre en couleur une ligne sur deux sur Excel
  • Exercice VB: Manipulation dans une ArrayListe
  • Tutoriel Python : tout savoir sur le type Boolean
  • Exercice Visual Basic : Les Fichiers Séquentiels
  • Comment colorer une cellule en fonction de son contenu dans Excel
  • Exercice VB: produire un tableau contenant l'intersection de deux ensembles
  • Exercices JAVA : terminologie, Structure, typage et conversion de type,Opérateurs relationnels
  • Tutoriel Python: la librairie Numpy

Documents similaires

  • Exercice bureautique pour réviser ensemble

  • Exercice de bureautique pour débutant

  • TP programmation web pour débutant

  • Serie d’exercices avec corriges en economie : croissance et developpement economique

  • Cours d’introduction au case management

  • Introduction au case management cours avance

  • Support de cours a propos du case management de la suva

  • Document de formation sur le case management

Exercice VB: La taupe

Rédigé par GC Team, Publié le 03 Janvier 2012, Mise à jour le Vendredi, 16 Décembre 2022 22:35
Participez au vote ☆☆☆☆☆★★★★★

Le principe:

On se propose d'écrire un programme permettant à un pointeur aveugle (la taupe) de trouver son chemin à travers une grille de 10x10 cases. A l'aide de la souris, vous choisirez une case de départ en cliquant sur celle-ci. A partir de cette case, il devra essayer aléatoirement de se déplacer sur une case libre touchant un de ses côtés immédiats (gauche, droite haut ou bas, mais jamais en diagonale), jusqu'à atteindre la case d'arrivée (10, 10). Il marquera son passage en coloriant chaque case en bleu et en la marquant du numéro de son pas. Une case sur laquelle il est déjà passé n'est pas considérée comme libre – sinon il pourrait tourner en rond… Si aucune case n'est libre autour de lui, elle sera coloriée en rouge, car c'est une impasse. Il devra alors reculer d'un pas et chercher un autre passage.

Programme demandé:

  1. Interface (voir exemple ci-dessous):
  • Le dessin se fera sur la feuille même – le fond utilisé sera celui par défaut
  • Au lancement, le programme devra dessiner une grille de 10 x 10 occupant tout l'espace imprimable de la feuille. Il faudra choisir une échelle appropriée.
  • Aucun menu, aucun bouton. Seul le click de la souris sur la feuille sera intercepté. Pour des raisons pratiques, nous n'utiliserons d'ailleurs pas l'événement Click mais l'événement MouseDown.
  1. Vous devrez déclarer deux tableaux T et P et une variable C , utilisables par toutes les procédures:
  • Un tableau T (10, 10) de type long qui contiendra la couleur pour chaque case.
  • Un tableau P (100) de type XY - à définir dans un module séparé. Ce type se composera de deux entiers nommés X et Y. On stockera ainsi en P les coordonnées de chaque point du parcours de la "taupe" depuis le point de départ jusqu'en (10,10).
  • Un entier C contiendra en permanence l'indice de la position de notre "taupe" dans P. Ainsi, dans l'exemple illustré ci-dessous, pour C = 5 on aurait P(C).X = 3 et P(C).Y = 3 . En principe, C devrait toujours augmenter de 1 à chaque progression de notre taupe, sauf quand celle-ci s'est engagée dans une impasse et doit par conséquent reculer successivement jusqu'à la dernière position offrant au moins une liberté de mouvement non-exploitée.
  1. Vous devrez écrire une fonction Impasse de type Boolean définie comme suit :
  • Elle doit renvoyer True (vrai) par défaut. On déclare ainsi que l'on est dans une impasse, à moins de découvrir qu'une des 4 cases limitrophes de la position courante P(C) est libre. Pour savoir si une case est "libre", il suffit de s'assurer que sa couleur est à 0, valeur attribuée par défaut à tout élément du tableau T lors de sa création. Bien sûr, on ne teste que les cases limitrophes qui se situent à l'intérieur des limites physiques du tableau (X ou Y entre 0 et 10)
  • Si l'une de ces cases légitimes est libre, elle renvoie alors False (faux)
  1. Vous devrez écrire une procédure marquée recevant l'argument couleur de type long comme suit :
  • Elle aura pour but de "marquer" la case courante P(C) avec la couleur passée en argument en utilisant la méthode line …, couleur, BF
  • Elle imprimera la valeur de C sur cette même case.

Rappel: vous pouvez ajuster la position du curseur graphique avec Form1.CurrentX et Form1.CurrentY, puis imprimer avec Form1.Print

  1. Comme expliqué plus haut, l'essentiel du programme sera écrit dans Form_MouseDown :
  • On initialise C à 1 et P(C) avec les valeurs choisies par la souris. Cette case sera marquée avec VbGreen
  • On effectue une boucle qui ne s'arrêtera que lorsque l'on sera arrivé en (10,10) :

Après avoir traité le cas d'une impasse (case à marquer avec VbRed), on propose aléatoirement une nouvelle case limitrophe (voir l'astuce ci-dessous). Si celle-ci est acceptable et libre, alors on s'y déplace et elle est marquée avec VbBlue.

Astuce: Pour chercher une nouvelle case où aller, vous pouvez vous inspirer de l'exemple ci dessous :

r = Int (Rnd * 4) * 1.57

Xnew = p(c).X + CInt (Cos(r))

Ynew = p(c).Y + CInt (Sin(r))

En cliquant sur (3,1), on peut obtenir :
Enonce-exercice-VB-id2080 


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
Dim t(1 To 10, 1 To 10) As Long
Dim p(1 To 100) As XY 'Parcours
Dim c As Integer 'déplacement Courant (n ième Coup)
Private Sub Form_Activate( )
     Dim i As Integer
     Form1.Scale (-0.01, -0.01) - (10.01, 10.01)
     For i = 0 To 10
          Form1.Line (i, 0) - (i, 10)
          Form1.Line (0, i) - (10, i)
     Next i
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Dim r As Double
     Dim Xnew As Integer, Ynew As Integer
     Randomize
     c = 1
     p(c).X = Int(X) + 1
     p(c).Y = Int(Y) + 1
     marquer vbGreen
     Do
          If impasse Then
               marquer vbRed
               If c = 1 Then
                    MsgBox "Aucune solution !!!"
                    Exit Do
               Else
                    'reculer d'un pas
                    c = c - 1
               End If
          Else ' Il existe donc au moins une solution
               r = Int(Rnd * 4) * 1.57 'Choix aléatoire de la direction en radians
               Xnew = p(c).X + CInt(Cos(r))
               Ynew = p(c).Y + CInt(Sin(r))
               If Xnew > 0 And Xnew <= 10 And Ynew > 0 And Ynew <= 10 Then 'pas hors-cadre
                    If t(Xnew, Ynew) = 0 Then 'case vide
                         c = c + 1
                         p(c).X = Xnew
                         p(c).Y = Ynew
                         marquer vbBlue
                    End If
               End If
          End If
     Loop Until p(c).X = 10 And p(c).Y = 10
End Sub
Sub marquer(couleur As Long)

t(p(c).X, p(c).Y) = couleur
     Form1.Line (p(c).X - 1, p(c).Y - 1)-(p(c).X, p(c).Y), couleur, BF
     Form1.CurrentX = p(c).X - 1
     Form1.CurrentY = p(c).Y - 1
     Form1.Print c
End Sub
Function impasse() As Boolean
     impasse = True
     If p(c).X + 1 <= 10 Then If t(p(c).X + 1, p(c).Y) = 0 Then impasse = False
     If p(c).X - 1 > 0 Then If t(p(c).X - 1, p(c).Y) = 0 Then impasse = False
     If p(c).Y + 1 <= 10 Then If t(p(c).X, p(c).Y + 1) = 0 Then impasse = False
     If p(c).Y - 1 > 0 Then If t(p(c).X, p(c).Y - 1) = 0 Then impasse = False
End Function
Code à placer dans un module :
Public Type XY
     X As Integer
     Y As Integer
End Type
  • Contactez-nous
  • A propos de nous
  • On recrute
  • Rechercher dans le site
  • Politique de confidentialité
  • Droit d'auteur/Copyright
  • Conditions générales d'utilisation
  • Plan du site
  • Accueil
  • Blog
  • Finance et compta.
  • Formations Pro.
  • Logiciels & Apps
  • Organisation
  • Cours informatique
  • Aide à la rédaction
  • Etudes et Metiers
  • Science et Tech
  • Titans de la Tech
id 11354 02