Python [Tuto] Le jeu du Plus ou Moins

Loïc

Membre du personnel
Super-Modo
30/6/21
10
1 113
79
33
Bonjour à tous,

Aujourd'hui je vous propose de réaliser un petit jeu en Python : le jeu du Plus ou Moins.
Je pars du principe que vous avez déjà Python d'installé sur votre machine, si besoin d'aide pour l'installation, signalez-le en commentaire.

On va commencer par créer un dossier "PlusOuMoins" avec un fichier "main.py" (nous n'utiliserons que ce fichier pour ce tuto).
Nous allons structurer notre fichier de la façon suivante: Import, Variables, Fonctions.

Importations et variables de base

Python:
# Import
import random as rd
La première ligne est un commentaire, je les utilise ici pour séparer les différentes parties du code.
La seconde ligne importe les fonctions Random (qui utilise l'alias rd) qui permet de choisir un nombre de façon aléatoire.

Python:
# Variables
min = 1 # Nombre minimum
max = 100 # Nombre maximum
tours = 10 # Nombre de tours
Ici je prépare mes variables globales, qui nous serviront tout au long du tuto, dont la valeur ne bougera pas.

La base du programme

Python:
# Fonctions
def main():
txt_entree = "Bienvenue \nVoici le jeu du Plus ou Moins. \nVous devrez deviner le bon nombre en maximum " + str(tours) + " tours. \nA vous de jouer !"

print(txt_entree)
jeu()

# Programme
if __name__ == "__main__":
main()
Toutes nos fonctions seront écrites après la fonction main et avant le commentaire Programme. Pour rappel, en Python on définit les fonction avec le mot-clé def
La condition sous le commentaire programme permet de choisir l'action si le script est exécuté directement. On peut ajouter une condition si le script est appelé depuis un autre script par exemple.
Maintenant, voyons le contenu de la fonction main().
La première ligne définit une variable avec du texte (string).
La ligne suivante est une fonction permettant d'afficher la variable.
Enfin, la dernière ligne de la fonction appelle la fonction jeu.
Petit rappel : en Python, on indente son code quand on utilise les fonctions, classes et conditions.

Au tour des fonctions
1. La fonction jeu, le corps du programme


Python:
def jeu():
nombre_random = rd.randint(min, max)

for i in range(tours):
print("Tour " + str(i + 1) + " : ")
choix = choix_nombre()
gagne = verification_nombre(nombre_random, choix)

if gagne == True:
break
elif gagne == False and i + 1 == tours:
print("Perdu :-(\nLe nombre à trouver était : " + str(nombre_random))

encore = rejouer()

if encore == True:
jeu()
else:
print("Au revoir...")
input("Pressez une touche pour sortir.")
On commence par choisir le nombre à trouver (variable nombre_random) à l'aide de la fonction random.
Ici j'utilise randint (pour ne choisir que des entiers), on aurait également pu utiliser randrange. petit rappel, on appelle Random à l'aide du préfixe rd défini lors de l'import.

Après, j'utilise une boucle for que je ne quitte que quand j'ai épuisé le nombre de tours de jeu (défini dans la variable tours et vérifié avec la variable auto-incrémentée i) ou quand je gagne.
A chaque tour, j'affiche le numéro du tour, je récupère le nombre que l'utilisateur joue (j'expliquerai les autres fonctions après) et je vérifie si le nombre choisit est le bon.
Si le nombre choisit est le bon (if gagne == True), j'exécute un break qui me permet de quitter ma boucle for.
Sinon, je vérifie (avec la condition elif) que l'on n'a toujours pas gagné ET que l'on est au dernier tour de jeu. Si les deux conditions de mon elif sont remplies, on affiche un message disant que l'on a perdu.
Attention, en Python on utilise elif plutôt qu'else if

On appelle ensuite la fonction rejouer, et l'on enregistre le résultat dans la variable encore.
Si elle vaut True, on relance une partie. Sinon on quitte le programme.

2. La fonction choix_nombre, qui permet de jouer

Python:
def choix_nombre():
try:
entree = int(input("Nombre choisi (entre " + str(min) + " et " + str(max) + ") : "))

if entree < min or entree > max:
print("Veuillez choisir un nombre entre " + str(min) + " et " + str(max) + " : ")
entree = choix_nombre()
except Exception as e:
print("Ceci n'est pas un nombre ! ")
entree = choix_nombre()

return entree
On commence par définir des blocs try / except. Si le nombre que l'on enregistre dans la variable entree est bien un nombre, on continue dans ce bloc. Sinon, le programme lève une exception et exécute le bloc except, signalant que ce n'est pas un nombre qui a été choisi, appelant à nouveau la fonction (c'est ce qu'on appelle une fonction récursive).
Si le nombre choisi dans l'input est bien un nombre, on vérifie dans le if qu'il rentre bien dans les valeurs minimales et maximales définies. S'il ne rengtre pas dedans, on rappelle à nouveau la fonction (toujours de façon récursive) jusqu'à obtenir un nombre valide.
On termine cette fonction en renvoyant à l'aide de l'instruction return le nombre choisi (variable choix dans la fonction jeu)

3. La fonction verification_nombre, qui décide de si l'on gagne (ou pas)

Python:
def verification_nombre(nombre_random, nombre):
nombre_trouve = False
if nombre == nombre_random:
print("Bravo, c'est gagné \o/ !")
nombre_trouve = True
elif nombre < nombre_random:
print("C'est plus grand...")
else:
print("C'est plus petit...")

return nombre_trouve
Pour commencer, cette fonction prend deux paramètres obligatoire (les variables nombre_random et nombre).
On commence par définir à False une booléenne nombre_trouve.
Puis on vérifie si nombre et [nombre_random] sont équivalent.
Si oui, on affiche le message disant que c'est gagné, et on passe la booléenne à True.
Sinon, on affiche un message suivant si le nombre à trouver est plus grand ou plus petit.
Finalement, on retourne la valeur du boolean.

4. La fonction rejouer, parce que l'utilisateur a peut-être envie de recommencer

Python:
def rejouer():
choix = input("\nVoulez-vous rejouer? (Oui - Non)")
if choix.lower() == "oui" or choix.lower() == "o":
jouer_encore = True
elif choix.lower() == "non" or choix.lower() == "n":
jouer_encore = False
else:
print("Je n'ai pas compris votre choix !")
jouer_encore = rejouer()
return jouer_encore
Voila, c'est déjà la dernière fonction du programme. Si cette fonction s'affiche, cela signifie que le jouer a fini sa partie.
Ce serait un peu long de relancer à la main le programme chaque fois que l'on finit sa partie, non?
Alors, on demande à l'utilisateur à l'aide d'un input s'il veut rejouer, et l'on enregistre ce choix dans la variable choix.
A l'aide de notre condition if, on vérifie si le joueur veut continuer.
Le choix.lower() permet de mettre le contenu de la variable en minuscule (on peut utiliser upper() pour mettre en majuscule). On vérifie si cela correspond à oui ou o (oui, parfois une lettre pour choisir c'est bien aussi, j'aurai également pu ajouter yes et y).
Si oui, on défini la variable jouer_encore à True.
Sinon, on vérifie qu'un non (ou n) est rentré, et on défini la variable à False.

Et si l'utilisateur rentre autre chose?
Il reste la condition else, qui signale à l'utilisateur que le choix n'est pas valide. On lance une récursive sur la fonction, jusqu'à ce que l'utilisateur rentre un choix valide pour le programme.
On fini par retourner à la fonction jeu le résultat, et c'est à ce moment que le programme décide de relancer la fonction jeu si demandé par l'utilisateur.

Le code se trouve en pièce jointe, pour le faire tourner, enlevez l'extension .txt .


Voila, j'espère que ce petit tuto vous aura plu. N'hésitez pas à laisser un commentaire dessus, ou demander des explications si besoin.
Et si vous aimez, d'autres tutos verront le jour.

A bientôt ;)
 

Fichiers joints

Mobile app for XenForo 2 by Appify