Académique Documents
Professionnel Documents
Culture Documents
MIRA de Béjaia
Faculté des Sciences Exactes
Département d’Informatique
Projet de programmation
1. Contexte du projet
Le jeu « Serpent », aussi connu sous le nom « Snake », est un jeu très populaire qui a été inventé
en 1976. Le principe général du jeu est le contrôle des déplacements d’un serpent, en évitant des
obstacles, afin de le diriger vers sa nourriture. En effet, quand le serpent mange de la nourriture,
on gagne un point. De plus, une seule ressource de nourriture apparaît à la fois à un endroit
aléatoire. Elle reste affichée sur l’écran pour quelques secondes avant de disparaître, si le serpent
manipulé ne parvient pas à la consommer, et de réapparaître dans un endroit différent.
Le jeu « Serpent » a été largement implémenté sous différentes versions. Dans le cadre de ce
projet, on vous demande de réaliser une version légèrement modifiée de ce jeu en utilisant le
langage de programmation « Pascal ». Explicitement, en cette nouvelle version du jeu on contrôle
les déplacements d’un personnage sur une carte. Le motif derrière les déplacements est la
récupération du maximum possible de pièces d’or, mais tout en faisant attention à un ensemble
d’obstacles et de pièges.
2. Objectif du projet
Comme expliquer précédemment, le but du projet est de réaliser un petit jeu (logiciel). Le jeu en
question vous permettra d’avoir sur l’écran de l’ordinateur une carte sur laquelle sont placés des
éléments. Essentiellement, des obstacles, des pièces d’or, des pièges, ainsi qu’un personnage. Ce
dernier peut se déplacer sur la carte selon quatre directions possibles (en haut, en bas, à droite, et
à gauche) sauf aux les bordures de la carte (le personnage ne doit pas sortir de la carte en faisant
un déplacement) ou à la rencontre d’un obstacle. La carte s’affiche régulièrement en mettant à
jour les données du jeu au fur et à mesure des déplacements du personnage.
Enfin, de réaliser des actions en fonction des actions que le personnage effectue et les situations
qu’il rencontre sur la carte, vous êtes censé :
• D’afficher régulièrement le personnage, des pièces d’or, des pièges, et des obstacles sur la
carte.
• D’incrémenter un compteur de pièces d’or récupérées. Le compteur commence par zéro
et s’incrémente à chaque fois que le personnage récupère une pièce d’or. Le nombre de
pièces d’or doit être afficher sur l’écran et mis à jour au fur et à mesure de l’évolution de
la partie du jeu. Si une pièce d’or est récupérée, elle doit être enlevée de la carte.
• De décrémenter un compteur de points vie. Ce compteur commence par un nombre de
points vie initialisé par le joueur (ex. 10). Il décrémente (de 1) à chaque fois que le
personnage tombe dans un piège. Par conséquence, le joueur perd sa partie du jeu si le
personnage perd tous ses points de vie
Il est à noter que le personnage ne peut pas franchir un obstacle, et une collision du personnage
avec un obstacle n’engendre pas une perte d’un point de vie. Par contre, les endroits des pièces
d’or et des pièges sont aléatoires. De plus, les localités des pièces d’or changent dynamiquement
selon un critère défini qui peut être une durée de temps ou un nombre de déplacements autorisés
pour le personnage.
Le nombre des pièces d’or, des pièges, et d’obstacles sur la carte contrôle la difficulté de la partie
jouée. Cette dernière peut être en niveau « Débutant », « Intermédiaire », ou « Expert ». Le nombre
de pièces d’or, de pièges, et d’obstacles de chaque niveau est laissé à l’appréciation du
programmeur du jeu.
L’utilisateur (joueur) gagne sa partie du jeu s’il atteigne un nombre de pièces d’or récupérées fixé
au préalable (ex. 30), tout en ayant des points de vie dans son compteur de points de vie.
PARTIE 1
Dans cette partie du projet, on vous demande d’implémenter en mode console le jeu décrit ci-haut.
Travail à faire :
1. Déclarer les structures de données nécessaires. Pour représenter une carte, utilisez une grille
à 2 dimensions (de 20 × 20). Chacune des cases comporte un code représentant ce qui se trouve
à cet emplacement. Vous pouvez adopter la codification suivante : ‘0’ pour un obstacle, ‘1’ pour
une pièce d’or, ‘2’ pour un piège, ‘3’ pour le personnage, et ‘4’ pour le reste des cases de la grille.
2. Ecrire les sous-programmes suivants :
a. InitialiserCarte qui déclare et initialise la carte du jeu.
b. AfficherCarte qui affiche la carte sur l’écran de l’ordinateur.
c. DeplacerPersonnage qui déplace le personnage d’une case sur la carte selon les
directions permises.
d. IncrementerPièceOr qui incrémente le nombre de pièces d’or récupérées.
e. DecrementerPointVie qui décrémente le nombre de points de vie.
3. Implémenter tout sous-programme qui vous semble nécessaire à la réalisation du jeu.
PARTIE II
Dans cette partie, on vous demande re-implémenter le jeu, mais cette fois en utilisant le mode
graphique.
Travail à faire :
- Afficher en mode graphique une fenêtre invitant l’utilisateur (joueur) à choisir le niveau
avant de commencer sa partie.
- Afficher en mode graphique la carte pré-remplie et les compteurs à l’utilisateur (joueur).
- En utilisant la souris (ou un curseur), permettre au joueur de cliquer sur la carte afin de
déplacer d’une case le personnage.
- Modifier dynamiquement les données de la carte, et des compteurs , et les réafficher en
mode graphique.
2
- A la fin de la partie, le jeu doit afficher à l’utilisateur (joueur) un message en mode graphique
le résultat qu’il a obtenu. Ainsi qu’une mention « Bravo ! partie gagnée » ou « Désoler ! partie
perdue »
Pour cela, il faut d’abord rechercher les fonctions de manipulation de la souris (ou du curseur).
Ensuite, compléter votre outil de programmation Pascal avec les pilotes des unités nécessaires
à la programmation en mode graphique, ainsi que la programmation de la souris (ou du
curseur).
NB :
▪ Le projet peut se faire à 3 étudiants au maximum.
▪ Le projet doit se faire en utilisant le langage Pascal (aucun autre langage ne sera accepté).
▪ Chaque groupe d’étudiants doit remettre un rapport, d’au plus 10 pages, décrivant sa
solution.
▪ Dans le rapport à remettre, il faut :
▪ Justifier les choix des structures de données utilisées.
▪ Fournir les descriptions ci-dessous pour tout sous-programme déclaré :
• L’objectif du sous-programme.
• Les données d’entrée.
• Les données de sortie.
▪ Etablir une analyse générale non détaillée du problème.
▪ Le rapport doit être remis avec le logiciel réalisé.
▪ Le code source (programme) doit être riche en commentaires.
▪ Le titre du dossier à remettre par un groupe d’étudiants doit être formulé comme suit :
Nom1.Nom2.Nom3.Groupe.rar(zip).
Où, Nom1, Nom2, et Nom3 sont les noms des trois étudiants du groupe en question, et Groupe
est l’identifiant du groupe d’appartenance de ces étudiants.
▪ Le travail doit être remis à l’adresses email suivante : Projet.L1.RN.B2@gmail.com
1. Description de quelques unités qui peuvent être utilisées pour la réalisation du projet
Voici quelques exemples d’unités reconnus par le compilateur de langage de programmation Free
Pascal et habituellement incluses à l'aide du mot réservé « USES » :
Unité Description
CRT Cette unité contient l'interface console (Clavier et Écran) pour l'affichage dans l'écran de
texte.
DOS Cette unité contient l'interface du système d'exploitation DOS.
GRAPH Cette unité contient l'interface d'affichage graphique de compatibilité avec Turbo Pascal.
MOUSE Cette unité contient les fonctionnalités d’événements associés à la souris.
WINCRT Cette unité contient les routines de clavier et de temps auxiliaire de Windows pour
l'unité Graph.
3
WINMOUSE Cette unité contient les fonctionnalités d'événements associés à la souris sous Windows
avec l'unité Graph.
Remarque : Il faut récupérer les fichiers de ses unités et les rajouter dans le répertoire Pascal.
Cette unité contient les fonctionnalités d’événements associés à la souris. Quelques procédures et
fonctions de cette unité sont données dans le tableau ci-dessous :
Cette unité contient les fonctionnalités d'événements associés à la souris sous « Windows » avec
l'unité « Graph ». On décrit dans ce tableau suivant certaines procédures et fonctions de cette
unité :
4
MPRESSED Cette fonction permet de demander si le bouton du centre de la souris
est actuellement enfoncé.
RPRESSED Cette fonction permet de demander si le bouton droit de la souris est
actuellement enfoncé.
SHOWMOUSE Cette procédure permet d'afficher le pointeur du périphérique de souris