Académique Documents
Professionnel Documents
Culture Documents
Snake Game
Halim Djerroud (hdd@ai.univ-paris8.fr)
On souhaite réaliser un jeu qui ressemble au bon vieux Snake à la différence, tous
les joueurs sont des bots qui jouent automatiquement.
Le plateau de jeu
Le plateau est constitué d’un ensemble de cellules sous forme d’une matrice 2D
avec une dimension de N x M . Chaque case peu être vide (cases blanches), occupée
par un Snake (alors elle prend la couleur du Snake) ou peut être aussi un obstacle
(cases grises).
Les Snakes
Au départ, chaque Snake est constitué d’une seule cellule, sa taille augmente à
chaque fois qu’il capture des fruits qui apparaissent sur le plateau. Chaque Snake est
identifié par un ID unique qui est un numéro séquentiel, il peut aussi avoir une couleur
si une version graphique est implémentée. Les Snakes se déplacent sur plateau à la
même vitesse.
Les fruits
Des fruits apparaissent aléatoirement sur le plateau, uniquement sur les cases
blanches, il ne peut y avoir qu’un seul fruit à fois sur le plateau, un nouveau fruit
apparaît sur le plateau une fois que l’ancien s’est fait capturé par un Snake.
Il existe 4 types de fruits : fraises, cerises, bananes et pommes, chaque fruit procure
au Snake qui le capture un certain nombre de points :
1
— Fraises : 5 points
— Cerises : 3 points
— Bananes : 2 points
— Pommes : 1 point
Les obstacles
Les obstacles sont des cellules grisées si un Snake (une des cellules qui le constitue)
se trouve sur une cellule grise, alors il perd 15 points et se voit sa taille se réduire
d’une cellule. Attention, un Snake ne peut pas toucher des cases grise plus de 3 fois.
Le but du jeu
Lorsque une partie commence, on tire un chiffre aléatoirement (entre 50 et 99) et
on l’affiche à l’écran, le but de chaque Snake est d’atteindre exactement ce nombre
rapidement (avant les autres) en récoltant des fruits. Le premier Snake qui atteint
ce nombre gagne le niveau. Attention, si ce nombre est dépassé, le Snake peut se
rattraper en essayant de percuter un mur afin de voir son nombre de points réduit
de 15 points pour essayer de l’atteindre à nouveau. Si un Snak dépasse de plus de 45
points la valeur à atteindre alors il se fait éliminer.
Il y a 4 niveaux différents du niveau 1 à 4 avec des difficultés progressives, la
structure de ces niveaux est montrée dans la figure ci-après.
2
Partie I : Implémentation du plateau (6 points)
Lors du lancement du jeu, l’utilisateur doit pouvoir choisir la taille du plateau en
donnant en option les valeurs -n et -m, en argument le programme prend le nombre
de Snake sur le plateau, exemple :
./Snake -n 15 -m 20 4
Astuce : Pour les options vous pouvez vous aider la fonction getopt de la glibc
déclarée dans l’en-tête : include <getopt.h>
3
3. Implémenter le système de gestion des scores dans un thread afin d’alléger le
processus plateau.
4. A chaque fois qu’un Snake grandi il voit sa sa vitesse diminue de 10%
Les règles :
— Chaque groupe doit être composé d’au maximum 3 étudiants (trinômes), les
binômes sont autorisés mais pas les monôme (une personne ne peu pas travailler
toute seule sur le projet).
— Un dépôt github doit être utilisé pour le projet
— Le programme doit être écrit en C.
— Les tâches (stratégies) de chaque bot doivent être programmés dans des threads.
— L’interface graphique est optionnelle néanmoins un bonus sera attribué si cette
interfacé est réalisée mais seulement si les fonctionnalités de bases fonctionnent
correctement.
— Le barème est indicatif