Text Based Adventure Game

Le jeu d’aventure textuel est un jeu dans lequel le joueur est plongé dans un univers fictif et doit résoudre des énigmes pour progresser dans l’histoire. Le joueur interagit avec le jeu en tapant des commandes dans un terminal. Le jeu répond en affichant du texte. Le jeu est donc très proche d’un jeu de rôle papier, mais avec un ordinateur pour gérer les règles et l’univers.

Une première partie du travail consiste à définir l’univers du jeu : le lieu où se déroule l’action, les personnages, les objets, etc. Une fois l’univers défini, il faut définir les règles du jeu : comment le joueur interagit avec l’univers, comment l’univers réagit aux actions du joueur, etc. Enfin, il faut écrire le code qui implémente ces règles.

Le jeu d’aventure textuel est un jeu très ancien, qui a connu son heure de gloire dans les années 80. Il est aujourd’hui un peu tombé en désuétude, mais il reste un excellent exercice de programmation.

Dans sa première version, la communication entre le joueur et la machine se fera uniquement en mode texte dans un terminal.

Comme il est assez facile de le porter dans un environnement graphique, dans une seconde version, une interface graphique améliorera la jouabilité.

Séquencement

Organisation

Le mini projet est réalisé en binôme, dont la constitution est libre. Les étudiants n’ont pas besoin d’appartenir au même groupe pédagogique.

Remise du travail

Les instructions et la date limite de remise du travail sont précisées sur la page d’accueil.

La remise du travail s’effectue sous la forme de la remise d’une archive zip sur la plateforme Blackboard.

L’archive devra contenir :

  • les seuls fichiers strictement nécessaires pour exécuter votre code ;

  • un fichier principal main.py qui permet de lancer votre jeu avec la commande $ python main.py;

  • un rapport au format pdf structuré de la façon suivante :
    • présentation du contexte du jeu ;

    • présentation de l’univers du jeu (carte, personnages, objets, etc.) ;

    • guide développeur (le diagramme de classes) ;

    • perspectives de développement (ce que vous imaginez pour améliorer votre jeu).

Evaluation

Bien que le projet soit réalisé en binôme, l’évaluation est individuelle. Pour être parfaitement préparé, chaque étudiant doit participer activement au développement du projet, et maitriser la totalité du code.

Votre code doit pouvoir être exécuté sur une machine différente de la machine utilisée pour le développement. Il est fondamental d’avoir ce contexte en tête. En particulier toute référence absolue à un fichier est proscrite.

Il sera impératif de vérifier que votre projet se dézippe et marche correctement sur une machine différente avant de le soumettre.

Chacun des critères d’évaluation sera noté sur 5 points :

  • 1 : le travail est trop loin des attentes ;

  • 2 : il y a quelques améliorations à apporter ;

  • 3 : le travail correspond à ce qui est attendu ;

  • 4 : le travail est supérieur à ce qui est attendu ;

  • 5 : le travail est exceptionnel.

FAQ

Mon programme ne fonctionne pas, quelle stratégie pour corriger le code ?

La première chose à faire est d’identifier la nature de l’erreur :

  • si le programme s’arrête prématurément, analyser le message d’erreur. Observer les objets mis en oeuvre sur la ligne concernée. Placer un print() sur la ligne qui précède pour vérifier leur valeur ;

  • si le programme ne rend pas la main, il s’agit d’une boucle infinie. Vérifier les conditions d’arrêt des boucles.

Comment observer l’évolution des objets au cours de l’exécution du programme ?

On peut placer des print() intermédiaires dans le programme.

On peut également utiliser le debugger de Visual Studio Code :

  • placer un point d’arrêt en cliquant à gauche du numéro de ligne concerné (point rouge) ;

  • lancer l’exécution en mode debug : Run > Start Debugging ;

  • observer les variables dans la fenêtre correspondante ;

  • progresser dans le déroulement du programme :
    • Continue pour aller jusqu’au breakpoint suivant ;

    • Step Over exécute le programme pas à pas. Si l’instruction est une fonction, on ne rentre pas à l’intérieur ;

    • Step Into exécute le programme pas à pas. Si l’instruction est une fonction, on rentre à l’intérieur ;

    • Step Out sort de la fonction en cours.

Malgré une enquête approfondie, mon code ne fonctionne toujours pas, que faire ?

Produisez une version minimale reproductible (VMR) de l’erreur et alertez votre intervenant :

  • minimale : par essais successifs, isolez les lignes de code posant problème. Ne conservez que celles là ;

  • reproductible : définissez tous les objets nécessaires à l’exécution de ces lignes de code.

Avant de soumettre votre VMR, vérifiez qu’elle est fonctionnelle sur votre machine.

Y a t-il un moyen d’obtenir une assistance efficace à distance ?

Vous pouvez installer l’extension Live Share dans Visual Studio Code et vous faire un compte GitHub si vous n’en avez pas déjà un (il est nécessaire pour l’authentification). Vous pourrez alors réellement partager votre environnement VS Code et une personne distante pourra venir écrire dans votre fichier (à la manière des Google Docs) ou lancer des commandes dans le terminal.

Je souhaite stocker des informations de façon permanente entre deux sessions de jeu. Par exemple un état intermédiaire du jeu pour pouvoir le reprendre plus tard, ou les meilleurs scores par exemple. Quelle est la meilleure façon de faire ?

On peut utiliser le processus d’écriture/lecture dans un fichier texte, de type csv par exemple. La lecture est abordée dans le chapitre 8 du cours. Plus d’informations, notamment sur l’écriture, dans la documentation officielle.

On peut également utiliser le module pickle qui permet d’écrire/lire directement les objets Python (listes, dictionnaires, etc…) sur le disque. Avec les fonctions pickle.dump() et pickle.load(). C’est beaucoup plus simple mais les fichiers sont binaires et ne peuvent pas être lus avec un éditeur de texte.