Un Mastermind en python

Projets

Avez-vous déjà rêvé de pouvoir jouer à un jeu stratégique sur votre calculatrice ? Grâce à cet article vous allez découvrir notre jeu du Mastermind revisité… Aurez-vous la bonne stratégie pour réussir à battre l’ordinateur ?

Introduction

Le projet a été réalisé par Justine, Andreas et Neila en classe de première au Lycée Louis Pasteur d’Avignon dans le cadre de leur enseignement de spécialité NSI (numérique et sciences de l’informatique).
Comme matériel, un ordinateur équipé du logiciel Thonny.

L’histoire du jeu d’origine

Le Mastermind ou Master Mind est un jeu de société pour deux joueurs. Le but est de trouver un code en 10 ou 12 coups. La partie s’arrête lorsque l’un des deux joueurs à trouver le code caché. C’est un jeu de réflexion, et de déduction, inventé par Mordecai Meirowitz, dans les années 1970. Mais nous l’avons modifié à notre façon.

Descriptif du projet

Dans le cadre de notre projet, le jeu codé en python a été revisité et mixé avec le jeu du plus ou moins : le joueur essaie de deviner la composition de l’ordinateur qui a été générée aléatoirement, c’est un code à 9 chiffres, le joueur doit le trouver en 5 coups et de plus l’ordinateur nous dit pour chacune des valeurs recherchées si elle est plus grande ou pas. Le jeu ne se joue que dans un seul sens. C’est-à-dire que le joueur ne peut que gagner ! Incroyable non ? ( sauf si il dépasse les 5 coups )

Vous pouvez jouer contre l’ordinateur avec vos amis et tenter de gagner en le moins de coup possible ! 

Notre programme

import random


liste1 = [1,2,3,4,5,6,7,8,9]

random.shuffle(liste1)

liste2 = [0,0,0,0,0,0,0,0,0]

nb_try = 5

n = 0

def choix():
    global n
    global nb_try
    n = 0
    nb_try -= 1
    var = input("Entrez votre combinaison  : ")
    for i in range(9):
        liste2[i] = int(var[i])

def regle():
    print("-----------------------------------\n")
    print("Bienvenue dans le jeu du Mastermind !\n")
    print("Les règles sont simple, l'ordinateur choisis une combinaison de 9 chiffres allant de 1 à 9 inclu, à vous de trouver la bonne combinaison grâce aux indications qui vous seront fournis.\n")
    print("Bonne chance !")

def regle_n(n):
    if liste1[n] == liste2[n]:
        print(liste2[n],"est juste")
    elif liste1[n] < liste2[n]:
        print(liste2[n],"est plus grand que celui que tu cherches")
    else:
        print(liste2[n],"est plus petit que celui que tu cherches")

 
def play():
    global nb_try
    global n
    regle()
    while liste1 != liste2 and nb_try > 0:
        print("-------------------\n")
        choix()
        for i in range(9):
            regle_n(n)
            n += 1
    if liste1 == liste2:
        print(" -------------------------\n Bravo ! Vous avez gagné ! Vous pouvez ainsi nous mettre un 20/20 !\n-------------------------\n")
    else: 
        print(" ----------------\n Vous avez perdu !  Mais vous pouvez qaund mettre un 20/20...\n ----------------")
        print("La bonne combinaison était,",liste1,".")
        nb_try = 5
        menu()



def menu():
    print("-----MENU PRINCIPAL-----")
    print("------------------------")
    print("1 - Je veux jouer\n")
    print("2 - Je veux arrêter de jouer\n")
    choix_m=int(input("Sélectionnez votre choix : "))
    if choix_m==1:
        random.shuffle(liste1)
        play()
    else :
        menu()


menu()

Fonctionnement du programme

1- Menu
2- Choix de combinaison
3- Indices
4- Gagné / perdu

Évolution du programme

Le processus de création s’est divisé en différentes parties.

Définir les listes
Tout d’abord nous avons définies la liste de l’ordinateur liste1 et la liste du joueur liste2 .

liste1 = [1,2,3,4,5,6,7,8,9]

random.shuffle(liste1)

liste2 = [0,0,0,0,0,0,0,0,0]

nb_try = 5

n = 0

def choix():
    global n
    global nb_try
    n = 0
    nb_try -= 1
    var = input("Entrez votre combinaison  : ")
    for i in range(9):
        liste2[i] = int(var[i])

La fonction random.shuffle(liste1) sert à mélanger aléatoirement la liste. La fonction choix permet au joueur de composer sa nouvelle combinaison de chiffre, tout en enlevant 1 essai à chaque nouvelles combinaisons.

L’esthétique du jeu
Nous avons ensuite écrit les règles du jeu :

def regle():
    print("-----------------------------------\n")
    print("Bienvenue dans le jeu du Mastermind !\n")
    print("Les règles sont simple, l'ordinateur choisis une combinaison de 9 chiffres allant de 1 à 9 inclu, à vous de trouver la bonne combinaison grâce aux indications qui vous seront fournis.\n")
    print("Bonne chance !")

Les indices
Pour cela nous avons utilisé des signes mathématiques pour créer des conditions avec les fonctions if , elif , else .

def regle_n(n):
    if liste1[n] == liste2[n]:
        print(liste2[n],"est juste")
    elif liste1[n] < liste2[n]:
        print(liste2[n],"est plus grand que celui que tu cherches")
    else:
        print(liste2[n],"est plus petit que celui que tu cherches")

Réunir tout les éléments
Pour réunir toutes ces fonctions, nous avons créé la fonction play() qui appelle d’autres fonctions. Une boucle while est indispensable pour que la fonction choix() et regle_n() se répète jusqu’à ce que la boucle while se casse grâce à deux cas de figure.

def play():
    global nb_try
    global n
    regle()
    while liste1 != liste2 and nb_try > 0:
        print("-------------------\n")
        choix()
        for i in range(9):
            regle_n(n)
            n += 1
    if liste1 == liste2:
        print(" -------------------------\n Bravo ! Vous avez gagné ! Vous pouvez ainsi nous mettre un 20/20 ! \n-------------------------\n")
    else:
        print(" ----------------\n Vous avez perdu ! Mais vous pouvez qaund mettre un 20/20...\n ----------------")
        print("La bonne combinaison était,",liste1,".")
        nb_try = 5
        menu()

Les deux cas de figure qui cassent la boucle sont gagner ou perdre. Pour cela on utilise les conditions if et else.

Menu
Pour finir ce programme python, nous avons tous réunis dans la fonction menu() , la fonction est intégrée d’un menu qui permet à l’utilisation de jouer ou non, c’est purement esthétique.

def menu():
    print("-----MENU PRINCIPAL-----")
    print("------------------------")
    print("1 - Je veux jouer\n")
    print("2 - Je veux arrêter de jouer\n")
    choix_m=int(input("Sélectionnez votre choix : "))
    if choix_m==1:
        random.shuffle(liste1)
        play()
    else :
        menu()

Problèmes rencontrés

A la fin du processus de création nous nous sommes heurtés à de nombreux problèmes, le premier étant la taille du code, mais on a réussi à le réduire grâce à la variable [n] lors de la fonction regle_n .

Deuxièmement, Nous avons voulu faire une interface graphique mais on a revisité le jeu du Mastermind avec une combinaison de chiffre au lieu d’une combinaison de couleur, donc le rendu n’allait pas être très jolie, nous avons donc oublié l’idée de faire une interface graphique.

Anecdote

Pour l’anecdote, il faut savoir que nous voulions originellement créer un jeu uno ! Mais suite à de nombreuses difficultés, notamment la gestion de la pioche pour deux joueurs, nous nous sommes réorientés vers un mastermind.

Conclusion 

j’espère que notre projet vous a intéressé !
Amusez-vous bien !

Crédits / Remerciements 

Un grand merci à nos deux professeurs de NSI en première qui nous ont appris a se servir du langage Python.

Téléchargement