Voici la suite de l’article consacré à la programmation d’aventure en langage Pascal. Vous trouverez le premier article datant de mai 2026 ici. Les programmes sont issus d’un livre Programming your own adventure game in Pascal de Richard C. Vile publié en 1984.

Dans cet article, nous allons essayer le deuxième programme du livre, qui est plus abouti. En effet, le deuxième listing adventure 2 ressemble au premier, le but de récupérer le trésor étant le même. Les fonctionnalités sont en revanche bien plus avancées :
- Le joueur saisit des commande sous la forme
VERBE + NOM, comme cela était le cas pour de nombreux jeux d’aventure de l’époque (two-word parser adventure games); - La description des lieux explorés est beaucoup plus détaillée, et nous verrons les conséquences importantes que cela a sur le programme ;
- Le nombre de pièces est plus important, ce qui complexifie la résolution de l’aventure.

Demandez le programme
Voici le code source en langage Pascal moderne, compilable avec Free Pascal. Ce compilateur est disponible sur de nombreuses plates-formes mais je ne l’ai utilisé que sous Linux. Pour jouer, vous devez télécharger l’archive complète ici, au format tar :
Le contenu de l’archive est le suivant :
a2db.txt # fichier texte décrivant les lieux pour le programme n°2
a2.db80 # fichier de description des lieux au format utilisé par
# le programme n°2
a2.db80.x # fichier d'index associé au fichier précédent
pascal-adv-game1.pas # jeu d'aventure n°1 (déjà publié dans l'article
# précédent).
pascal-adv-game2.pas # jeu d'aventure n°2 (objet de cet article).
makedesc.pas # permet de convertir un fichier ou base
# de données des lieux en fichiers utilisables
# par le programme d'aventure
browse.pas # explorateur de fichiers de base de données de lieux
makefile # permet de lancer la compilation des 4
# programmes Pascal précédents.
J’ai prévu un fichier makefile pour faciliter la compilation du code source en Pascal avec fpc. Voici les commandes à saisir depuis le shell :
make adv1 # compile pascal-adv-game1.pas et produit l'exécutable
# pascal-adv-game1
make adv2 # compile pascal-adv-game2.pas et produit l'exécutable
# pascal-adv-game2
make md # compile makedesc.pas et produit l'exe makedesc
make br # compile browse.pas et produit l'exe browse
make clean # fait le ménage...
make backup # sauvegarde le répertoire sous la forme d'une archive tar
Fonctionnement du programme 2
La compilation se fait par la commande make adv2. Pour lancer l’exécutable, saisir depuis le shell la commande :
$ ./pascal-adv-game2
Pour la description des lieux, le programme utilise une « base de données » externe qui se présente sous la forme de deux fichiers : a2.db80 et a2.db80.x. La présence de ces fichiers est donc indispensable. Ces fichiers sont produits grâce à l’utilitaire makedesc qui est inclus dans l’archive téléchargeable ci-dessus (commande make md pour produire l’exécutable), à partir d’un fichier texte de description des lieux a2db.txt, qui figure en annexe B du livre Programming your own adventure game in Pascal. Il est également présent dans l’archive pour vous éviter une saisie fastidieuse. Voici comment utiliser makedesc :
$ ./makedesc
tracing? ==>n
input file===>a2db.txt
description file===>a2.db80
Les adaptations effectuées
J’ai effectué quelques modifications du programme source, concernant les instructions de manipulation de fichiers. Celles présentes dans le livre sont obsolètes et ne correspondent pas au Pascal actuel.
Voici un exemple de programme écrivant dans un fichier en Pascal moderne (fpc ou Turbo Pascal)
PROGRAM wrtxt;
VAR
rec : STRING[80];
f : file of STRING[80];
i : INTEGER;
BEGIN
rec := 'You are in the mountains. There are ugly monsters all around...';
assign (f, 'junk.text');
rewrite (f);
FOR i := 1 TO 100 DO
BEGIN
write(f,rec);
END;
close(f);
END.
Voici comment cela fonctionne ;
- Le pointeur de fichier
fest déclaré dans la sectionVARet est de typefile of STRING[80]. Il est possible en Pascal de choisir son type de fichier, ici le fichier contient des chaînes de 80 caractères, mais il est possible de manipuler des fichiers de typeInteger,Float, etc. - La commande
assignpermet d’associer f au nom du fichier présent sur le disque. rewritepermet d’ouvrir le fichierfen écriture, en effaçant son contenu.- L’écriture se fait grâce à la commande
write(f,rec); - La commande
closeferme le fichier.
Et voici un programme effectuant la lecture du fichier précédemment créé et l’affichant à l’écran.
PROGRAM rdtxt;
VAR
rec : STRING[80];
f : file of STRING[80];
i : INTEGER;
BEGIN
assign (f, 'junk.text');
reset (f);
FOR i := 1 TO 100 DO
BEGIN
read(f,rec);
writeln(i, ':' , rec);
END;
writeln('Got it');
close(f);
END.
Quelques explications :
- La fonction
resetpermet l’ouverture du fichier en lecture. - r
ead(f,rec);permet de lire un enregistrement du fichier.
le jeu
Tout est prêt pour l’aventure. Voici un extrait du début du jeu.
$ ./pascal-adv-game2
Welcome to miniadventure!
Your goal will be to find a treasure
and bring it back to your starting
point. You will also get points
for finding each location in the
adventure. Points will be deducted
for various undesirable happenings:
waking the ogre, getting eaten,
getting toasted, etc.
I will guide you and be your eyes
and ears. Command me with one or
two word phrases, such as
"CARRY KEY" or "NORTH".
I only look at the first letter
of commands that tell me which
direction to take. Thus, I take
"NORTH" and "N" to be the same.
When you are ready to begin your
adventure, just press RETURN"
You are standing by a hole in the ground. It looks big enough to climb
down.
There is a lamp here.
===>
Il ne vous reste plus qu’à résoudre cette aventure… Pour commencer, allumez la lampe pour voir quelque-chose… La commande help peut vous donner quelques clés. Voici la liste des verbes connus :
carry, drop, help, light, inventory, take, score, push, dig, look, open, unlock, eat.
