Ajouter des quêtes

L’objectif de cette partie est d’ajouter des quêtes au jeu. Les quêtes permettront de guider le joueur dans son aventure en lui donnant des objectifs à atteindre.

Initial GitHub stuff

Ouvrir le codespace associé au repo que vous avez forké ou le dossier local si vous avez cloné le dépôt. Vous pouvez travailler alternativement dans le codespace ou en local si vous avez synchronisé votre travail avec le repo forké à la fin de chaque chapitre (section « Final GitHub Stuff » du chapitre précédent).

A partir du terminal, 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.

Pour ce chapitre vous devez récupérer une nouvelle branche depuis le dépôt initial (le dépôt que vous avez forké au tout début du projet). Suivez les instructions ci-dessous pour ajouter cette branche à votre dépôt local et à votre fork sur GitHub.

Vérifier que le dépôt initial est bien configuré comme dépôt distant nommé upstream

$ git remote -v

origin      git@github.com:username/TBA.git (fetch)
origin      git@github.com:username/TBA.git (push)
upstream    https://github.com/DanielCourivaud/TBA.git (fetch)
upstream    https://github.com/DanielCourivaud/TBA.git (push)

Si le dépôt upstream n’apparaît pas, l’ajouter avec la commande

$ git remote add upstream https://github.com/DanielCourivaud/TBA.git

Maintenant que le dépôt upstream est configuré, récupérer la nouvelle branche nommée tba-quests depuis ce dépôt

$ git fetch upstream

Switcher sur la nouvelle branche tba-quests

$ git switch tba-quests

Votre dépôt local pointe maintenant sur la branche tba-quests qui contient les modifications apportées pour ce chapitre.

Note

La branche main est toujours présente dans le dépôt local mais ce n’est plus elle qui est active

$ git branch
main
* tba-quests

main contient le travail jusqu’au chapitre précédent. On peut changer de branche à tout moment avec la commande git switch <branch-name>.

Sur la branche tba-quests, vérifier qu’un fichier quest.py est présent dans le répertoire. Ce fichier est fourni et contient les classes Quest et QuestManager qui permettront de gérer les quêtes dans le jeu

$ ls -1
actions.py
command.py
game.py
player.py
quest.py
README.md
room.py

Observations des modifications globales

Pour observer les modifications apportées dans cette branche, identifier d’abord les fichiers mis en jeu. Ici la branche main est utilisée comme référence

$ git diff --name-status main tba-quests
A       .gitignore
M       actions.py
M       command.py
M       game.py
M       player.py
A       quest.py
M       room.py

Note

Par rapport à la branche main, la lettre A indique qu’un fichier a été ajouté, la lettre D indique qu’un fichier a été supprimé, et la lettre M indique qu’un fichier a été modifié.

On observe que les fichiers .gitignore et quest.py ont été ajoutés, et que les autres fichiers ont été modifiés.

A faire

Se renseigner sur le rôle du fichier .gitignore et examiner son contenu. Quelle est la signification des lignes ajoutées ?

Le fichier quest.py contient les classes nécessaires pour gérer les quêtes dans le jeu. On examinera son contenu ultérieurement.

Observation des fichiers modifiés

Les modifications des fichiers command.py et room.py ne modifient pas leur comportement. Elles ajoutent quelques doctest et implémentent de manière plus satisfaisante aux bonnes pratiques de codage.

On peut examiner les modifications apportées aux fichiers modifiés dans le terminal en utilisant la commande

$ git diff main tba-quests command.py
$ git diff main tba-quests room.py

Astuce

Pour une meilleure lisibilité, on peut utiliser l’extension GitLens et sa fonctionnalité SEARCH & COMPARE > Compare References... pour examiner les différences entre les versions des fichiers.

../_images/tba-07-quests-gitlens-diff.png

Vérifier à la lecture du code que les modifications n’impactent pas le fonctionnement du jeu.

Ajout des quêtes

La principale modification concerne l’ajout du fichier quest.py. Observer attentivement sa structure et son contenu.

Avertissement

Quelques indications pour les réponses à apporter :

  • Les lignes consécutives doivent être séparées par un tiret. Exemple : 10-15 ;

  • Les lignes non consécutives doivent être séparées par des virgules suivies d’un seul espace. Exemple : 10, 11, 13, 17 ;

  • Les objets doivent être décrits par la chaine de caractères utilisée par la commande type(). Exemple : si la commande type() retourne <class 'list'>, la réponse est list;

  • Lorsqu’il y a plusieurs réponses à fournir, elles doivent être dans l’ordre d’apparition dans le code et séparées par des virgules suivies d’un seul espace. Exemple : obj1, obj2, obj3 ;

  • Les fonctions et les méthodes doivent comporter les parenthèses. Exemple : __init__().

  1. Combien y a t-il de classes dans ce fichier ?

  2. Quelles sont elles ?

  3. Quelle est la classe principale ?

  4. Combien a t-elle d’attributs ?

  5. Combien a t-elle de méthodes ?

  6. Quelle méthode permet de rendre une quête active ?

  7. Quelle méthode permet de marquer un objectif de la quête comme atteint ?

  8. A quelle ligne vérifie t-on que la quête est terminée ?

  9. Quelle méthode permet de suivre la complétude de la quête ?

  10. Certaines méthodes ne sont pas appelées directement sur l’objet Quest. Par quel caractère sont elles préfixées ?

  11. Quelle classe permet de gérer l’ensemble des quêtes du jeu ?

  12. Combien a t-elle d’attributs ?

  13. Combien a t-elle de méthodes ?

  14. Quelle méthode permet de suivre la complétude des quêtes disponibles ?

Connexion avec les autres classes

Pour intégrer les quêtes dans le jeu, plusieurs modifications ont été apportées aux autres fichiers du projet (actions.py, game.py, et player.py).

Observer les modifications apportées à ces fichiers en utilisant l’extension GitLens.

  1. Quel est le fichier concerné par les actions ?

  2. Combien y a t-il de classes dans ce fichier ?

  3. Combien y a t-il de méthodes d’instance ?

  4. Combien y a t-il de méthodes static ?

  5. Combien y a t-il de méthodes supplémentaires ?

  6. Quelle méthode permet de lister toutes les quêtes ?

  7. Quelle méthode permet de donner les détails d’une quête ?

  8. Quelle méthode permet d’activer une quête ?

  9. Quelle méthode permet de lister les récompenses ?

  1. Quel est le fichier concerné par le joueur ?

  2. Combien y a t-il de classes dans ce fichier ?

  3. Combien y a t-il de méthodes d’instance ?

  4. Combien y a t-il de méthodes static ?

  5. Combien y a t-il de méthodes supplémentaires ?

  6. Quelle méthode permet de récompenser le joueur ?

  7. Quelle méthode permet de lister les récompenses du joueur ?

  1. Quel est le fichier concerné par le moteur de jeu ?

  2. Combien y a t-il de classes dans ce fichier ?

  3. Combien y a t-il de méthodes d’instance ?

  4. Combien y a t-il de méthodes privées (préfixées par _ ) ?

  5. Combien y a t-il de méthodes d’instance supplémentaires ?

  6. A quelle ligne définit on le lieu de départ ?

  7. A quelles lignes sont définies les quêtes ?

Maintenant vous avez une bonne idée de comment ajouter des quêtes à votre jeu.

Fonctionnement des quêtes

Pour comprendre le fonctionnement des quêtes, lancer le jeu avec la commande habituelle

$ python game.py

Parcourez la map initiale et réalisant chacune des quêtes proposées. Faites vous une idée de comment vous pourriez intégrer des quêtes dans votre propre jeu.

A faire

Les modifications observées dans la branche tba-quests doivent être intégrées dans la branche main. Il faut donc s’assurer de revenir sur la branche main avant d’apporter la moindre modification.

Astuce

Utiliser l’extension GitLens et sa fonctionnalité SEARCH & COMPARE > Compare References... pour porter le code pertinent de la branche tba-quests vers la branche main par copier/coller.

Ajouter des quêtes à votre jeu en vous inspirant de ce qui a été fait ici. Vous pouvez créer vos propres quêtes en utilisant la classe Quest et les gérer avec la classe QuestManager. N’oubliez pas d’ajouter les actions associées dans le fichier actions.py pour permettre au joueur d’interagir avec les quêtes. Pensez à récompenser le joueur lorsqu’il complète une quête en utilisant la méthode add_reward() de la classe Player.

Final GitHub stuff

Enregistrer les modifications apportées aux fichiers dans le repo local (codespace ou machine locale)

$ git add .

Important

Vous pouvez vérifier les statistiques de commit avec la commande

$ git shortlog -s -n

Ajouter un commit à l’historique

$ git commit -m "Add quests and quest management"

Votre historique doit ressembler à ceci :

../_images/tba-07-quests-gitgraph-01.png

Pour référencer plus facilement cette version dans le futur, créer un tag

$ git tag v5

Synchroniser votre codespace avec votre dépôt GitHub

$ git push origin main --tags

Vérifier que les modifications sont bien présentes dans le dépôt GitHub.