Programmation en C/SDL2 - Déplacement du personnage

Description du jeux

Conception du jeux

Le projet comporte deux fichiers objets :

Le fichier main.c va initialiser la SDL et nos objets map et hero. On va ensuite rentrer dans une boucle infinie, en attente d'évènement.

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

Téléchargement

j22.tar.gz