Vous êtes sur la page 1sur 5

Université de A.

MIRA de Béjaia
Faculté des Sciences Exactes
Département d’Informatique

Niveau : Licence 1 en Informatique (Recrutement National)


Module : Algorithmique et Structures de Données
Année Universitaire : 2021-2022

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

Selon le planning suivant :

Partie 1 : La date limite est fixée pour le …/…/….


Partie 2 : La date limite est fixée pour le …/…/….

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.

1.1. L’unité Mouse (Sourie)

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 :

Procédures et fonctions Description


DETECTMOUSE Cette fonction permet d'effectuer la détection de la présence du
périphérique de souris courant.
DONEMOUSE Cette procédure permet de libérer les ressources utilisées pour la pilote
de souris.
GETMOUSEBUTTONS Cette fonction permet de demander l'état des boutons du périphérique
de souris.
Cette procédure permet de demander une copie du pilote de souris
GETMOUSEDRIVER
active.
GETMOUSEEVENT Cette procédure permet de demander le prochain événement de la
souris dans la file d'attente.
GETMOUSEX Cette fonction permet de demander la position horizontale courante du
pointeur de la souris.
GETMOUSEY Cette fonction permet de demander la position verticale courante du
pointeur de la souris.
HIDEMOUSE Cette procédure permet de cacher le pointeur de la souris.
INITMOUSE
Cette procédure permet d'initialiser le pilote de souris FPC.
POLLMOUSEEVENT Cette fonction permet de demander le prochain événement de la souris,
sans attendre qu'un événement soit disponible.
PUTMOUSEEVENT Cette procédure permet de mettre un événement souris dans la file
d'attente du pilote de souris.
SETMOUSEDRIVER Cette procédure permet de fixer un nouveau pilote de souris.
SETMOUSEXY Cette procédure permet de fixer les coordonnées du pointeur du
périphérique de souris.
SHOWMOUSE Cette procédure permet d'afficher le pointeur du périphérique de souris.
Remarque : Si vous développez vos programmes avec un « Target Win32 », vous devriez plutôt
utiliser l'unité « WinMouse ».

1.2. L’unité Winmouse (Souris pour fenêtres)

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é :

Procédures et fonctions Description


INITMOUSE Cette fonction permet d'initialiser la souris.
GETMOUSESTATE Cette procédure permet d'effectuer la lecture de la position en pixels du
périphérique de souris ainsi que l'état des boutons de souris.
HIDEMOUSE Cette procédure permet de cacher le pointeur de la souris.
LPRESSED Cette fonction permet de demander si le bouton gauche de la souris est
actuellement enfoncé.

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

Vous aimerez peut-être aussi