Outils pour utilisateurs

Outils du site


Panneau latéral

Navigation

Plan auto

programmation:python:prob3

Problème 2 bis

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.

Ajout d'un niveau de difficulté supplémentaire

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.

Calcul du score d'une partie

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.

Partie en plusieurs manches

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 :

  • Victoire si le joueur a gagné plus de la moitié des manches;
  • Égalité si le joueur a gagné autant de manches qu'il n'en a perdues;
  • Défaite si le joueur a gagné moins de la moitié des manches.

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.

Mode continu

A la fin de chaque partie, quand toutes les manches sont écoulées, trois choix sont proposés au joueur :

  1. continuer la même partie : le score est conservé
  2. nouvelle partie : le score est remis à zéro
  3. quitter : le jeu se termine.

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)

Bonus et malus

Nous allons maintenant modifier le jeu pour ajouter des bonus et des malus, afin de le rendre plus intéressant.

Ajout de malus

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.

Ajout de bonus

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.

Sauvegarde du score

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.

programmation/python/prob3.txt · Dernière modification: 19/11/2018 06:00 par sky99