Ce projet consiste en l'ajout de nombreuses fonctionnalités supplémentaires sur un jeu SNAKE simple, récupéré sur raylib.
Les fonctionnalités ajoutées sont:
* Un afficheur de score
* Un timer
* Des murs traversables qui teleportent de l'autre côté
Et potentiellement:
* Un menu
* Une gestion des meilleurs scores
* Différents types de fruits
* Différents modes de jeux
* Différents modes de jeux (facile ou difficile)
* Une bande son
Le code initial ainsi que les autres jeux disponibles sont trouvable ici: https://www.raylib.com/games.html
## Objectif
Le but du jeu est de manger le maximum de fruit pour gagner le plus de points possible et faire grandir son serpent.
Les fruits classiques rapportent 100 points et les fruits dorés 250 points.
La partie s'arrete lorsque le joueur se heurte lui même ou un obstacle.
Les obstacles sont des fruits empoisonnés de couleur noirs. En mode difficile, il y a également des murs à éviter.
## Touches
Sur l'écran d'accueil:
* '1' pour lancer le niveau facile
* '2' pour lancer niveau difficile
En jeu:
* Fléches directionnelles pour changer de direction
* 'P' pour mettre le jeu en pause ou le continuer
* 'M' pour mettre le son en sourdine ou le remttre
Sur l'écran de game over:
* 'ENTRER' pour relancer le même niveau
* 'ESPACE' pour revenir au menu de sélection de niveau
## Fichiers écrits
Le fichier principal snake.c contient la totalité des fonctions écrites comme c'était le cas dans la version initiale récupérée. Les fonctions sont divisées en 3 grands types.
* Les fonctions d'iniatilisation qui sont appelés au lancement du programme et à chaque nouvelle partie. Elle permettent de s'assurer que chaque paramètre est bien réinitialisé à sa valeur par défaut avant chaque partie. Elles sont particulièrement importantes puisque la quasi totalités des variables sont "static".
* Les fonctions de mise a jour du jeu qui vont gérer tous les paramètres comme la détection des collisions, la détection des inputs et l'application de leurs conséquences. Ces fonctions sont appelées à chaque frame.
* Les fonctions d'affichage sont également appelées à chaque frame car elles sont en charge de traduire l'état actuel du jeu en affichage. Eles servent aussi à donner les informations au joueur lors des pauses, fin de parties ou de la sélection de niveau.
A ce fichier vient s'ajouter les fichiers audio qui permettent d'ajouter une ambiance sonore ainsi que la librairie raylib.h qui est indispensable.
## État actuel et piste d'amélioration
A l'heure actuel, chaque fonctionnalité prévue a été implémenté et les bugs trouvés ont tous été corrigés.
Pour améliorer le projet, on pourrait continuer l'ajout de fonctionnalités ou en compléter comme:
* Compléter le menu d'accueil avec des paramètres modifiables, affichage et rebind des touches, etc...
* Étoffer le jeu graphiquement en utilisant des textures détaillées à la place de simple carrés
* Pousser la sélection de niveau pour pouvoir pré confifurer plusieurs paramètres (fréquences de chaque fruit, vitesse du serpent, disposition différentes des murs, etc)
* Un tableau des scores plus détaillés avec les 5 meilleurs scores et un pseudo associé à ces scores qu'il faudrait rentrer après leur réalisation
Si l'on veut un projet plus complet et facilement modulable, un redécoupage du projet en différents fichiers est à envisager.
## Instructions de compilation et de lancement
La compilation du projet se fait comme pour tout projet raylib classique.
Vous trouverez la documentation ici: https://github.com/raysan5/raylib/wiki/Working-with-CMake