Alors voila cela fait maintenant quelques années que je m'amuse à coder des petits jeu en C avec la SDL (par exemple j'ai déjà codé un pong, un casse-brique, un snake, un sokoban, ...). Seulement voila j'avais envie de faire un projet de plus grande envergure et plus difficile aussi. Ainsi, j'en ai conclu que faire un jeu de plateforme était la bonne solution. Ainsi aujourd'hui je vous présente mon projet.
Mon jeu s'appelle "Kaaris vs Booba". C'est un jeu de plateforme en 2D où l'on contrôle le personnage "Kaaris" et on doit terminer 3 niveaux, pour arriver au boss final "Booba". On peut sauter avec la touche haut et se déplacer vers la gauche ou la droite. Dans les niveaux il peut y avoir (en plus des plateformes de base) :
des pentes
des trampolines
des checkpoints
des pièces
des plateformes mouvantes
des monstres (on peut les tuer en leur sautant desuus)
des vies
des flacons de parfums (qui donnent 6 secondes d'invincibilité)
et d'autres éléments uniquement cosmétiques.
Voici quelques screenshots :
Pour créer ce jeu, j'ai utilisé les notions du langage C suivantes (auparavant je ne les utilisait que très peu, et c'était une mauvaise habitude) :
les structures : en effet pour ne pas trimballer de variables gobales partout, et pour ne pas avoir de fonctions avec cent paramètres, j'ai décide de créer une structures pour chaque type de données (sons, polices d'écriture, images, ...)
l'allocation dynamique : si vous avez regarder le code ci-dessus, vous pouvez remarquer que, étant donné que je retourne un pointeur/une adresse (et aussi car j'envoie les strcutures en paramètres dans mes fonctions) j'ai donc utiliser des malloc(). Cela permet le fait que par exemple la structure Pictures ne soit pas locale à la fonction loadPictures(), mais aussi que les structures ne soient pas passées par copie à chaque fois que je les envoie en paramètres de mes fonctions. J'ai également utilisé l'allocation dynamique dans le chargement de mes niveaux : en effet, la taille d'un niveau est variable.
fscanf(file, "width=%d\nheight=%d", &lvl->width, &lvl->height); // Lecture des dimensions du niveau
lvl->map = malloc(sizeof(int*) * lvl->width);
if(lvl->map == NULL)
exit(EXIT_FAILURE);
for(int x = 0; x < lvl->width; x++)
{
lvl->map[x] = malloc(sizeof(int) * lvl->height);
if(lvl->map[x] == NULL)
exit(EXIT_FAILURE);
}
les listes chaînées (pour les monstres) : j'ai créé les fichiers list.c et list.h qui contiennent mon implémentation des listes chaînées. Cette implémentation utilise un sentinelle en début de liste (c'est-à-dire un élément qui "ne sert à rien") pour si l'on veuille supprimer le premier monstre de la liste, ça ne change pas l'adresse du premier élément de la liste. Voici la fonction qui initialise la liste/créer le sentinelle :
Comme vous pouvez le voir, il y une structure Controller ! Le jeu est jouable à la manette et il y a j'utilise également la nouvelle API de la SDL2 pour que la manette vibre.
---------> Pour la sortie vidéo, j'utilise des textures et un renderer, et non des surfaces, ce qui certes prend plus de place en mémoire vive, mais permet une hausse des performances grâce à l’accélération matérielle.
SDL2_image
J'initalise SDL2_image pour les formats JPG et PNG.
SDL2_ttf
Etant donné que SDL2_ttf ne travaille qu'avec des surfaces, j'ai créé la fonction suivante qui renvoie la texture créée à partie de la surface du texte donné :
SDL2_mixer (que j'ai préféré à la FMOD que j'utilisait auparavant). En effet, bien que ces fonctionnalités soit plus limités que celle de la FMOD (pas 2 musiques en même temps, etc...) j'ai quand même choisit cette bibliothèque car je n'avais pas besoin des fonctionnalités avancés de la FMOD et car je la trouve plus simple d'utilisation.
SDL2_gfx : pour dessiner un rectangle avec des angles arrondis quand on termine un niveau. En soit j'aurai très bien pu faire sans, mais c'était juste histoire de compiler une bibliothèque moi-même et de l'utiliser...
ffmpeg (pour la lecture d'une vidéo en intro du jeu) : j'ai créer un fonction playVideo que j'ai mise dans le fichier video.c ; cette fonction utilise la ffmpeg pour lire la video d'intro stockée en .mp4 et l'afficher à l'écran via la SDL2.
Bonjour, Je reposte histoire de dire que les sprites et animations du personnage ont été refaits, mais surtout qu'il y a maintenant un mode MULTIJOUEUR en split screen jouable à 2 !
C'est propre. Le moins que l'on puisse dire c'est que tu as bien progressé depuis le temps où faire une simple animation était encore un problème pour toi. Je te tire mon chapeau et t'adresse mes félicitations.
Au moins tu as bien compris quelque chose que j'ai du mal à mettre en œuvre : finir un projet simple plutôt qu'être trop ambitieux.
J'ai une petite idée d'où viennent les éléments de la météo, la neige, les feuilles et la pluie .
Aussi, le titre "Kaaris Vs Booba" se prêterait plus à un jeu de baston.
Mon jeu multi online gratuit : https://gamejolt.com/games/space-war/482884
Mon jeu multi online gratuit : https://gamejolt.com/games/space-war/482884
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Mon jeu multi online gratuit : https://gamejolt.com/games/space-war/482884
Bonhomme !! | Jeu de plateforme : Prototype.
Mon jeu multi online gratuit : https://gamejolt.com/games/space-war/482884
Mon jeu multi online gratuit : https://gamejolt.com/games/space-war/482884
Mon jeu multi online gratuit : https://gamejolt.com/games/space-war/482884
Mon jeu multi online gratuit : https://gamejolt.com/games/space-war/482884