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.

  1. Quelle est la classe concernée par cette modification ?

  2. Quelle est le type d’objet le plus adaptée pour mettre en oeuvre un historique ?

  3. Sur cette structure de données, quelle est la méthode adaptée pour ajouter un lieu à l’historique ?

  4. Sur cette structure de données, quelle est la méthode adaptée pour revenir en arrière ?

  5. Quelle fonction retournant une propriété essentielle de la structure de données faut il utiliser lors de multiples retours en arrière ?

  6. Si le retour est possible, quel attribut de la classe concernée par la modification faut il mettre à jour ?

  7. Au démarrage du jeu, l’historique doit il être initialisé avec le lieu dans lequel se trouve le joueur ? Pourquoi ?

  8. 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 direction

  • back : pour revenir en arrière

  • quit : pour quitter le jeu

  • help : 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.

  1. Quelle est la classe concernée par la définition de la commande back ?

  2. Quels sont ses paramètres ?

  3. Quel est l’objet impacté directement par la commande back ?

  4. Peut on l’atteindre directement ?

  5. ou doit on l’atteindre en tant qu’attribut d’un autre objet ?

  6. Quel est cet objet ? Utiliser la chaine vide "" pour indiquer qu’on peut atteindre cet objet directement.

  7. Peut on activer la commande back sans limite ?

  8. 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.