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.

Faites une copie du répertoire v2 dans un répertoire v3. A partir de maintenant, vous travaillerez dans le répertoire v3.

Démarrer Visual Studio Code et ouvrir le répertoire v3 avec File > Open Folder....

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 la structure de données la 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 ?

A faire

Après avoir répondu à la plupart de ces questions, implémentez les modifications correspondantes :

  • ajouter un attribut history à la classe pertinente ;

  • comment doit il ê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.

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 répertoire v3 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.