Une Histoire de plus ou moins


Accueil > Projets > Une Histoire de plus ou moins

Par Coquel G., Decoster J., Ginhoux E. en novembre 2020

Ce projet a été réalisé par des élèves en spécialité NSI du Lycée Louis Pasteur. Ils sont également les auteurs de ce compte rendu. Pour en savoir plus : Les projets en spécialité NSI

Lancez vous dans le jeu du plus ou moins et tentez de battre l’ordinateur en devinant le nombre, entre 0 et 1000, auquel il pense en moins de 10 coups !
Ou alors, faites lui deviner votre nombre, saura t’il le trouver en moins de 10 coups et quelle stratégie adoptera t’il ?

Ce projet est un programme réalisé sur python recréant le célèbre jeu du plus ou moins. Il vous permettra une fois téléchargé sur votre calculatrice Numworks ou à l’aide d’un IDE de trouver ou de faire deviner un nombre entre 0 et 1000 à l’ordinateur. Ce programme a été developpé sur Pycharm et peut être téléchargeable sur la calculatrice Numworks via les liens hypertextes en bas de l’article.

La Naissance du projet

Dès l’annonce du projet nous voulions partir sur un jeu et surtout travailler sur l’interaction entre l’homme et la machine.

C’est alors que le jeu du plus ou moins nous est apparu comme une idée ni trop simple ni trop compliquée à coder avec une interaction importante.

Le projet était comme un mini défi puisque nous devions incrémenter une sorte de mini “intelligence artificielle”, car en effet dans ce jeu il existe une stratégie qui garantit la victoire.

Les différents modes de jeu

  • UN PREMIER MODE DE JEU

Dans ce mode de jeu, l’ordinateur doit trouver un nombre auquel l’utilisateur pense.

La stratégie consiste à diviser par deux le nombre de possibilités allant de 0 à 999, il suffit donc de proposer 500 comme premier choix, 250 ou 750 en deuxième choix et ainsi de suite… Grâce à cette méthode, l’ordinateur a la certitude de trouver le nombre en moins de dix coups.

Le but étant d’intégrer la stratégie à l’ordinateur comme une sorte de mini "intelligence artificielle” pour que l’ordinateur l’adopte et soit donc sûr de gagner à tous les coups.

  1. victoire = False
  2. min = 0
  3. max = 1000
  4.  
  5. def recherche(min, max):
  6.    scoreordi = 0
  7.    scorejoueur = 0
  8.    global victoire
  9.    while not victoire:
  10.        print("Ton chiffre est il plus grand que",int((min + max) / 2),"?")
  11.        reponse = input()
  12.        if reponse == "+":
  13.            recherche(int((min + max) / 2), max)
  14.        elif reponse == "-":
  15.            recherche(min, int((min + max) / 2))
  16.        elif reponse == "=":
  17.            print("J'ai donc trouvé ton chiffre qui est",int((min + max) / 2))
  18.            victoire = True
  19.            print("Partie terminee")
  20. recherche(min,max)

Télécharger

Voici le rendu du 1er mode de jeu :

  • UN DEUXIEME MODE DE JEU

Le deuxième mode de jeu fut bien plus simple à coder que l’autre car il suffisait de faire un script qui génère un nombre aléatoirement et le faire deviner à l’utilisateur à l’aide de phrases tels que “c’est plus !” ou “c’est moins !” .Nous avons intégré des boucles “if” et “while” en réponse au nombre entré par le joueur.

  1. choix = randint(0, 999)
  2.     nb = int(input())
  3.     if nb < 0:
  4.         print("Votre réponse n'est pas valide")
  5.         sleep(3)
  6.         questionordi()
  7.     elif nb > 999:
  8.         print("Votre réponse n'est pas valide")
  9.         sleep(3)
  10.         questionordi()
  11.     cpt = 0
  12.     scoreordi = 0
  13.     scorejoueur = 0
  14.     while cpt < 9:
  15.         if nb > choix:
  16.             print("C'est moins !")
  17.             nb = int(input())
  18.             if nb < 0:
  19.                 print("Votre réponse n'est pas valide")
  20.                 sleep(3)
  21.                 questionordi()
  22.             elif nb > 999:
  23.                 print("Votre réponse n'est pas valide")
  24.                 sleep(3)
  25.                 questionordi()
  26.             cpt += 1
  27.         elif nb < choix:
  28.             print("C'est plus !")
  29.             nb = int(input())
  30.             if nb < 0:
  31.                 print("Votre réponse n'est pas valide")
  32.                 sleep(3)
  33.                 questionordi()
  34.             elif nb > 999:
  35.                 print("Votre réponse n'est pas valide")
  36.                 sleep(3)
  37.                 questionordi()
  38.             cpt += 1
  39.         else:
  40.             print("Tu as trouve")
  41.             cpt = 10
  42.             scorejoueur = scorejoueur + 1
  43.             print("Score ordinateur :", scoreordi, "\nScore joueur  :", scorejoueur)

Télécharger

Voici le rendu du 2ème mode de jeu :

Une ergonomie pensée pour la calculatrice

Un des autres défis de ce projet fut de traduire notre script pour qu’il puisse coller à l’interface limitée de la Numworks, en effet dans la calculatrice on ne peut pas se permettre de faire une phrase trop longue ou encore de mettre trop de texte. Nous avons alors utilisé des IDE Python tels que Numworks ou Omega pour corriger les bugs d’affichage et mettre en forme notre jeu textuel.

La création d’un menu nous a permis de créer un semblant d’interface graphique afin d’ajouter un peu d’esthétique à notre code.

Voici un aperçu du menu :

  1. >
  2. def menu():
  3.    print("---------------------------------")
  4.    print("------- MENU PRINCIPAL ----------")
  5.    print("--------------------------------\n")
  6.    print("1- Je veux faire deviner à \n   l'ordinateur, un nombre en \n   moins de 10 coups -->\n")
  7.    print("2- Je veux affronter\n   l'ordinateur et tenter\n   de deviner en moins de 10\n   coups son nombre -->\n")

Télécharger

Voici alors le rendu sur la Numworks du menu :

Conclusion

Comme vous le savez, le langage python nécessite comme tous les langages une extrême rigueur sans quoi le script est immédiatement obsolète.

C’est pourquoi nous avons dû braver certains problèmes qui empiétaient sur la justesse du code et donc du jeu.

Notre obstacle majeur étant que la boucle "while" dans la définition recherche (Voir le mode de jeu 1), était interminable ! Aussi mais pas des moindre nous avons eu aussi de nombreux soucis d’indentation et de syntaxe.

Après avoir résolu ces problèmes et optimiser notre jeu, nous avions l’impression qu’une couche graphique aiderait à rendre le jeu plus vivant.

Malheureusement, nos faibles connaissances pour les modules tels que turtle, kandinsky et tkinter ont fait que notre tentative d’amélioration a échoué. Dès lors, nous avons abandonné l’idée d’offrir une interface graphique au joueur pour uniquement nous concentrer sur le script et le menu, qui servirait en remplacement.

Voici un lien vers nos essais graphiques

En somme, ce projet nous aura permis d’étendre nos connaissances en python ainsi que de réaliser notre premier “jeu” interactif.

Vous retrouverez les liens de notre script dans le tableau ci-dessous et pourrez le télécharger.

Télécharger et tester

Serveur Workshop de NumWorks tiplanet.org nsi.xyz
Remarques Permet un téléchargement rapide sur la calculatrice Téléchargement .py Téléchargement .zip
Liens hypertextes lien NumWorks > Physique > Lien
plus_ou_moins.zip (ZIP - 1.4 ko)
plus_ou_moins.zip

Mots-clés