Introduction

Les jeux vidéo en mode texte

Un jeu vidéo en mode texte (text-based game en anglais) est un jeu vidéo sur écran 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. Le jeu n’utilise pas de graphisme, mais uniquement des phrases (texte, des questions et des réponses).

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. Il est aussi très facile à mettre en oeuvre, car il ne nécessite pas de graphisme, ni de son, ni de réseau, ni de base de données, ni de moteur physique, ni de moteur de rendu, etc. Il ne nécessite qu’un terminal et un langage de programmation. Il est donc idéal pour un premier projet de programmation.

Pour avancer dans un jeu textuel, le joueur est invité à entrer des actions (se baisser pour ramasser une clé, examiner un tronc d’arbre, marcher vers le sud, tuer un monstre, etc.) en fonction du contexte et lieu où il se trouve. Ce lieu est décrit par le programme (vous vous trouvez devant le porche de la maison, vous êtes dans la forêt face à un orc, etc…) . De multiples autres critères entrent parfois en compte (vie, arme, état du personnage, etc.).

Les jeux textuels sont souvent des jeux de rôle, mais il existe aussi des jeux de stratégie, de gestion, de simulation, etc.

Un exemple : Zork

Zork I: The Great Underground Empire est un jeu vidéo d’aventure textuel développé à l’origine en 1977 par un groupe d’étudiants du MIT, connu sous le nom de « Dynamic Modeling Group ». Il est considéré comme l’un des jeux les plus emblématiques de l’histoire des jeux vidéo et a contribué à populariser le genre des jeux d’aventure textuels.

Dans Zork I, le joueur incarne un aventurier qui explore les profondeurs d’un empire souterrain, où il doit résoudre des énigmes, trouver des trésors et vaincre des ennemis pour progresser. Le jeu se déroule entièrement par le biais de descriptions textuelles et de commandes tapées au clavier. Le joueur doit utiliser son imagination et sa logique pour résoudre les énigmes et progresser dans l’aventure.

Le jeu a connu un grand succès dans les années 1980 et a inspiré de nombreux autres jeux d’aventure textuels ainsi que des adaptations pour d’autres supports, tels que des romans et des bandes dessinées.

_images/zork.jpg

On peut y jouer en ligne ici.

Voici quelques pas dans le jeu

West of House
You are standing in an open field west of a white house, with a boarded front door.
There is a small mailbox here.

>open mailbox
Opening the small mailbox reveals a leaflet.

>read leaflet
(Taken)
"WELCOME TO ZORK!
ZORK is a game of adventure, danger, and low cunning. In it you will explore some of the most amazing territory ever seen by mortals. No computer should be without one!"

>drop leaflet
Dropped.

>go south
South of House
You are facing the south side of a white house. There is no door here, and all the windows are boarded.

>go east
Behind House
You are behind the white house. A path leads into the forest to the east. In one corner of the house there is a small window which is slightly ajar.

>open window
With great effort, you open the window far enough to allow entry.

>enter house

Kitchen
You are in the kitchen of the white house. A table seems to have been used recently for the preparation of food. A passage leads to the west and a dark staircase can be seen leading upward. A dark chimney leads down and to the east is a small window which is open.
On the table is an elongated brown sack, smelling of hot peppers.
A bottle is sitting on the table.
The glass bottle contains:
A quantity of water

La solution complète

_images/zork_map.png

Objectifs

L’objectif est de créer un jeu vidéo en mode texte (beaucoup plus modeste que Zork !), en utilisant le langage Python.

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.

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, les élèves les plus avancés pourront le porter vers une interface graphique améliorera la jouabilité.

Organisation

Le mini projet est réalisé en binôme, dont la constitution est libre. Il est préférable de constituer les binomes à partir d’élèves du même groupe pédagogique. Il est demandé de remplir ce formulaire pour renseigner :

  • les membres du binôme ;

  • le contexte du jeu ;

  • l’URL du repo git (cf ci dessous).

Avertissement

Au delà du mercredi 20 novembre, les élèves qui n’ont pas répondu au formulaire ci dessus seront aléatoirement regroupés en binomes.

Suivi de la progression

Avant une date limite, il est demandé à chaque binome de faire valider à l’enseignant le travail demandé sous forme d’exercice.

Avertissement

Les exercices ne peuvent être présentés qu’une seule fois. Assurez vous qu’ils sont bien opérationnels avant de les soumettre à l’enseignant.

  • Une première version (lundi 25 novembre)

    • Passage interdit

    • Sens unique

    • Commande vide

  • Votre propre univers (lundi 2 décembre)

    • Ajouter des lieux

    • Gestion direction inconnue

  • Ajouter un historique (lundi 9 décembre)

    • Construire un historique

    • Revenir en arrière

  • Ajouter des objets (lundi 16 décembre)

    • Ajouter un inventaire (joueur)

    • Ajouter un inventaire (lieu)

    • Observer l’environnement

    • Prendre / reposer un item

    • Vérifier son inventaire

  • Ajouter des PNJ (samedi 13 janvier)

    • Créer un PNJ

    • Intégrer les PNJ à la map

    • Déplacer les PNJ

    • Interagir avec les PNJ

Chacun des exercices recevra un grade parmi:

  • ok : tout fonctionne comme prévu

  • en cours : la fonctionnalité a été implémentée mais elle n’est pas pleinement opérationnelle

  • pas fait : valeur par défaut

Remise du travail

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

Le travail s’effectue dans un environnement Github qui a été identifié dans le formulaire ci dessus. Aucune autre démarche n’est nécessaire, votre dépôt sera cloné pour évaluation une fois la date de remise du travail dépassée.

Le dépôt devra contenir les seuls fichiers strictement nécessaires pour exécuter le code (et uniquement ceux là). C’est à dire :

  • le fichier principal game.py qui permet de lancer le jeu avec la commande $ python game.py;

  • les autres fichiers .py nécessaires au fonctionnement du jeu ;

  • un rapport au format pdf structuré de la façon suivante :

    • guide utilisateur (comment jouer à votre jeu : les conditions de victoire, les commandes, etc.) ;

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

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

  • une vidéo de démonstration de votre jeu (3 minutes max, OBS Studio est une solution open source performante). La vidéo doit contenir :

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

    • démonstration d’un parcours perdant ;

    • démonstration d’un parcours gagnant.

Evaluation

Le projet sera évalué sur la base des critères suivants :

  • sur 2 points : la fonctionnalité du code

    • 0 : il y a une erreur à l’exécution ;

    • 1 : une erreur se produit parfois ;

    • 2 : le code fonctionne.

  • sur 5 points : le score pylint (comme vu dans le chapitre Qualité du code). A travers ce score sont évalués : la structuration, les commentaires, le nommage, etc. ;

  • sur 5 points : la qualité du jeu (jouabilité, intérêt, etc.) ;

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

  • sur 4 points : la qualité du rapport. Il doit satisfaire les critères énoncés dans la section Remise du travail ;

    • 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 ;

  • sur 4 points : la qualité de la vidéo de présentation. Elle doit satisfaire les critères énoncés dans la section Remise du travail ;

    • 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 ;