Cours d'introduction au langage de programmation Python

N.B. Niveau : Terminale S, enseignement de spécialité ISN (Informatique et Sciences du Numérique)

Mini Projet - Le Jeu du MOTUS

Par binôme vous allez travailler de manière collaborative pour élaborer le jeu du pendu version graphique avec turtle.

Cahier des charges

La partie se joue en 7 coups maxi
L’ordinateur doit choisir  un mot de 8 lettres aléatoirement dans une liste
L’utilisateur doit trouver le mot de 8 lettres en proposant un mot de 8 lettres.
L'ordinateur indiquer au joueur les lettres bien placées et mal placées par un code couleur et afficher le résultat des lettres trouvées ou mal placées dans une grille.
Si le joueur trouve le mot en moins de 8 coups il gagne et la partie peu recommercer ou pas.

Vous pouvez essayer d'y jouer ici : https://motus.absolu-puzzle.com/


Interface de notre jeu :


Grille

Liste des fonctions

Nom de la fonctionParamètres d'entréesRetourVariables globalesdurée
• Init_jeu()aucun
aucun30 min
• Choix_Mot()aucunle mot de 8 lettreslettres_trouvees20 min
• Verification()aucunaucun30 min
• Position_lettres(mot_saisi)mot_saisi
chaine de caractère du placement des lettreslettres_trouvees30 min
• Code_couleur(coul,prop)code couleur et proposition saisieaucuncoup, mot20 min
• Placer_lettres(coups,lettres,coul)nbr de coups, lettres, code couleuraucun20 min

Le nom du fichier portera le nom de la fonction.

Role des focnctions :

    Choix_mot()

Cette fonction permet de choisir aléatoirement un mot de 8 lettres dans une liste et de le retourner dans la variable mot.
Déclarer la variable globale lettre_trouvees
Initialiser cette variable avec le contenu suivant : ['.','.','.','.','.','.','.','.']
Initialiser la variable mot liste des mots suivante : ['ACCAPARA',................,'DENOTANT']
choisir aléatoirement un mot de la liste
Modifier le premier élément de la liste des lettres_trouvees par la première lettre du mot choisi   
                                                               (Exemple pour MOULATES : lettres_trouvees=['M','.','.','.','.','.','.','.'])
Retourner le mot

    Init_jeu()   

Cette fonction dessine le plateau de jeu comprenant :

• une grille de 8 colonnes et 8 lignes sur fond bleu,
• 7 lignes de points  et une ligne vide,
• une zone de saisie
• un bouton Valider

Voir figure ci-contre:


Aide :
utiliser des boucles for pour implanter les labels dans la grille

Code tkinter pour placer le point dans une colonne de la grille :


e = Label(fenetre, text='.', background=couleur,font=(None,20),foreground='#FFF')
e.grid(row=ligne, column=col,columnspan=1, sticky=E+W,ipadx=15,ipady=10,padx=1,pady=1)


Code de la zone d’entrée et le bouton valider


Champ = Entry(fenetre,font=(None,20), textvariable= Proposition)
Champ.focus_set()
Champ.grid(row=9,column=0,columnspan=6,pady=10, padx=10)
Bouton = Button(fenetre, font=(None,12),text ='Valider', command = Verification)
Bouton.grid(row=9,column=6,columnspan=2,pady=10,padx=20, sticky=E+W)


La variable coups permettra de compter le nombre d’essai mais également d’afficher les lettres trouvées sur la ligne concernée

    Fonction Verification() 

Elle sera appelée lorsque l’utilisateur clique sur le bouton valider : 
Récupérer le mot de 8 lettre saisi dans le champ entry
Si le mot ne contient pas 8 lettres   
    un avertissement apparait
Sinon
    On appelle la fonction qui renvoie qui renvoie la position des lettres trouvées
    On appelle une fonction qui affiche le code des couleurs et qui affiche les lettres trouvées
    Si la position des lettres renvoyées indique qu’elles sont bien placées ou qu’il y a eu 7 coups
        Si elles sont bien placées c’est gagné
    Sinon c’est perdu et on appelle la fonction qui place le mot à trouver sur fond rouge dans la dernière ligne de la grille
On demande à l’utilisateur s’il veut rejouer
Si c’est non on quitte la fenetre (fenetre.quit())
Sinon on remet les coups à 0, on cherche un nouveau mot et on place la première ligne de la grille.

    Position_lettres(mot_choisi)

Déclarer la variable globale lettres_trouvees et mot
Déclarer une variable placement de type string vide.
Pour i de 0 à 8 :
Comparer chaque lettre du mot_choisi et du mot à trouver
Si les lettres sont égales
ajouter ‘1’ à la chaine placement et placer la lettre dans lettres_trouvées
    sinon
        si la lettre choisie se trouve dans le mot à trouver
            ajouter ‘2’ à la chaine placement
        sinon
            ajouter ‘3’ à la chaine placement
retourne la valeur de la chaine placement

    code_couleur(coul,prop)

Déclarer la variable globale coups et mot

Pour i de 0 à 8 :
    Si l’élément de rang i de la liste coul est ‘1’:
        Alors mettre la variable bgcol avec un code couleur verte
        Affecter à la variable lettre, la lettre du rang i du mot à trouver
    Sinon si l’élément de rang i de la liste coul est  ‘2’:
        Alors mettre la variable bgcol avec un code couleur orange
        Affecter à la variable lettre, la lettre du rang i du mot proposé
    Sinon:
        mettre la variable bgcol avec un code couleur bleu
        affecter à la variable lettre, la lettre du rang i du mot proposé
    Placer le label dans la fenetre contenant le texte de lettre avec une couleur d'arriere plan bgcol et une couleur d'avant plan blanche
    Placer le label dans la grille rangée coups, colonne i

Incrémenter le nombre de coups       

    Placer_lettres(coups,lettres,coul):

Mettre la variable col à 0
pour chaque lettre se trouvant dans la liste des lettres faire :
    placer un label contenant la lettre à la ligne coups, rangée col, de couleur de fond coul, d'ecriture blanche
    incrémenter col

Résultat :


Programme principal

Importer les différentes librairies
Initialiser les variables : mot='', lettre_trouvees=[], coups=0 , Proposition=Stringvar()

appeler la fonction permettant de choisir aléatoirement le mot de 8 lettres et stocker le résultat dans la variable mot
initialiser le jeu
Placer les lettres trouvées sur fond bleu

Mainloop


planifier le travail (environ 2h / personne)

En rouge Elève 1
En orange Elève 2

gant

Téléchargez le Miniprojet, décompressez les fichier dans vos documents et complétez les fonctions : MiniProjet