Vous êtes sur la page 1sur 4

Projet programmation concurrente

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

Dans cet exemple, on indique la hauteur du plateau 15 cellules et la largeur de


20 cellules avec 4 Snakes. Dans le cas où aucune option ne serait indiquée alors les
valeurs par défaut suivantes : hauteur 25, largeur 25 et 2 Snakes.

Les bords du plateau communiquent entre deux bords parallèles c’est-à-dire si un


Snake arrive au bord du plateau et continue a avancer alors il se retrouve du côté
opposé.

Il existe 4 niveaux différents, l’utilisateur peut choisir le niveau à partir duquel


commencer la partie en indiquant l’option -l n . Attention la structure des niveaux
doit s’adapter aux dimensions du plateau.
1. Réaliser les fonctionnalités décrites ci-dessus (les options, les arguments, ...).
2. Réaliser une interface graphique (affichage en ligne de commande) du plateau.

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>

Partie II : Les Snakes (8 points)


Le but des Snakes et de récolté le plus de fruits possible, à chaque fois qu’un fruit
est capturé par un Snake, ce dernier voit sa taille augmenter d’une cellule jusqu’à
atteindre la taille max(n, m) c’est-à-dire qu’un Snake ne peut pas dépasser la largeur
du plateau si la largeur est plus grande que sa hauteur ou le contraire.
— Chaque Snake doit être implémenté dans un thread unique ou dans un proces-
sus (vous avez le choix).
— Réaliser le mécanisme qui permet à chaque processus (snake) de communiquer
avec le processus plateau afin de lui indiquer son déplacement. Attention, deux
Snaks ne peuvent pas se trouver sur les mêmes cases au même temps.
— Chaque Snake se déplace d’une façon aléatoire afin de capturer des fruits.
— Réaliser une interface graphique (affichage en ligne de commande) du plateau.
— Réaliser la fonction qui permet de gérer les scores

Partie III : Les fonctionnalités avancées (6 points)


1. Si un fruit est capturé exactement au même moment par deux snaks que se
passe-il ? résoudre ce conflit à l’aide des Mutex.
2. Améliorer la stratégie des Snakes afin de les rendre performants

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 Bonus (2 points)


1. Réaliser une version graphique à l’aide des libraire GTK et Cairo par exemple

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

Vous aimerez peut-être aussi