Calcul mental

Version 1: Il s'agit de choisir un nombre au hasard :

Option Explicit
' Affichage d'un message de bienvenue et d'un message d'au revoir

Sub CalculMentalV1()
  MsgBox "Bienvenue dans le programme de calcul mental"
  MsgBox "Merci d'avoir joué"
End Sub

Version 2 : Il s'agit de choisir un nombre au hasard :

Sub CalculMentalV2()
  Dim Nombre1
  Randomize ' Cette instruction permet simplement d'assurer qu'à chaque lancement du programme,
  ' Le nombre aléatoire sera toujours différent
  MsgBox "Bienvenue dans le programme de calcul mental"
  Nombre1 = Rnd
  MsgBox Nombre1
  MsgBox "Merci d'avoir joué"
End Sub

En fait, il faut le transformer d'un nombre au hasard entre 0 et 1 en nombre au hasard entre 1 et 100 (100 par exemple)

Sub CalculMentalV3()
  Dim N1
  Randomize
  MsgBox "Bienvenue dans le programme de calcul mental"
  N1 = Rnd ' 0.9963265412 - Nombre au hasard entre 0 et 1
  N1 = N1 * 100 ' 99.63265412 - Le même nombre * 100
  N1 = N1 + 1 ' 100.63265412 - Le même nombre + 1 (sinon ce serait un nombre au hasard entre 0 et 99)
  N1 = Int(Hasard) ' 100 ' On supprime toutes les décimales pour avoir un nombre entier
  MsgBox N1
  MsgBox "Merci d'avoir joué"
End Sub

Il est possible de compresser la génération du nombre aléatoire en une seule ligne de code qui est plus difficile à comprendre mais qui permet un programme plus compact

Sub CalculMentalV4()
  Dim N1
  Randomize
  MsgBox "Bienvenue dans le programme de calcul mental"
  N1 = Int((100 * Rnd) + 1)
  MsgBox N1
  MsgBox "Merci d'avoir joué"
End Sub

En fait, ce n'est pas un seul nombre que nous avons besoin, mais 2

Sub CalculMentalV5()
  Dim N1, N2
  Randomize
  MsgBox "Bienvenue dans le programme de calcul mental"
  N1 = Int((100 * Rnd) + 1)
  N2 = Int((100 * Rnd) + 1)
  MsgBox "N1 égale " & N1
  MsgBox "N2 égale " & N2
  MsgBox "Merci d'avoir joué"
End Sub

Il s'agit maintenant de poser une question à l'utilisateur :

Sub CalculMentalV6()
  Dim N1, N2
  Randomize
     MsgBox "Bienvenue dans le programme de calcul mental"
  N1 = Int((100 * Rnd) + 1)
  N2 = Int((100 * Rnd) + 1)
  ' Utilisation astucieuse des & :
  Reponse = InputBox("Combien font " & N1 & " + " & N2 & " ?")
  MsgBox "Merci d'avoir joué"
End Sub

Et maintenant, on vérifie si l'utilisateur a entré la bonne réponse : Cette version dit que l'utilisateur a entré une fausse réponse même si elle est correcte Je pense que c'est parce que N1 et N2 n'ont pas été déclarés en INTEGER

Sub CalculMentalV7()
  Dim N1, N2
  Dim Reponse ' Stockage de la réponse de l'utilisateur
  Randomize
  MsgBox "Bienvenue dans le programme de calcul mental"
  N1 = Int((100 * Rnd) + 1)
  N2 = Int((100 * Rnd) + 1)
  Reponse = InputBox("Combien font " & N1 & " + " & N2 & " ?")
  If Reponse = N1 + N2 Then
    MsgBox "Bonne réponse !"
  Else
    MsgBox "Désolé... la bonne réponse était " & N1 + N2
  End If
  MsgBox "Merci d'avoir joué"
End Sub

Cette version fonctionne

Sub CalculMentalV8()
  ' Déclaration des variables correctement
  Dim N1 As Integer
  Dim N2 As Integer
  Dim Reponse ' Stockage de la réponse de l'utilisateur
  Randomize
  MsgBox "Bienvenue dans le programme de calcul mental"
  N1 = Int((100 * Rnd) + 1)
  N2 = Int((100 * Rnd) + 1)
  Reponse = InputBox("Combien font " & N1 & " + " & N2 & " ?")
  If Reponse = N1 + N2 Then
    MsgBox "Bonne réponse !"
  Else
    MsgBox "Désolé... la bonne réponse était " & N1 + N2
  End If
  MsgBox "Merci d'avoir joué"
End Sub

Maintenant, ce n'est pas un calcul qu'il faut proposer à l'utilisateur, mais 4 : Si on n'utilise pas de boucle For To Next, on obtient le programme suivant qui ressemble à un mammouth : (Et encore... on n'a que 4 calculs...)

Sub CalculMentalV9()
  
  Dim N1 As Integer
  Dim N2 As Integer
  
  Dim Reponse ' Stockage de la réponse de l'utilisateur
  Randomize
  MsgBox "Bienvenue dans le programme de calcul mental"
  
  ' Premier calcul :
  N1 = Int((100 * Rnd) + 1)
  N2 = Int((100 * Rnd) + 1)
  Reponse = InputBox("Combien font " & N1 & " + " & N2 & " ?")
  If Reponse = N1 + N2 Then
    MsgBox "Bonne réponse !"
  Else
    MsgBox "Désolé... la bonne réponse était " & N1 + N2
  End If
  
  ' Deuxième calcul :
  N1 = Int((100 * Rnd) + 1)
  N2 = Int((100 * Rnd) + 1)
  Reponse = InputBox("Combien font " & N1 & " + " & N2 & " ?")
  If Reponse = N1 + N2 Then
    MsgBox "Bonne réponse !"
  Else
    MsgBox "Désolé... la bonne réponse était " & N1 + N2
  End If
  
  ' Troisième calcul :
  N1 = Int((100 * Rnd) + 1)
  N2 = Int((100 * Rnd) + 1)
  Reponse = InputBox("Combien font " & N1 & " + " & N2 & " ?")
  If Reponse = N1 + N2 Then
    MsgBox "Bonne réponse !"
  Else
    MsgBox "Désolé... la bonne réponse était " & N1 + N2
  End If
  
  ' Quatrième et dernier calcul :
  N1 = Int((100 * Rnd) + 1)
  N2 = Int((100 * Rnd) + 1)
  Reponse = InputBox("Combien font " & N1 & " + " & N2 & " ?")
  If Reponse = N1 + N2 Then
    MsgBox "Bonne réponse !"
  Else
    MsgBox "Désolé... la bonne réponse était " & N1 + N2
  End If
  
  MsgBox "Merci d'avoir joué"
End Sub

Le programme est terminé. Mettons maintenant les commentaires correctement, et aérons le programme pour Pouvoir le relire facilement, et apporter aisément des modifications ultérieures.

Sub CalculMentalV12()
  ' *******************************
  ' * Déclaration des variables : *
  ' *******************************
  Dim N1 As Integer ' Premier des deux nombre au hasard
  Dim N2 As Integer ' Second des deux nombres au hasard
  Dim Reponse As Integer ' Réponse proposée à chaque fois par le joueur
  Dim Compteur As Integer ' Compteur de questions
  Dim Score As Integer ' Contiendra le score du joueur (nombre de réponses correctes)
  
  ' ***************************
  ' *Démarrage du programme : *
  ' ***************************
  Score = 0 ' D'entrée son score est de zéro.
  Randomize ' Permet d'assurer que les nombres seront toujours différents à chaque tirage au sort
  MsgBox "Bienvenue dans le programme de calcul mental"
  
  ' ***********************
  ' * Boucle principale : *
  ' ***********************
  For Compteur = 1 To 4 ' Il est facile de remplacer 4 par un autre nombre...
  N1 = Int((100 * Rnd) + 1) ' Génération d'un nombre au hasard N1
  N2 = Int((100 * Rnd) + 1) ' Génération d'un nombre au hasard N2
  Reponse = InputBox("Combien font " & N1 & " + " & N2 & " ?")
  ' Si le joueur répond correctement :
  If Reponse = N1 + N2 Then
    MsgBox "Bonne réponse !"
    Score = Score + 1 ' On augmente son score s'il répond bien
  Else ' Sinon...
    ' Sinon, son score ne bouge pas...
    MsgBox "Désolé... la bonne réponse était " & N1 + N2
  End If
  Next ' Fin du For
  
  ' **********************
  ' * Fin du programme : *
  ' **********************
  MsgBox "Merci d'avoir joué. Votre score est de " & Score & " sur 4."
End Sub

Tout programme est améliorable à l'infini. Essayez donc ces quelques améliorations :

TRES FACILE
- A la place d'addictions, faire des soustractions, ou des multiplications


FACILE
Demander au joueur son nom, pour personnaliser le message de conclusion :
"Roger, votre score est de 3 sur 4"


FACILE
- Demander au joueur à la base combien d'additions il veut (3, 4, 50 ?)


FACILE
- Demander la difficulté voulue au joueur (Des additions jusqu'à 100 comme ici, ou 500, ou 10000 ?)


ASSEZ FACILE
- Faire des commentaires suivant le score :
"Score de 1 sur 4, Roger, vous êtes NUL !"
Ou
"Score de 4 sur 4, Marcel, vous êtes un génie !"


ASSEZ FACILE
- Afficher les résultats successifs des additions dans Word avec Selection.TypeText et TypeParagraph


DIFFICILE
- Demander à l'utilisateur s'il veut faire des additions, des soustractions ou des multiplications avant de commencer le jeu