Programmation en C/SDL2 - Déplacement du personnage
Description du jeux
Conception du jeux
Le projet comporte deux fichiers objets :
- L'objet map : qui charge la carte à partir d'un fichier ASCII et d'un fichier image (théorie des tuiles)
- L'objet hero : qui va implémenter les opérations de notre personnage
Opérations en cours d'implémentation
Lors du déplacement le personnage manquait de fluidité. Nous avons donc rajouté un sprite intermédaire lors du déplacement. Celui-ci est géré par un type énuméré correspondant à la position de la colonne du fichier image:

Ce type est déclaré dans hero.h de la manière suivante:
typedef enum {POS0, POS1} FramePos;
Nous avons donc rajouté un argument dans le prototype de la fonction:
void display_hero_sdl(Hero *hero, SDL_Renderer *renderer, int stepX, int stepY, Direction d, FramePos fp);
Nous avons ensuite rajouté un switch/case dans la fonction display_hero() du fichier hero.c
void display_hero_sdl(Hero *this, SDL_Renderer *renderer, int stepX, int stepY, Direction direction, FramePos framepos ) { SDL_Texture *texture; if (this->surface) { printf("Image personnage ok\n"); texture=SDL_CreateTextureFromSurface(renderer, this->surface); } else { printf("Probleme image perso\n"); } this->pos.x = this->pos.x + stepX; this->pos.y = this->pos.y + stepY; switch (framepos) { case POS0: this->heroSprite.x = 0; break; case POS1: this->heroSprite.x = SIZE_BMP_HERO; break; default: break; } switch (direction) { case E: this->heroSprite.y = 0; break; case N: this->heroSprite.y = SIZE_BMP_HERO; break; case W: this->heroSprite.y = 2*SIZE_BMP_HERO; break; case S: this->heroSprite.y = 3*SIZE_BMP_HERO; break; default: break; } SDL_RenderCopy(renderer, texture, &this->heroSprite, &this->pos); SDL_RenderPresent(renderer); SDL_DestroyTexture(texture); }
Source du projet en cours
Compilation
Dans un Terminal, on peut compiler les sources en tapant la commande make. Un exécutable appelé jeu devrait-être crée. Pour l'exécuter on tapera dans le terminal, à l'endroit où l'on a compilé le programme, la commande ./jeu