Le jeu nombre mystère, ou encore de la devinette est un jeu facile à coder en python, le principe est le suivant, le programme choisit au hasard un nombre dans un intervalle donné et demande au joueur de le deviner. Et pour aiguiller ce dernier vers la bonne réponse, on lui donne des indications en fonction de son niveau, cela peut être des calculs à trous, de la résolution d’équations, révisions des tables de multiplications, …
Comment rendre le jeu plus ludique
Il est possible d’adapter ce jeu pour le rendre plus ludique et travailler des leçons de mathématiques pour différents niveaux. Il suffit de remplacer la partie du code où on aide le joueur à trouver le nombre mystère.
Niveau collège ou lycée
En effet, dans le code du jeu de devinette présenté précédemment, l’aide qu’on propose au joueur est basée sur la résolution des équations de 1er degré. Ce type d’activité est compatible avec les cours de mathématique de 2nd (lycée) ou de la troisième (fin de collège).
Niveau primaire
Pour initier à la programmation, et stimuler la curiosité des élèves plus jeunes, niveau primaire (cycle 1 et 2). On peut ajuster le programme pour travailler les additions et soustractions en proposant des calculs à trou. Il suffit de remplacer la ligne de code de proposition d’aide par la ligne de code suivante :
aide = "Si tu ajoutes le nombre mystère à ",nUtil, " tu dois trouver", nMyst + nUtil
au fait, dans cette ligne j’ai créé une nouvelle variable que j’ai appelée aide, et que je compte changer en fonction de la leçon que je veux travailler. Il s’agit là du calcul à trous, donc addition soustraction.
Si par exemple je devais travailler les multiplications divisions, je pourrais le faire de différentes manières.
La première façon, la plus simple, je mettrai un calcul à trou en multiplication, la variable aide prendra la forme suivante :
aide = "Si tu multiplies le nombre mystère par ",nUtil, " tu dois trouver", nMyst * nUtil
Comment adapter le jeu aux différents niveaux
En fonction du niveau de l’élève, il faudra penser à bien borner l’intervalle du choix du nombre mystère. Si l’objectif est de réviser les tables de multiplication, l’intervalle [1, 10] est suffisant. En revanche si l’objectif est d’apprendre à poser des calculs de multiplication, on peut élargir l’intervalle à des plus grandes valeurs.
Division posée
On peut complexifier un peu le jeu pour travailler les divisions posées avec un reste. Pour ce faire on peut partir du principe que le dividende est égale au diviseur multiplié par le quotient et le tout additionné au reste (D = d*Q + R) avec :
D : dividende ; d : diviseur ; Q : quotient ; et R : reste.
- On peut donc proposer que le nombre mystère soit égale au résultat de la division, le quotient).
- On peut faire en sorte que le diviseur soit compris entre 3 et 9, pour ne travailler que les divisions à un chiffre. On utilise donc la fonction
randint(3, 9)
de python. - Pour qu’il ait un reste on peut choisir R de manière à ce qu’il soit strictement inférieur au diviseur. Là aussi on peut utiliser la fonction
randint(0, d-1)
. - Le dividende sera bien sûr calculé selon la relation citée ci-dessus (D = d*Q + R)
Voici une proposition de la ligne d’aide :
d = randint(3, 9)
Q = nMyst
R = randint(0, d-1)
D = d*Q + R
aide = "le nombre mystère = ",D, " divisé par ", d
On peut enfin créer une sorte de menu où le joueur peut choisir le niveau de complexité du jeu : très facile=1 ; Facile = 2 ; moyen = 3 ; difficile = 4 ; Expert = 5.
Nouvelle version du jeu de devinette
Ainsi la nouvelle version du code est la suivante :
from random import randint
nbrMax = 20
nMyst = randint(1,nbrMax)
print("J'ai choisi un nombre mystère entre 1 et ",nbrMax, " à toi de le deviner")
nUtil = int(input("Propose un nombre : "))
print("Niveau très facile : taper 1 ")
print("Niveau facile : taper 2 ")
print("Niveau moyen : taper 3 ")
print("Niveau difficile : taper 4 ")
print("Niveau Expert : taper 5 ")
niv = int(input("Choisi le niveau qui te convient :"))
if niv == 1:
aide = "Si tu ajoutes le nombre mystère à ",nUtil, " tu dois trouver", nMyst + nUtil
elif niv == 2:
aide = "Si tu multiplies le nombre mystère par ",nUtil, " tu dois trouver", nMyst * nUtil
elif niv == 3:
aide = "le nombre mystère est égale au résultat de division de ",nUtil, " tu dois trouver", nMyst * nUtil
elif niv == 4:
d = randint(3, 9)
Q = nMyst
R = randint(0, d-1)
D = d*Q + R
aide = "le nombre mystère = ",D, " divisé par ", d
elif niv == 5:
aide = "deux fois et demi le nombre mystère + ",nUtil, " = ", 2.5*nMyst + nUtil
if nUtil < nMyst:
print("Le nombre est trop petit")
print("Voici une indication")
print(aide)
nUtil2 = int(input("Propose un autre nombre : "))
elif nUtil > nMyst:
print("Le nombre est trop grand")
print("Voici une indication")
print(aide)
nUtil2 = int(input("Propose un autre nombre : "))
else:
print("Félicitations (°_°)! Tu as trouvé ",nMyst," mon nombre mystère.")
nUtil2 = 99 + nbrMax
if nUtil2 == nMyst and nUtil != nMyst :
print("Félicitations ! Tu as trouvé ", nMyst, " mon nombre mystère en 2 essais!")
elif nUtil2 != nMyst and nUtil2 != 99 + nbrMax:
print("Dommage !^_^! tu n'as pas trouvé.")
print("Mon nombre mystère est : ",nMyst,".")
input("appuyez sur une touche ...")
Evidemment, Il s’agit là d’une version qui fonctionne très bien, cependant, on pourrait l’arranger un peu en soignant l’esthétique et la chronologie des affichages. En effet, Cela pourrait faire l’objet d’un exercice très riche en enseignements. Alors, copiez collez le code chez vous et essayer de le rendre un peu plus esthétique. n’oubliez pas de partager vos résultats ou questions