187 views
Projet de Noel !!![](https://codimd.math.cnrs.fr/uploads/upload_9f5612c1c81a3d8912d2d726078b4892.png) === # Introduction Chères étudiantes, chers étudiants Nous vous proposons de faire un petit jeu très simple en SDL. Ce jeu consiste 'simplement' à faire tomber des objets (des balles a priori) et de cliquer dessus avant qu'elles ne tombent au sol. Quand une balle arrive au sol, une nouvelle apparaît jusqu'à ce que le nombre de balles perdues soit trop important et que vous perdiez. L'objectif de ce travail complètement gratuit (pas d'obligation, pas de note, éventuellement un petit bonus pour ceux qui auront des beaux projets) n'est là que pour compléter votre formation en algorithmie, en C/C++ et en SDL. La programmation du jeu en elle-même n'est pas très compliquée mais vous pourrez ajouter des options pour le rendre encore plus attrayant (oui parce que la version de base ci-après ca ne fait pas rêver !!). ![](https://codimd.math.cnrs.fr/uploads/upload_8c954cd0458e46127cebf5fb854151cf.png) # une structure de données simple : la balle La structure de données est une balle qui a une position d'affichage ainsi qu'une taille. Votre balle a également une couleur d'affichage. Vous aurez également un tableau de 10 balles. En effet, le principe de base du jeu est que ce nombre de balles sera toujours le même : une balle perdue (parce que tombée au sol) réapparaîtra en haut à une position différente (sur la largeur). # Algorithmie l'algorithme de base est le suivant : ## initialisation - Initialisez toutes les balles (*initJeu*) - initialisez chaque balle (*initBalle*) : 0 < **x** < LARGEUR, 0 < **y** < 20, 30 < **taille** < 50 (ces valeurs sont données à titre d'exemple), **Couleur** une couleur aléatoire ## gameloop Pour chaque cycle de votre jeu (gameloop), appelez les fonctions suivantes : - afficher le score (*afficheScore*) - afficher toutes les balles (*afficheBalles*) - mettre à jour la position de toutes les balles (*updateBalles*) - déplacez toutes les balles : la vitesse de la balle pourrait être fonction de sa taille. Pour faire simple, vous pouvez simplement mettre à jour la position en y de whaque balle en lui ajoutant un pourcentage de sa taille - si la position de la balle est au sol, - incrémentez le compteur des balles perdues - si le nombre de balles perdues est supérieur à un seuil, vous sortez et perdez ! - sinon réinitialisez la position de la balle > **Temporisation** : pour éviter que vos balles descendent trop vite, vous pouvez ajouter un délai *SDL_Delay* à chaque cycle. Quelque chose comme 30ms devrait suffire. > **Gestion des évènements** : jusqu'à maintenant, nous avons travaillé avec un *WaitEvent* pour capturer un évènement.Dans un jeu où il y aura beaucoup d'évènements (nous allons cliquer dans tous les sens), cette fonction risque d'être bloquante. Utilisez plutôt un *pollEvent* qui pourra mieux "empiler" et traiter les évènements. # Affichage du score Concernant l'affichage du score, vous devez pouvoir créer une chaîne qui intègre le nombre de balles touchées avant qu'elles n'arrivent au sol et celles perdues. Nous vous laissons chercher leur utilisation mais vous pouvez utiliser les fonctions *ostringstream* ou *sprintf* # Pour aller plus loin L'objectif de cet exercice est aussi de vous faire approfondir votre pratique en vous fixant vous-mêmes des challenges : tableau des scores, effets sur les balles, coups spéciaux (ralentir, accélérer, interdire certaines balles, ...), splash screen, ou encore des sons. Vous aurez certainement plus d'idées que nous :laughing: une petite proposition de circonstance : {%youtube VW8VI8SjxOM %}