Ajouter un historique
La première modification du jeu de base à consisté à étendre la map et à ajouter des directions pour augmenter le game play.
L’objectif de cette partie est de commencer à ajouter des fonctionnalités supplémentaires pour rendre le jeu plus intéressant.
GitHub stuff
Ouvrir la [REPOSITORY_HOMEPAGE]
et démarrer le codespace associé :
Code Codespaces
A partir du terminal du codespace, récupérer la dernière version du jeu depuis votre dépôt
$ git pull
Utiliser l’extension GitLens
pour examiner l’historique des commits, et en particulier les différences entre la version actuelle et la version précédente.
Construire un historique
Pour conserver l’historique des lieux visités, et donner au joueur la possibilité de revenir sur ses pas automatiquement, on va ajouter une structure de données permettant de mémoriser les lieux visités.
Quelle est la classe concernée par cette modification ?
Quelle est le type d’objet le plus adaptée pour mettre en oeuvre un historique ?
Sur cette structure de données, quelle est la méthode adaptée pour ajouter un lieu à l’historique ?
Sur cette structure de données, quelle est la méthode adaptée pour revenir en arrière ?
Quelle fonction retournant une propriété essentielle de la structure de données faut il utiliser lors de multiples retours en arrière ?
Si le retour est possible, quel attribut de la classe concernée par la modification faut il mettre à jour ?
Au démarrage du jeu, l’historique doit il être initialisé avec le lieu dans lequel se trouve le joueur ? Pourquoi ?
Au démarrage du jeu, l’historique doit il être vide ? La raison est la même que celle invoquée à la question précédente.
A faire
Après avoir répondu aux questions ci dessus, implémentez les modifications correspondantes :
ajouter un attribut
history
à la classe pertinente. Laquelle est ce ?utilisez les réponses ci dessus pour savoir comment il doit être initialisé ;
comment doit il être mis à jour lors d’un déplacement du joueur ?
l’historique contient il la pièce dans laquelle démarre le joueur ? Pourquoi ?
Une fois l’implémentation effectuée, répondez aux questions du quiz qui auraient été laissées en suspens.
A faire
Ecrire une méthode get_history()
qui retourne une chaine de caractères représentative de l’affichage des pièces visitées. Il est pertinent de faire un appel à get_history()
après chaque déplacement du joueur. Un exemple d’exécution est donné ci-dessous. Notez que l’historique est mis à jour à chaque tour.
Vous êtes dans un marécage sombre et ténébreux. L'eau bouillonne, les abords sont vaseux.
Sorties: N, O
> go n
Vous êtes dans une immense tour en pierre qui s'élève au dessus des nuages.
Sorties: N, S, O
Vous avez déja visité les pièces suivantes:
- un marécage sombre et ténébreux
> go n
Vous êtes dans un petit chalet pittoresque avec un toit de chaume. Une épaisse fumée verte sort de la cheminée.
Sorties: S, O
Vous avez déja visité les pièces suivantes:
- un marécage sombre et ténébreux
- une immense tour en pierre qui s'élève au dessus des nuages
Déplacez vous dans la map pour vérifier que l’historique est bien mis à jour à chaque tour.
A faire
Associer une commande history
, associée à la méthode get_history()
écrite précédemment, pour permettre au joueur de consulter son historique à tout moment. La commande history
doit être déclarée dans la liste des commandes disponibles.
Retourner en arrière
Pour permettre au joueur de revenir en arrière, on va exploiter la structure de données identifiée à l’étape précédente en ajoutant une commande back
à la disposition du joueur. A l’issue de cette modification, les commandes disponibles seront donc :
go
: pour se déplacer dans une directionback
: pour revenir en arrièrequit
: pour quitter le jeuhelp
: pour afficher l’aide
Avertissement
Les énumérations doivent être séparées par une virgule suivie d’un seul espace. Exemple : a, b, c
.
Quelle est la classe concernée par la définition de la commande
back
?Quels sont ses paramètres ?
Quel est l’objet impacté directement par la commande
back
?Peut on l’atteindre directement ?
ou doit on l’atteindre en tant qu’attribut d’un autre objet ?
Quel est cet objet ? Utiliser la chaine vide
""
pour indiquer qu’on peut atteindre cet objet directement.Peut on activer la commande
back
sans limite ?Sinon, quelle fonction doit on utiliser sur l’historique pour vérifier que le retour en arrière est possible ?
A faire
Après avoir répondu à ces questions, implémentez les modifications correspondantes en vous inspirant des fonctions déjà écrites.
Ne pas oublier de déclarer la commande back
dans la liste des commandes disponibles.
A faire
Il est pertinent d’appeler également get_history()
après chaque retour en arrière. Un exemple d’exécution est donné ci-dessous. Notez que le joueur ne peut revenir en arrière que si il a déjà effectué un déplacement.
Vous êtes dans une forêt enchantée. Vous entendez une brise légère à travers la cime des arbres. Sorties: N, E, S Vous avez déja visité les pièces suivantes: - un marécage sombre et ténébreux - une immense tour en pierre qui s'élève au dessus des nuages - un petit chalet pittoresque avec un toit de chaume - une grotte profonde et sombre > back Vous êtes dans une grotte profonde et sombre. Des voix semblent provenir des profondeurs. Sorties: E, S Vous avez déja visité les pièces suivantes: - un marécage sombre et ténébreux - une immense tour en pierre qui s'élève au dessus des nuages - un petit chalet pittoresque avec un toit de chaume
Vérification
Déplacez vous dans la map et vérifier que l’historique est correctement utilisé lors des appels à
back
.Que se passe t-il lorsqu’on est revenu au point de départ après une suite de
back
?
La suite…
A cette étape, votre dépôt doit contenir les seuls fichiers suivants :
actions.py
command.py
game.py
player.py
room.py
Le jeu doit être fonctionnel et avoir intégré les consignes précédentes. La commande
$ python game.py
doit pouvoir permettre d’activer la fonction back
sans erreur.
GitHub stuff
Enregistrer les modifications apportées aux fichiers dans le repo local au codespace
$ git add .
$ git commit -m "Ajouter un historique"
Pour référencer plus facilement cette version dans le futur, créer un tag
$ git tag v3
Synchroniser votre codespace avec votre dépôt GitHub
$ git push
Vérifier que les modifications sont bien présentes dans le dépôt GitHub.