C/sdl - mouvement basique pour débutant

Description

Bonjour à tous,

Voici donc le code source d'un programme tout simple. Celui-ci fait avancer de gauche à droite puis de droite à gauche une vache sur de l'herbe. Ici le but et d'offrir un code très basique utilisant la SDL pour toute personne voulant débuter en SDL.

Avec ce code, vous devriez être capable d'afficher des images sur une fenêtre, gérer la transparence d'une image, et de créer un mouvement simple.

Source / Exemple :


#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

/**********************************************************
                     FONCTION MAIN

                                                                                                                    • /
int main(int argc, char *argv[]) { //Création des variables SDL_Surface *fond = NULL, *pelouse = NULL, *vache = NULL; SDL_Rect positionPelouse, positionVache; int continuer = 1, droite = 1; SDL_Event event; //Initialisation de la SDL SDL_Init(SDL_INIT_VIDEO); //Création de nos surface fond = SDL_SetVideoMode(640,480,32,SDL_HWSURFACE); pelouse = SDL_LoadBMP("pelouse.bmp"); vache = SDL_LoadBMP("vache.bmp"); //On gère la transparence sur la vache SDL_SetColorKey(vache, SDL_SRCCOLORKEY,SDL_MapRGB(vache->format,0,0,255)); //Changement du titre de la fenêtre SDL_WM_SetCaption("Test sur les mouvements en C",NULL); //On colore notre fond SDL_FillRect(fond,NULL,SDL_MapRGB(fond->format,255,0,0)); //On donne une position à notre pelouse positionPelouse.x = 0; positionPelouse.y = 0; positionVache.x = 320; positionVache.y = 240; //On blit la pelouse et la vache SDL_BlitSurface(pelouse,NULL,fond,&positionPelouse); SDL_BlitSurface(vache,NULL,fond,&positionVache); //Boucle pour faire avancer la vache (tant qu'on n'a pas quitter le programme, la boucle ne s'arrête pas) while(continuer) { SDL_PollEvent(&event); switch (event.type) { case SDL_QUIT : continuer = 0; break; } if (positionVache.x > 590) droite = 0; if (positionVache.x <= 0) droite = 1; //On change la vache de position if (droite) positionVache.x++; else positionVache.x--; SDL_Delay(10); //On met en pause 10ms //on efface l'écran et réaffichons tout SDL_FillRect(fond,NULL,SDL_MapRGB(fond->format,255,255,255)); SDL_BlitSurface(pelouse,NULL,fond,&positionPelouse); SDL_BlitSurface(vache,NULL,fond,&positionVache); //On met à jour l'écran SDL_Flip(fond); } //On ferme la SDL et les surfaces: SDL_FreeSurface(pelouse); SDL_FreeSurface(vache); SDL_Quit(); return EXIT_SUCCESS; }

Conclusion :


Codez, mais codez propre

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.