Le but de l'exercice est d'améliorer le précédent programme de devinettes.
Vous devez réaliser le programme entier par vous même, sans poser de questions à l'enseignant, afin de vous préparer aux conditions d'examen. Vous disposez de l'accès à internet et de toutes les documentations qui s'y trouvent. Le programme devra être divisé en fonctions, avec des commentaires dans le code.
Modifiez le précédent programme pour ajouter un niveau de difficulté supplémentaire, “moyen”, qui donne 6 tentatives.
Le choix sera donc le suivant : 1 - facile (8 tentatives) 2 - moyen (6 tentatives) 3 - difficile (4 tentatives) Vous devrez donc modifier la fonction qui permet de choisir la difficulté, mais également la fonction qui calcule le nombre de tentatives disponibles.
A la fin d'une partie, le joueur obtient un score. Ce score est calculé en cas de victoire en multipliant le nombre de tentatives restantes par N_MAX. Si le joueur n'a pas trouvé le nombre mystère, le score est égal à N_MAX - valeur_absolue(nombre_mystère - dernière_valeur_joueur)
Rappel N_MAX est la valeur maximale du nombre mystère, définie dans votre code.
Indication : Pour utiliser la valeur absolue en python, il suffit de faire
abs(valeur)
. Par exemple, abs(-1) retournera 1. Cela permet d'avoir un score positif.
De la doc en FR sur les fonctions de base de python, dont abs()
Faites donc une fonction qui permet de calculer le score en cas de victoire, et qui prend comme paramètre le nombre de tentatives restantes; Une seconde fonction qui calcule le score en cas de défaite prendra en paramètres le nombre mystère et la dernière proposition du joueur.
Nous allons maintenant modifier le déroulement de la partie, qui se déroule en plusieurs manches. Le nombre de manches est défini dans le code par une constante N_MANCHES. Dans cette variantes, on répète plusieurs manches, chaque manche consistant à deviner le nombre mystère, comme avant. A la fin d'une manche, le joueur récupère toutes ses tentatives/vies, et un nouveau nombre mystère est généré.
Quand toutes les manches sont finies, l'ordinateur indique le résultat de la partie :
Le score de la partie est la somme des scores de chaque manche. Cela signifie que vous devez créer une nouvelle variable score_total qui débute à 0. Il faudra donc ajouter à cette variable score_total le score de la manche à la fin de celle ci.
A la fin de chaque partie, quand toutes les manches sont écoulées, trois choix sont proposés au joueur :
Il faudra donc faire une fonction qui affiche un menu avec les options disponibles et fait l'action demandée. Indication Pour quitter le programme, on fera en début de code :
import sys
Et à l'endroit ou on souhaite quitter, on fera :
sys.exit(1)
Nous allons maintenant modifier le jeu pour ajouter des bonus et des malus, afin de le rendre plus intéressant.
A la fin de chaque manche perdue, N_MAX sera augmentée d'un cinquième de sa valeur.
Pour calculer cela, on utilise l'opérateur de division entière :
malus = n_max // 5
Bien sur, il faudra ajouter ce malus à n_max.
Indication En python, la convention est d'écrire les variables en minuscule , comme ceci : variable ou autre_variable , et d'écrire les constantes en majuscules, comme N_MAX. Puisque nous allons modifier la valeur de N_MAX au cours de la partie, ce n'est plus une constante, mais une variable. On va donc remplacer N_MAX par n_max dans le code. Pour cela, utilisez l'outil recherche et remplacement de Atom, en appuyant sur la touche F3.
A la fin de chaque manche ou de chaque partie, le joueur peut dépenser X points pour acheter une vie pour la partie suivante, avec
X = n_max + n_max // 2
.
Il peut également dépenser 10 * n_max points pour réduire n_max de 25% :
n_max = n_max - ( n_max // 4)
En pratique, cela signifie que vous devez proposer à la fin de chaque manche/partie un menu qui propose au joueur de faire des achats. On affichera derrière chacune des deux options le prix en points, et le score du joueur devra être visible au dessus de la liste des achats possibles. Une dernière option sera toujours disponible : passer à la manche suivante, qui ne coute rien.
Si le joueur décide de faire un achat, l'ordinateur vérifie s'il a assez de points pour effectuer l'achat. Si ce n'est pas le cas, alors l'ordinateur affichera “vous n'avez pas assez de points”. Si en revanche le joueur dispose d'assez de points, alors il obtient le bonus, et son score est diminué du montant de l'achat.
Pour ceux qui ont tout fini : Cherchez comment sauvegarder dans un fichier (idéalement json) la liste des meilleurs scores, et permettez aux joueurs de voir cette liste dans le jeu. Idéalement, on limite la liste (par exemple les 3 meilleurs scores), ce qui incite à battre les scores des autres pour insérer le sien dans le classement.