Skip to content

Pendu

Consignes

Minimum

Etape :

  • (etape 0) tirage d'un mot (mot à trouver) de façon aléatoire parmi une liste de mots => ex : [“gagne”, “raptor”, “bouteille”] …
  • (etape 1) boucle de jeu (tant que) :
  • La personne saisie une lettre

    • 3 possibilités ensuite :

      • Si la lettre n'existe pas dans le mot à trouver alors pénalité (voir (A))
      • Si la lettre existe dans le mot alors on continue, et on affiche ou se situe la lettre dans le mot (voir (C))
      • Si la lettre existe dans le mot MAIS a déjà été tapé alors on ne met pas de pénalité et on indique à l'utilisateur que la lettre a déjà été saisie (voir (B))
    • Sortie de boucle :

      • si essai > 10 on arrête
      • si toutes les lettres sont trouvées on arrête

Sous étape :

  • (A) affichage de la progression des pénalités, par exemple avec un dessin fait en chaine de caractère
  • (B) affichage des lettres déjà saisies par l’utilisateur => ex : “ t, g, e “ déjà saisies
  • (C) affichage des lettre déjà trouvé dans le mot à la bonne position => ex : “ g _ g _ e “

Bonus

  • un diagramme d’activité général du jeu (avec les bonus si il y’en a)
  • ajouter un menu pour les options, affiché entre chaque essai
  • entre chaque essai, possibilité de saisir le mot directement si le joueur pense avoir deviné ( menu : S / Saisir une lettre, D / Saisir le mot), prévoir une pénalité si c’est faux
  • proposer au joueur des indices (contre une pénalité) sur le mot (menu I / Indice)
  • ajouter un système de points en plus des pénalités : 2 points gagné si la lettre est bonne, retirer 3 points si la lettre est fausse (minimum à zéro), possibilité d’acheter des indices (pour 5 points) sans pénalité
  • proposer au joueur de rejouer une partie si il gagne (menu : C / Continuer, A / Arrêter)
  • proposer une difficulté croissante dans les mots proposés, si le joueur gagne on peut passer au niveau suivant

Tips

  • Les mots sont des listes, seulement accessible en lecture
mot = "salut!"
print(mot[3])
mot[3] = "e" #erreur, on ne peut pas écraser la valeur

# pour écraser la valeur il faut parcourir le mot et en créer un nouveau avec un tableau

mot_remplace = []
for i in range(len(mot)):
    if mot[i] == "u":
        # on remplace !
        mot_remplace.append("e")
    else:
        mot_remplace.append(mot[i])

print(mot_remplace)
# on transforme le tableau de caractere en chaine de caractere
jointure = "".join(mot_remplace)
print(jointure)
  • Il y a au moins deux façon de parcourir des listes
mot = "abc" # équivalent de [“a”,”b”,”c”]
# via les indices
for i in range(len(mot)):
    print(mot[i])

# via les éléments directement 
for e in mot:
   print(e)
  • Pour gérer les accents, ajouter tout en haut de votre programme
# -*- coding: utf-8 -*- 
  • Pour tester la présence d’un élément dans une liste
lettre = "a"
mots = "baba" 
mots2 = "coucou"
if lettre in mots :
    print("trouve")

if lettre in mots2 :
    print("trouve")
  • Pour intercaler un caractère (ex "_") dans une chaîne
# intercaler un caractère dans une chaine de caractère
mots1 = "baba"
jointure = "_".join(mots1)
print(jointure)

# transformer un tableau vers chaine de caractère
mots2 = ["b","a","b","a"]
jointure = "".join(mots2)
print(jointure)
  • Pour un affichage plus travaillé des données stockées dans une console

Voir https://docs.python.org/fr/3.9/library/string.html

ligne = "blabla \n blabla \n blabla"
print(ligne)

lignes = [ "xxxxxxx","yyyyyyy","zzzzzzz"]
valeurs = [0,1,2]
for i in range(len(lignes)):
    print("ligne {:d} = {:<20s} /  {:<10d}".format(i, lignes[i], valeurs[i]))