begin process at 2012 05 27 19:11:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > C/SDL - MOUVEMENT BASIQUE POUR DÉBUTANT

C/SDL - MOUVEMENT BASIQUE POUR DÉBUTANT




 Description

Cliquez pour voir la capture en taille normale
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

  • #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;
  • }
#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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   testMouvement
    • main.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 728 octets
    • main.oTélécharger ce fichier [Réservé aux membres club]1 894 octets
    • Makefile.winTélécharger ce fichier [Réservé aux membres club]835 octets
    • pelouse.bmpTélécharger ce fichier [Réservé aux membres club]Voir ce fichier921 654 octets
    • SDL.dllTélécharger ce fichier [Réservé aux membres club]321 536 octets
    • testMouvement.devTélécharger ce fichier [Réservé aux membres club]914 octets
    • vache.bmpTélécharger ce fichier [Réservé aux membres club]Voir ce fichier7 654 octets

Télécharger le zip


 Sources du même auteur

Source avec une capture JEU DE PENDU AVEC SDL, FMOD ET TTF

 Sources de la même categorie

Source avec Zip KISIEL CD INFO DRIVE par kisiel0147852
Source avec une capture SUPPRESSION DES REDONDANCES DE FICHIERS par cyberntique
Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture JEUX SERPENT par antho974
Source avec Zip Source avec une capture PENDU EN SDL par Damsou91
Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture CASSE BRIQUE [C] [SDL] par smartties

Commentaires et avis

Commentaire de LeFauve42 le 28/09/2009 11:17:00

Ca a l'air sympa, mais je ne vois pas ou tu prends en compte la VBL...
Le double buffer limite les artefacts de refresh, mais si beaucoup de chose bougent, ou si les mouvements sont rapides, ca va se voir.

Eric

Commentaire de Sc59300 le 03/04/2010 21:56:25

Moi je ne comprend pas pourquoi tu as mis : SDL_PollEvent
Alors que c'est une petite application et tu aura ton proc qui risque de saturer :s

Bien entendu se n'est que mon avis (je débute depuis cet aprem)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Lib SDL -> probleme d'images [ par zmc ] bonjour, je debute plus ou moins en SDL, et je n'ai pas réussi a afficher un sprites (animé ou non) sur une image de fond. Selon la méthode que j'empl TGALoader +SDL [ par Arnaud16022 ] HI!je voudrais juste savoir si il y a moyen de charger unne image avec le TGA Loader de funto, pour l'afficher a l'écran a l'aide de SDL_CreateRGBSurf [SDL] Alternation d'une image [ par hoxid ] Salut !Bon voila j'ai un probleme avec SDL :je veux par exemple faire un gars qui marche (image "bonome.bmp") et que cette image se change en "bonomeq Problème SDL [ par MATHIS49 ] Bonjour ! Je d&#233;bute en C++ et en SDL , j'ai donc d&#233;cortiqu&#233; un petit programme fait en SDL qui avait pour l'avantage d'&#234;tre acces Probleme SDL_image , à l'aide [ par DarkSchen ] Bonjour,mon problème est que je n'arrive pas à configurer correctement SDL_imageProtocole suivi : je travaille sous Dev c++ 4.9.5 avec g++ comme compi SDL et Surface [ par Kangourou_Nomade ] Je voulais savoir si, en SDL, il &#233;tait pr&#233;f&#233;rable de loader une image a partir d'un fichier au fur et a mesure du d&#233;roulement du j probleme SDL et POO [ par darmoor ] voila je suis encore qu'un d&#233;butant dans la mati&#232;re avec la POO et j'apprend a utiliser SDL j'ai fait un essai en affichant un image et ave aidé moi svp [ par iliassh ] je veux de l'aide pour que j'ajoute a ce jeux une fonction qui permeté d'affiché des brique qui ce seron bliti quand la balle les touche je veux svp q SDL image et masque [ par Timidouveg ] Bonjour Je poste pour la première fois ici Je développe toutes sortes de petits programmes et aussi un projet de réalité virtuelle en C/C++ avec SDL/O Effacer une image avec SDL en C [ par flofloo ] slt tout le mondevoici mon probleme j'ai realiser un petit prog qui affiche une image a l'appui de la touche "x" et maintenant je voudrais faire le co


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales